Next: , Up: オブジェクトの内部   [Contents][Index]


E.9.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にはバッファーが最後にvisitや保存されたときのmodiffの値が含まれる。chars_modiffはバッファー内の文字にたいする変更だけをカウントして、(テキストプロパティのように)その他すべての種類の変更を無視する。overlay_modiffはバッファーのオーバーレイにたいする変更だけをカウントする。

beg_unchanged
end_unchanged

最後の再表示完了以降に未変更だと解っているテキスト、開始と終了の箇所での文字数。

unchanged_modified
overlay_unchanged_modified

それぞれ最後に再表示が完了した後のmodiffoverlay_modiffの値。これらのカレント値がmodiffoverlay_modiffとマッチしたら、それはbeg_unchangedend_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-hookkill-buffer-query-functions (バッファーのkillを参照)、buffer-list-update-hook (バッファーリストを参照)が実行されないことを示す。このフラグはバッファー作成時にセットされて(バッファーの作成を参照)、内部バッファーやwith-temp-buffer (Current Buffer)が作成するバッファーの速度低下を防ぐ。

overlay_center

このフィールドはカレントオーバーレイの中心位置を保持する。オーバーレイの管理を参照のこと。

overlays_before
overlays_after

これらのフィールドはカレントオーバーレイ中心、またはその前で終わるオーバーレイのリスト、およびカレントオーバーレイの後で終わるオーバーレイのリスト。オーバーレイの管理を参照のこと。overlays_beforeは終端位置の記述順、overlays_afterは先頭位置増加順で格納される。

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_listbuffer-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

これらのフィールドはインダイレクトバッファー、またはインダイレクトバッファーのベースバッファーであるようなバッファーでのみ使用される。これらはそれぞれバッファーがカレントでないときにバッファーにたいするptbegvzvを記録するマーカーを保持する。

mode_line_format
header_line_format
case_fold_search
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_formatmode-line-formatの値を格納する。

last_selected_window

これは最後に選択されていたときにそのバッファーを表示していたウィンドウ、またはそのウィンドウがすでにそのバッファーを表示していなければnil


Next: ウィンドウの内部, Up: オブジェクトの内部   [Contents][Index]