Cでバッファーを表すために2つの構造体(buffer.hを参照)が使用されます。buffer_text
構造体にはバッファーのテキストを記述するフィールドが含まれます。buffer
構造体は他のフィールドを保持します。インダイレクトバッファーの場合には、2つ以上のbuffer
構造体が同じbuffer_text
構造体を参照します。
以下にstruct buffer_text
内のフィールドをいくつか示します:
beg
バッファーコンテンツのアドレス。バッファーコンテンツは途中にギャップをもつchar
の線形C配列。
gpt
gpt_byte
バッファーのギャップの文字位置とバイト位置。バッファーのギャップを参照のこと。
z
z_byte
バッファーテキストの終端の文字位置とバイト位置。
gap_size
バッファーのギャップのサイズ。バッファーのギャップを参照のこと。
modiff
save_modiff
chars_modiff
overlay_modiff
これらのフィールドは、そのバッファーで行われたバッファー変更イベントの数をカウントする。modiff
はバッファー変更イベントのたびに増分されて、それ以外では決して変化しない。save_modiff
にはバッファーが最後にvisitや保存されたときのmodiff
の値が含まれる。chars_modiff
はバッファー内の文字にたいする変更だけをカウントして、(テキストプロパティのように)その他すべての種類の変更を無視する。overlay_modiff
はバッファーのオーバーレイにたいする変更だけをカウントする。
beg_unchanged
end_unchanged
最後の再表示完了以降に未変更だと解っているテキスト、開始と終了の箇所での文字数。
unchanged_modified
overlay_unchanged_modified
それぞれ最後に再表示が完了した後のmodiff
とoverlay_modiff
の値。これらのカレント値がmodiff
やoverlay_modiff
とマッチしたら、それはbeg_unchanged
とend_unchanged
に有用な情報が含まれないことを意味する。
markers
このバッファーを参照するマーカー。これは実際には単一のマーカーであり、自身のマーカーチェーン (リンクリスト)内の一連の要素がバッファー内のテキストを参照する他のマーカーになる。
intervals
そのバッファーのテキストプロパティを記録するインターバルツリー。
struct buffer
のいくつかのフィールドを以下に示します:
header
タイプunion vectorlike_header
のヘッダーは、すべてのベクター類似のオブジェクトに共通。
own_text
構造体struct
buffer_text
は通常はバッファーのコンテンツを保持する。このフィールドはインダイレクトバッファーでは使用されない。
text
そのバッファーのbuffer_text
構造体へのポインター。通常のバッファーでは上述のown_text
フィールド。インダイレクトバッファーではベースバッファーのown_text
フィールド。
next
killされたバッファーを含むすべてのバッファーのチェーン内において次のバッファーへのポインター。このチェーンはkillされたバッファーを正しく回収するために割り当てとガーベージコレクションのためだけに使用される。
pt
pt_byte
バッファー内のポイントの文字位置とバイト位置。
begv
begv_byte
そのバッファー内のアクセス可能範囲の先頭位置の文字位置とバイト位置。
zv
zv_byte
そのバッファー内のアクセス可能範囲の終端位置の文字位置とバイト位置。
base_buffer
インダイレクトバッファーではベースバッファーのポイント。通常のバッファーではnull。
local_flags
このフィールドはバッファー内でローカルな変数にたいしてそれを示すフラグを含む。そのような変数はCコードではDEFVAR_PER_BUFFER
を使用して宣言され、それらのバッファーローカルなバインディングはバッファー構造体自身内のフィールドに格納される(これらのフィールドのいくつかはこのテーブル内で説明している)。
modtime
visitされているファイルの変更時刻。これはファイルの書き込みと読み込み時にセットされる。そのバッファーをファイルに書き込む前にファイルがディスク上で変更されていないことを確認するために、このフィールドとそのファイルの変更時刻を比較する。バッファーの変更を参照のこと。
auto_save_modified
そのバッファーが最後に自動保存されたときの時刻。
last_window_start
そのバッファーが最後にウィンドウに表示されたときのバッファー内でのwindow-start
位置。
clip_changed
このフラグはバッファーでのナローイングが変更されているかを示す。ナローイングを参照のこと。
prevent_redisplay_optimizations_p
このフラグはバッファーの表示において再表示最適化が使用されるべきではないことを示す。
inhibit_buffer_hooks
このフラグはそのバッファーではフックkill-buffer-hook
、kill-buffer-query-functions
(バッファーのkillを参照)、buffer-list-update-hook
(バッファーリストを参照)が実行されないことを示す。このフラグはバッファー作成時にセットされて(バッファーの作成を参照)、内部バッファーやwith-temp-buffer
(Current Buffer)が作成するバッファーの速度低下を防ぐ。
name
バッファーを命名するLisp文字列。一意であることが保証されている。バッファーの名前を参照のこと。このフィールドと以降のフィールドは以下のようにBVAR
を介するアクセス以外の方法で直接アクセスするべきではないことを示すためにC構造体定義内の名前の最後に_
をもつ:
Lisp_Object buf_name = BVAR (buffer, name);
save_length
そのバッファーがvisitしているファイルを最後に読み込み、または保存したときの長さ。2つの特別な値をもつことができる。-1はそのバッファーで自動保存がオフであること、-2はバッファーのテキストが大量に減少するようなら自動保存をオフに切り替えないことを意味する。インダイレクトバッファーは決して保存されることはないので、保存に関して、このフィールドとその他のフィールドはbuffer_text
構造体で維持されない
directory
相対ファイル名を展開するディレクトリー。これはバッファーローカル変数default-directory
の値(ファイル名を展開する関数を参照)。
filename
そのバッファーがvisitしているファイルの名前。これはバッファーローカル変数buffer-file-name
の値(バッファーのファイル名を参照)。
undo_list
backed_up
auto_save_file_name
auto_save_file_format
read_only
file_format
file_truename
invisibility_spec
display_count
display_time
これらのフィールドは自動的にバッファーローカル(バッファーローカル変数を参照)になるLisp変数の値を格納する。これらに対応する変数は名前に追加のプレフィクスbuffer-
がつき、アンダースコアがダッシュで置換される。たとえばundo_list
はbuffer-undo-list
の値を格納する。
mark
そのバッファーにたいするマーク。マークはマーカーなのでリストmarkers
内にも含まれる。マークを参照のこと。
local_var_alist
この連想リストはバッファーのバッファーローカル変数のバインディングを記述する。これにはバッファーオブジェクト内に特別なスロットをもつ、ビルトインのバッファーローカルなバインディングは含まれない(このテーブルではそれらのスロットは省略している)。バッファーローカル変数を参照のこと。
major_mode
そのバッファーのメジャーモードを命名するシンボル(例: lisp-mode
)。
mode_name
そのメジャーモードの愛称(例: "Lisp"
)。
keymap
abbrev_table
syntax_table
category_table
display_table
これらのフィールドはバッファーのローカルキーマップ(キーマップを参照)、abbrevテーブル(abbrevテーブルを参照)、構文テーブル(構文テーブルを参照)、カテゴリーテーブル(カテゴリーを参照)、ディスプレイテーブル(ディスプレーテーブルを参照)を格納する。
downcase_table
upcase_table
case_canon_table
これらのフィールドはテキストを小文字、大文字、およびcase-fold検索でのテキストの正規化の変換テーブルを格納する。caseテーブルを参照のこと。
minor_modes
そのバッファーのマイナーモードのalist。
pt_marker
begv_marker
zv_marker
これらのフィールドはインダイレクトバッファー、またはインダイレクトバッファーのベースバッファーであるようなバッファーでのみ使用される。これらはそれぞれバッファーがカレントでないときにバッファーにたいするpt
、begv
、zv
を記録するマーカーを保持する。
mode_line_format
header_line_format
tab_width
fill_column
left_margin
auto_fill_function
truncate_lines
word_wrap
ctl_arrow
bidi_display_reordering
bidi_paragraph_direction
selective_display
selective_display_ellipses
overwrite_mode
abbrev_mode
mark_active
enable_multibyte_characters
buffer_file_coding_system
cache_long_line_scans
point_before_scroll
left_fringe_width
right_fringe_width
fringes_outside_margins
scroll_bar_width
indicate_empty_lines
indicate_buffer_boundaries
fringe_indicator_alist
fringe_cursor_alist
scroll_up_aggressively
scroll_down_aggressively
cursor_type
cursor_in_non_selected_windows
これらのフィールドは自動的にバッファーローカル(バッファーローカル変数を参照)になるLisp変数の値を格納する。これらに対応する変数は名前のアンダースコアがダッシュで置換される。たとえばmode_line_format
はmode-line-format
の値を格納する。
overlays
そのバッファーのオーバーレイを含んだインターバルツリー(interval tree: 区間木)。
last_selected_window
これは最後に選択されていたときにそのバッファーを表示していたウィンドウ、またはそのウィンドウがすでにそのバッファーを表示していなければnil
。