C言語でバッファを表現するには、2つの構造体(buffer.hを参照)が用いられます。buffer_text構造体にはバッファのテキストを記述するフィールドが含まれ、buffer構造体には他のフィールドが格納されます。間接バッファの場合、2つ以上のbuffer構造体が同じbuffer_text構造体を参照します。
struct buffer_textに含まれるフィールドの一部を以下に示します。
begバッファ内容のアドレス。バッファ内容はcharの線形C配列であり、その途中にギャップが存在する。
gptgpt_byteバッファギャップの文字位置およびバイト位置。バッファギャップを参照してください。
zz_byteバッファテキスト末尾の文字位置およびバイト位置。
gap_sizeバッファギャップのサイズ。バッファギャップを参照。
modiffsave_modiffchars_modiffoverlay_modiffこれらのフィールドは、このバッファで行われたバッファ変更イベントの回数をカウントします。modiffはバッファ変更イベントが発生するたびにインクリメントされ、それ以外で変更されることはありません。save_modiffには、バッファが最後に参照または保存された時点のmodiffの値が格納されます。chars_modiffはバッファ内の文字に対する変更のみをカウントし、それ以外のあらゆる種類の変更(テキストプロパティなど)は無視します。overlay_modiffはバッファのオーバーレイに対する変更のみをカウントします。
beg_unchangedend_unchanged前回の完全な再表示以降、変更されていないことが分かっているテキストの先頭および末尾の文字数。
unchanged_modifiedoverlay_unchanged_modified最後の完全な再表示後の modiff および overlay_modiff の値。これらの現在の値が modiff または overlay_modiff
と一致する場合、beg_unchanged および end_unchanged には有用な情報が含まれていないことになる。
markersこのバッファを参照するマーカー。実際には単一のマーカーであり、そのマーカーのチェーン(連結リスト)に続く要素が、このバッファテキストを参照する他のマーカーとなります。
intervalsこのバッファのテキスト属性を記録するインターバルツリー。
struct buffer のフィールドの一部は以下の通りです:
headerunion
vectorlike_header型のヘッダーは、すべてのベクトル型オブジェクトに共通しています。
own_text通常、バッファの内容を保持する struct buffer_text
構造体。間接バッファでは、このフィールドは使用されない。
textこのバッファの buffer_text 構造体へのポインタ。通常のバッファでは、これは上記の
own_text フィールドにあたる。間接バッファでは、これはベースバッファの own_text フィールドにあたる。
next破棄済みバッファを含むすべてのバッファのチェーンにおける、次のバッファへのポインタ。このチェーンは、破棄済みバッファを適切に回収するための割り当ておよびガベージコレクションにのみ使用される。
ptpt_byteバッファ内におけるpointの文字位置およびバイト位置。
begvbegv_byteバッファ内のアクセス可能なテキスト範囲の先頭の文字位置およびバイト位置。
zvzv_byteバッファ内のアクセス可能なテキスト範囲の末尾の文字位置およびバイト位置。
base_buffer間接バッファでは、これはベースバッファを指します。通常のバッファでは、nullとなります。
local_flagsこのフィールドには、特定の変数がこのバッファ内でローカルであることを示すフラグが含まれています。こうした変数はCコード内でDEFVAR_PER_BUFFERを用いて宣言され、そのバッファローカルな束縛はバッファ構造体自体のフィールドに格納されます。(これらのフィールドの一部については、本表で説明しています。)
modtime参照先ファイルの更新日時。ファイルの書き込みまたは読み取り時に設定されます。バッファをファイルに書き込む前に、このフィールドとファイルの更新日時が比較され、ディスク上のファイルに変更があったかどうかが確認されます。バッファの変更を参照してください。
auto_save_modifiedバッファが最後に自動保存された時刻。
last_window_startバッファが最後にウィンドウに表示された時点における、バッファ内の window-start 位置。
clip_changedこのフラグは、バッファ内でナローイングが変更されたことを示します。ナローイングを参照してください。
prevent_redisplay_optimizations_pこのフラグは、このバッファの表示に再表示最適化を使用しないことを示します。
inhibit_buffer_hooksこのフラグは、バッファがフック kill-buffer-hook、kill-buffer-query-functions(バッファの破棄を参照)、および buffer-list-update-hook(バッファリストを参照)を実行すべきでないことを示します。このフラグはバッファ作成時に設定され(バッファの作成を参照)、with-temp-buffer によって作成されるもの(カレントバッファを参照)などの内部バッファや一時バッファの動作を遅くすることを防ぎます。
nameバッファ名を指定するLisp文字列です。一意であることが保証されています。バッファ名を参照してください。このフィールドおよび後続のフィールドのC構造体定義における名前は、直接アクセスせず、次のようにBVARマクロ経由でアクセスすべきであることを示すため、末尾に_が付いています。
Lisp_Object buf_name = BVAR (buffer, name);
save_lengthこのバッファが最後に読み込まれたか保存された際のファイル長。これには2つの特殊な値があり得ます。−1はこのバッファで自動保存が無効になっていたことを意味し、−2はバッファのテキストが大幅に縮小しても自動保存を無効にしないことを意味します。これおよび保存に関するその他のフィールドは、間接バッファが保存されることはないため、buffer_text構造体には保持されません。
directory相対ファイル名を展開するためのディレクトリ。これはバッファローカル変数 default-directory の値です(ファイル名を展開する関数を参照)。
filenameこのバッファで参照されたファイルの名前、または nil。これはバッファローカル変数 buffer-file-name の値です(バッファファイル名 を参照)。
undo_listbacked_upauto_save_file_nameauto_save_file_formatread_onlyfile_formatfile_truenameinvisibility_specdisplay_countdisplay_timeこれらのフィールドには、自動的にバッファローカルとなるLisp変数(バッファローカル変数を参照)の値が格納されます。対応する変数名には追加の接頭辞
buffer- が付与されており、アンダースコアはダッシュに置き換えられています。例えば、undo_list には buffer-undo-list
の値が格納されます。
markバッファのマーク。マークはマーカーであるため、リスト markers にも含まれています。マーク を参照してください。
local_var_alistこのバッファのバッファローカル変数の束縛を記述した連想配列。ただし、バッファオブジェクト内に専用スロットを持つ組み込みのバッファローカル束縛は含まない。(これらのスロットは本表では省略されている。)バッファローカル変数を参照。
major_modeこのバッファのメジャーモードを示すシンボル(例:lisp-mode)。
mode_nameメジャーモードの分かりやすい名称(例:"Lisp")。
keymapabbrev_tablesyntax_tablecategory_tabledisplay_tableこれらのフィールドには、バッファのローカルキーマップ(キーマップを参照)、略語テーブル(略語テーブルを参照)、構文テーブル(構文テーブルを参照)、カテゴリテーブル(カテゴリを参照)、および表示テーブル(表示テーブルを参照)が格納されます。
downcase_tableupcase_tablecase_canon_tableこれらのフィールドには、テキストを小文字や大文字に変換するための変換テーブル、およびケースフォールド検索用にテキストを正規化するための変換テーブルが格納されています。ケーステーブルを参照してください。
minor_modesこのバッファのマイナーモードの一覧。
pt_markerbegv_markerzv_markerこれらのフィールドは、間接バッファ、または間接バッファの基となるバッファにおいてのみ使用されます。それぞれ、バッファがカレントでない場合に、そのバッファの
pt、begv、および zv をそれぞれ記録するマーカーを保持しています。
mode_line_formatheader_line_formattab_widthfill_columnleft_marginauto_fill_functiontruncate_linesword_wrapctl_arrowbidi_display_reorderingbidi_paragraph_directionselective_displayselective_display_ellipsesoverwrite_modeabbrev_modemark_activeenable_multibyte_charactersbuffer_file_coding_systemcache_long_line_scanspoint_before_scrollleft_fringe_widthright_fringe_widthfringes_outside_marginsscroll_bar_widthindicate_empty_linesindicate_buffer_boundariesfringe_indicator_alistfringe_cursor_alistscroll_up_aggressivelyscroll_down_aggressivelycursor_typecursor_in_non_selected_windowsこれらのフィールドには、自動的にバッファローカルとなるLisp変数(バッファローカル変数を参照)の値が格納されており、対応する変数名ではアンダースコアがダッシュに置き換えられています。例えば、mode_line_formatにはmode-line-formatの値が格納されます。
overlaysこのバッファのオーバーレイを保持するインターバルツリー。
last_selected_windowこれは、このバッファが含まれていた最後に選択されたウィンドウです。そのウィンドウでこのバッファが表示されなくなった場合は、nil となります。