Next: Generic Modes, Previous: Mode Hooks, Up: Major Modes [Contents][Index]
Tabulated Listモードとは、表形式データ(エントリーから構成されるデータで各エントリーはそれぞれテキストの1行を占め、エントリーの内容は列に分割されるようなデータ)を表示するためのメジャーモードです。Tabulated Listモードは行列の見栄えよくプリントする機能、および各列の値に応じて行をソートする機能を提供します。これはSpecialモードから派生されたモードです(Basic Major Modesを参照)。
Tabulated Listモードは、より特化したメジャーモードの親モードとして使用されることを意図しています。例としてはProcess Menuモード(Process Informationを参照)、Package Menuモード(Package Menu in The GNU Emacs Manualを参照)が含まれます。
このような派生されたモードはtabulated-list-mode
を2つ目の引数に指定して、通常の方法でdefine-derived-mode
を使用するべきです(Derived Modesを参照)。define-derived-mode
フォームのbodyは以下にドキュメントされている変数に値を割り当てることにより、表形式データのフォーマットを指定するべきです。その後にオプションで列名のヘッダーを挿入する関数tabulated-list-init-header
を呼び出すことができます。
派生されたモードはリスティングコマンド(listing command)も定義するべきです。これはモードコマンドではなく、(M-x
list-processesのように)ユーザーが呼び出すコマンドです。リスティングコマンドはバッファーを作成または切り替えて、派生モードをオンにして表形式データを指定し、最後にそのバッファーを事前設定(populate)するためにtabulated-list-print
を呼び出すべきです。
このバッファーローカル変数は表形式データのフォーマットを指定する。値はベクターであり、ベクターの各要素はデータ列を表すリスト(name
width sort)
である。ここで
nil
ならその列はソートに使用できない。t
なら列の文字列値を比較することによりソートされる。それ以外ならtabulated-list-entries
の要素と同じ形式の2つの引数をとる、sort
にたいする述語関数(predicate
function)であること。
このバッファーローカル変数はTabulated Listバッファー内に表示されるエントリーを指定する。値はリストか関数のいずれかであること。
値がリストなら各リスト要素は1つのエントリーに対応し、(id contents)
という形式であること。ここで
nil
、またはエントリーを識別するLispオブジェクト。Lispオブジェクトならエントリーを再ソートした際、カーソルは同じエントリー上に留まる。比較はequal
で行われる。
tabulated-list-format
と要素数が同じベクター。ベクター要素は文字列かリスト。文字列ならバッファーにそのまま挿入される。リスト(label
.
properties)
なら、labelとpropertiesを引数としてinsert-text-button
を呼び出すことによってテキストボタンを挿入することを意味する(Making Buttonsを参照)。
これらの文字列には改行を含めないこと。
それ以外なら、それは値は引数なしで呼び出されて上記形式のリストをリターンする関数であること。
このノーマルフックはTabulated
Listバッファーのリバートに先立ち実行される。派生モードはtabulated-list-entries
を再計算するためにこのフックに関数を追加できる。
この変数の値はポイント位置にエントリー(エントリーを終端する改行を含む)を挿入するために呼び出される関数である。この関数はtabulated-list-entries
と同じ意味をもつ2つの引数idとcontentsを受け取る。デフォルト値はエントリーをそのまま挿入する関数である。より複雑な方法でTabulated
Listモードを使用するモードは別の関数を指定できる。
この変数の値はTabulated
Listバッファーにたいするカレントのソートキーを指定する。nil
ならソートは行われない。それ以外なら(name
.
flip)
という形式の値をもつ。ここでnameはtabulated-list-format
内の列目の1つとマッチする文字列、flipが非nil
なら逆順でのソートを意味する。
この関数はTabulated
Listバッファーにたいするheader-line-format
を計算してセットし、列ヘッダー上でのクリックでソートを可能にするキーマップをヘッダー行に割り当てる。
Tabulated
Listから派生したモードは、上記の変数(特にtabulated-list-format
をセットした後のみ)をセットした後にこれを呼び出すこと。
この関数はカレントバッファーにエントリーを挿入する。これをリスティングコマンドとして呼び出すこと。この関数はバッファーを消去してtabulated-list-entries
で指定されるエントリーをtabulated-list-sort-key
にしたがってソートした後、各エントリーを挿入するためにtabulated-list-printer
で指定される関数を呼び出す。
オプション引数remember-posが非nil
なら、この関数はカレント行でid要素を探して、もしあればすべてのエントリーを(再)挿入して、その後にそのエントリーの移動を試みる。
オプション引数updateが非nil
なら、この関数は最後のプリント以降に変更されたエントリーの削除か追加だけを行う。この関数が最後に呼び出されて以降、ほとんどのエントリーが変更されていなければ、この関数は数倍高速になる。結果の違いはtabulated-list-put-tag
を通じて配置されたタグが変更されていないエントリーから削除されないことだけである(通常はすべてのタグが削除される)。
この関数はポイント位置のエントリーを削除する。
リスト(id
cols)
をリターンする。ここでidは削除したエントリーのID、colsは列修飾子(column
descriptors)のベクター。カレント行の先頭にポイントを移動する。ポイント位置にエントリーがなければnil
をリターンする。
この関数はバッファーのコンテンツだけを変更することに注意。tabulated-list-entries
は変更しない。
このdefsubst
はtabulated-list-entries
がリストならIDオブジェクト、関数ならtabulated-list-entries
がリターンするリストからIDオブジェクトをリターンする。posが省略かnil
の場合のデフォルトはポイント位置。
このdefsubst
はtabulated-list-entries
がリストならエントリーオブジェクト、関数ならtabulated-list-entries
がリターンするリストからエントリーオブジェクトをリターンする。これはposにあるIDにたいするベクターになるだろう。posにエントリーがなければ、この関数はnil
をリターンする。
このdefsubst
はposに偽ヘッダーがあれば非nil
をリターンする。偽ヘッダー(fake
header)はバッファー先頭に列名を配置するためにtabulated-list-use-header-line
がnil
にセットされている場合に使用される。posが省略かnil
の場合のデフォルトはpoint-min
。
この関数はレント行のパディングエリアにtagを配置する。パディングエリアはその行の先頭にある空スペースであり、幅はtabulated-list-padding
により制御される。tagは長さがtabulated-list-padding
以下の文字列であること。advanceが非nil
なら、この関数は1行分ポイントを前方に移動する。
この関数はcolをdescにセットしてポイント位置にあるTabulated
Listのエントリーを変更する。colは変更する列番号か列名、descは新たな列記述子であり、tabulated-list-print-col
を通じて挿入される。
change-entry-dataが非nil
なら、この関数は列記述子のベクターをdesc
にセットすることにより、背後のデータ(通常はリストtabulated-list-entries
内の列記述子)を変更する。