GNU Emacs 32.0.50 (9008bf64c3) のマニュアルを PLaMo 翻訳で機械翻訳したものです。誤訳を含むことがあります。原文: https://www.gnu.org/software/emacs/manual/html_node/elisp/Buffer-Internals.html ・ emacs-doc.conao3.com

E.8.1 バッファの内部構造

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には、バッファが最後に参照または保存された時点の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

破棄済みバッファを含むすべてのバッファのチェーンにおける、次のバッファへのポインタ。このチェーンは、破棄済みバッファを適切に回収するための割り当ておよびガベージコレクションにのみ使用される。

pt
pt_byte

バッファ内におけるpointの文字位置およびバイト位置。

begv
begv_byte

バッファ内のアクセス可能なテキスト範囲の先頭の文字位置およびバイト位置。

zv
zv_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_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

これらのフィールドには、バッファのローカルキーマップ(キーマップを参照)、略語テーブル(略語テーブルを参照)、構文テーブル(構文テーブルを参照)、カテゴリテーブル(カテゴリを参照)、および表示テーブル(表示テーブルを参照)が格納されます。

downcase_table
upcase_table
case_canon_table

これらのフィールドには、テキストを小文字や大文字に変換するための変換テーブル、およびケースフォールド検索用にテキストを正規化するための変換テーブルが格納されています。ケーステーブルを参照してください。

minor_modes

このバッファのマイナーモードの一覧。

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

このバッファのオーバーレイを保持するインターバルツリー。

last_selected_window

これは、このバッファが含まれていた最後に選択されたウィンドウです。そのウィンドウでこのバッファが表示されなくなった場合は、nil となります。