24.2.7 Tabulated Listモード

Tabulated Listモードとは、表形式データ(エントリーから構成されるデータで各エントリーはそれぞれテキストの1行を占め、エントリーの内容は列に分割されるようなデータ)を表示するためのメジャーモードです。Tabulated Listモードは行列の見栄えよくプリントする機能、および各列の値に応じて行をソートする機能を提供します。これはSpecialモードから派生されたモードです(基本的なメジャーモードを参照)。

Tabulated Listモードは単一のフォントとテキストサイズによりモノスペースフォントを使用してテキストを表示するように調整されています。可変ピッチフォントやイメージを使用したテーブルが表示したければ、かわりにmake-vtableを使うことができます。vtableでは1つのバッファーに複数のテーブルをもったり、テーブルと追加のテキストの両方を含んだバッファーをもつことができます。詳細については(vtable)Introductionを参照してください。

Tabulated Listモードは、より特化したメジャーモードの親モードとして使用されることを意図しています。例としてはProcess Menuモード(プロセスの情報を参照)、Package Menuモード(Package Menu in The GNU Emacs Manualを参照)が含まれます。

このような派生されたモードはtabulated-list-modeを2つ目の引数に指定して、通常の方法でdefine-derived-modeを使用するべきです(派生モードの定義を参照)。define-derived-modeフォームのbodyは以下にドキュメントされている変数に値を割り当てることにより、表形式データのフォーマットを指定するべきです。その後にオプションで列名のヘッダーを挿入する関数tabulated-list-init-headerを呼び出すことができます。

派生されたモードはリスティングコマンド(listing command)も定義するべきです。これはモードコマンドではなく、(M-x list-processesのように)ユーザーが呼び出すコマンドです。リスティングコマンドはバッファーを作成または切り替えて、派生モードをオンにして表形式データを指定し、最後にそのバッファーを事前設定(populate)するためにtabulated-list-printを呼び出すべきです。

User Option: tabulated-list-gui-sort-indicator-asc

この変数はGUIフレームにおいて列が昇順でソートされていることを示すために使用する文字を指定する。

Tabulated Listバッファーでソート方向を変更するたびに、このインジケーターの昇順(“asc”)と降順(“desc”)が切り替わる。

User Option: tabulated-list-gui-sort-indicator-desc

tabulated-list-gui-sort-indicator-ascと同様だが列が降順でソートされている際に使用される。

User Option: tabulated-list-tty-sort-indicator-asc

tabulated-list-gui-sort-indicator-ascと同様だがテキストモードのフレームに使用される。

User Option: tabulated-list-tty-sort-indicator-desc

tabulated-list-tty-sort-indicator-ascと同様だが列が降順でソートされている際に使用される。

Variable: tabulated-list-format

このバッファーローカル変数は表形式データのフォーマットを指定する。値はベクターであり、ベクターの各要素はデータ列を表すリスト(name width sort . props)である。ここで

  • nameは列の名前(文字列)。
  • widthは列にたいして予約される文字数幅(整数)。最終列は各行の終端までなので意味がない。
  • sortは列によりエントリーをソートする方法を指定する。nilならその列はソートに使用できない。tなら列の文字列値を比較することによりソートされる。それ以外ならtabulated-list-entriesの要素と同じ形式の2つの引数をとる、sortにたいする述語関数(predicate function)であること。
  • propsは列の追加プロパティを指定するplist (プロパティリストを参照)。プロパティ:right-alignの値が非nilなら列は右揃えとなり、プロパティ:pad-rightが列右側にパディングとして追加されるスペースの数を指定する(省略時のデフォルトは1)。
Variable: tabulated-list-entries

このバッファーローカル変数はTabulated Listバッファー内に表示されるエントリーを指定する。値はリストか関数のいずれかであること。

値がリストなら各リスト要素は1つのエントリーに対応し、(id contents)という形式であること。ここで

  • idnil、またはエントリーを識別するLispオブジェクト。Lispオブジェクトならエントリーを再ソートした際、カーソルは同じエントリー上に留まる。比較はequalで行われる。
  • contentstabulated-list-formatと要素数が同じベクター。ベクター要素は文字列(バッファーにそのまま挿入される)、あるいはイメージディスクリプター(イメージの挿入に使用される; イメージのディスクリプタを参照)、あるいは(label . properties)という形式のリスト。これはlabelpropertiesを引数としてinsert-text-buttonを呼び出すことによりテキストボタンを挿入することを意味する(ボタンの作成を参照)。

    これらの文字列には改行を含めないこと。

それ以外なら、それは値は引数なしで呼び出されて上記形式のリストをリターンする関数であること。

Variable: tabulated-list-groups

このバッファーローカル変数はTabulated Listバッファー内に表示されるエントリーのグループを指定する。値はリストか関数のいずれかであること。

値がリストなら、リストの要素それぞれが1つのグループに対応した、(group-name entries)という形式の要素からなるリストであること。ここでgroup-nameはすべてのグループエントリーの前に挿入される文字列、entriestabulated-list-entriesの場合と同じフォーマット(上記参照)。

それ以外なら、それは値は引数なしで呼び出されて上記形式のリストをリターンする関数であること。

tabulated-list-entriesからtabulated-list-groupsを作成するためにseq-group-byを使用できる。たとえば:

(setq tabulated-list-groups
      (seq-group-by 'Buffer-menu-group-by-mode
                    tabulated-list-entries))

Buffer-menu-group-by-modeは以下のようにすれば定義できる:

(defun Buffer-menu-group-by-mode (entry)
  (concat "* " (aref (cadr entry) 5)))
Variable: tabulated-list-revert-hook

このノーマルフックはTabulated Listバッファーのリバートに先立ち実行される。派生モードはtabulated-list-entriesを再計算するためにこのフックに関数を追加できる。

Variable: tabulated-list-printer

この変数の値はポイント位置にエントリー(エントリーを終端する改行を含む)を挿入するために呼び出される関数である。この関数はtabulated-list-entriesと同じ意味をもつ2つの引数idcontentsを受け取る。デフォルト値はエントリーをそのまま挿入する関数である。より複雑な方法でTabulated Listモードを使用するモードは別の関数を指定できる。

Variable: tabulated-list-sort-key

この変数の値はTabulated Listバッファーにたいするカレントのソートキーを指定する。nilならソートは行われない。それ以外なら(name . flip)という形式の値をもつ。ここでnametabulated-list-format内の列目の1つとマッチする文字列、flipが非nilなら逆順でのソートを意味する。

Function: tabulated-list-init-header

この関数はTabulated Listバッファーにたいするheader-line-formatを計算してセットし、列ヘッダー上でのクリックでソートを可能にするキーマップをヘッダー行に割り当てる。

Tabulated Listから派生したモードは、上記の変数(特にtabulated-list-formatをセットした後のみ)をセットした後にこれを呼び出すこと。

Function: tabulated-list-print &optional remember-pos update

この関数はカレントバッファーにエントリーを挿入する。これをリスティングコマンドとして呼び出すこと。この関数はバッファーを消去してtabulated-list-entriesで指定されるエントリーをtabulated-list-sort-keyにしたがってソートした後、各エントリーを挿入するためにtabulated-list-printerで指定される関数を呼び出す。

オプション引数remember-posが非nilなら、この関数はカレント行でid要素を探して、もしあればすべてのエントリーを(再)挿入して、その後にそのエントリーの移動を試みる。

オプション引数updateが非nilなら、この関数は最後のプリント以降に変更されたエントリーの削除か追加だけを行う。この関数が最後に呼び出されて以降、ほとんどのエントリーが変更されていなければ、この関数は数倍高速になる。結果の違いはtabulated-list-put-tagを通じて配置されたタグが変更されていないエントリーから削除されないことだけである(通常はすべてのタグが削除される)。

Function: tabulated-list-delete-entry

この関数はポイント位置のエントリーを削除する。

リスト(id cols)をリターンする。ここでidは削除したエントリーのID、colsは列修飾子(column descriptors)のベクター。カレント行の先頭にポイントを移動する。ポイント位置にエントリーがなければnilをリターンする。

この関数はバッファーのコンテンツだけを変更することに注意。tabulated-list-entriesは変更しない。

Function: tabulated-list-get-id &optional pos

このdefsubsttabulated-list-entriesがリストならIDオブジェクト、関数ならtabulated-list-entriesがリターンするリストからIDオブジェクトをリターンする。posが省略かnilの場合のデフォルトはポイント位置。

Function: tabulated-list-get-entry &optional pos

このdefsubsttabulated-list-entriesがリストならエントリーオブジェクト、関数ならtabulated-list-entriesがリターンするリストからエントリーオブジェクトをリターンする。これはposにあるIDにたいするベクターになるだろう。posにエントリーがなければ、この関数はnilをリターンする。

Function: tabulated-list-header-overlay-p &optional POS

このdefsubstposに偽ヘッダーがあれば非nilをリターンする。偽ヘッダー(fake header)はバッファー先頭に列名を配置するためにtabulated-list-use-header-linenilにセットされている場合に使用される。posが省略かnilの場合のデフォルトはpoint-min

Function: tabulated-list-put-tag tag &optional advance

この関数はレント行のパディングエリアにtagを配置する。パディングエリアはその行の先頭にある空スペースであり、幅はtabulated-list-paddingにより制御される。tagは長さがtabulated-list-padding以下の文字列であること。advanceが非nilなら、この関数は1行分ポイントを前方に移動する。

Function: tabulated-list-clear-all-tags

この関数はカレントバッファーのパディングエリアからすべてのタグをクリアーする。

Function: tabulated-list-set-col col desc &optional change-entry-data

この関数はcoldescにセットしてポイント位置にあるTabulated Listのエントリーを変更する。colは変更する列番号か列名、descは新たな列記述子であり、tabulated-list-print-colを通じて挿入される。

change-entry-dataが非nilなら、この関数は列記述子のベクターをdescにセットすることにより、背後のデータ(通常はリストtabulated-list-entries内の列記述子)を変更する。


This page has generated for branch:work/emacs-30_69b16e5c63840479270d32f58daea923fe725b90, commit:5e3f74b56ff47b5bcef2526c70f53f749bbd45f6 to check Japanese translation.