(Emacs の)いくつかのコマンドは、名前の completion で(ユーザーを) 助けたり/導く ことで、ユーザーの手間を省くようになっています。 describe-function や switch- to-buffer といったコマンドは、定義された関数や既存のバッファという (ストリング の全ての集合と比べると)ずっと小さな集合から名前を選びます。
以下の関数は、(かなり)一般的な形で completion を扱います。 try-completion はこ れら completion ルーチンの中心となります。これは、与えられた初期ストリングに対 し(可能な)最も長いサブストリングを返します。他の関数は、この他の様々な指示に対 応した completion を行ないます。
completion 中のミニバッファの操作は、ローカルキーマップを用いた場合の(通常の) 操作と整合が取れています。関数 completing-read が、completion を行なう場合の (通常の)インタフェースとなります。これは、何をどのように complete すべきかを示 す指示を持って呼ばれます。これは、ミニバッファにスイッチし、(その complerion で用いられる関数にバインドされた)キー (通常 RET, LFD, TAB, SPC, と ?) を定義す るローカルキーマップを用います。
Function: try-completion string alist &optional predicate
この関数は、 alist 中の string の可能な(全ての) completion の(最大の)共通 サブストリングを返します。
association リスト alist (セクション 6.6 [association リスト]、ページ 56 参照) 中の各 pair の最初の要素が string で始まっているか否かを調べます。次 に、マッチした全ての要素を比較します。マッチしたものの全てに共通する最も長 いシーケンスをストリングとして返します。マッチするものが存在しない場合、 nil を返します。 1 つだけマッチする場合、マッチは厳密(訳注:exact)で t を 返します。
alist は association リストでなく obarray であってもかまいません。この場 合、obarray 中の(全ての) print 名がマッチングの対象となります。グローバル 変数 obarray は、(全ての) Lisp シンボルの名前を持ちます。セクション 8.4 [obarray]、ページ 68 参照。
predicate が与えられた場合、これはアーギュメントを 1つ持つ関数でなくてはい けません。これは可能なマッチ(の各々)を調べる際に用いられ、 predicate が non-nil を返す時のみそのマッチを候補とします。 predicate に与えられるアー ギュメントは alist の要素(ストリングでなくてはいけない) か obarray からの シンボル(シンボル名であってはいけない)になります。
以下に示した例において、ストリング foo は alist の 3 つの pair にマッチし ます。これらは全て文字 fooba で始まっています。このためそれ (訳注:fooba) が結果となります。 2 番目の例では 1 つだけマッチするものが存在し、厳密に マッチするため t が返されます。
3 番目の例では、いくつものシンボルが forw で始まっており、それらは(全て)
word である forward を含んでいますが、それに続く文字 - を含まないものが 1 つ存在しています。
最後の例では、3 つの可能なマッチのうち 2 つだけがプレディケート test をパ スします(ストリング foobaz は短かすぎます)。それらはみなストリング `foobar' で始まっています。
(try-completion "foo" '(("foobar1" 1) ("barfoo" 2) ("foobaz" 3) ("foobar2" 4))) => "fooba"
(try-completion "foo" '(("barfoo" 2) ("foo" 3))) => t
(try-completion "forw" obarray) => "forward"
(defun test (s) (> (lentgh (car s)) 6)) => test (try-completion "foo" '(("foobar1" 1) ("barfoo" 2) ("foobaz" 3) ("foobar2" 4)) (function test)) ; xx なぜ function がここに? => "foobar"
Function: all-completions string alist &optional predicate
この関数は、try-completion に似ています。これは最も長いサブストリングのか わりに、可能な(全ての) completion のリストを返します。
次の例では test は try-completion の例で示したように定義されています。
(all-completion "foo" '(("foobar1" 1) ("barfoo" 2) ("foobaz" 3) ("foobar2" 4)) (function test)) ; xx なぜ function がここに? => ("foobar1" "foobar2")
Function: completion-read prompt alist &optional predicate require-match initial
この primitive 関数は、ミニバッファにストリングを読み込み、 completion で ユーザーを助けます。最初 (ストリングでなくてはいけない) prompt を表示しま す。 initial が non-nil の場合、completing-read はそれを(入力の一部として) ミニバッファに挿入します。この後、 (completion を試みるいくつかのコマンド を提供し) ユーザーがその入力をエディットできるようにします。
これは (try-completion 同様) alist と predicate を用いて completion を行な います。
require-match が t の場合、入力が alist の要素に complete しない限り exit しません。 nil でも t でもない場合、completing-read はタイプされたもの自体 が alist の要素でない限り exit しません。
変数 completion-ignore-case の値が non-nil の場合、大文字/小文字の区別は無 視します。 completing-read は (require-match が nil か否かに従い) minibuffer-local-completion-map か minibuffer-local-must-match-map を持ち read-minibuffer を呼びます。これはまた特別な変数 minibuffer-completion- table, minibuffer-completion-predicate, minibuffer-completion-confirm を適 切なアーギュメントにバインドします。
(completing-read "Complete a foo: " '(("foobar1" 1) ("barfoo" 2) ("foobaz" 2) ("foobar2" 4)) nil t "fo") => "barfoo"
---------- Buffer: Minibuffer ---------- Complete a foo: fo DEL DEL RET ---------- Buffer: Minibuffer ----------
Variable: minibuffer-local-completion-map
このグローバル変数の値は、(completionを用いてミニバッファから読み込み)その completionのどれかに正確にマッチすることを要求しない場合、用いるキーマップ
です。
これは(デフォルトで)以下のコマンドを定義します。
? minibuffer-completion-help SPC minibuffer-completion-word TAB minibuffer-complete LFD exit-minibuffer RET exit-minibuffer C-g abort-recursive-edit
Variable: minibuffer-local-must-match-map
このグローバル変数の値は、(completionを用いてミニバッファから読み込み)その completionの 1 つが正確にマッチすることを要求する場合、用いるキーマップで す。
これは(デフォルトで)以下のコマンドを定義します。
? minibuffer-completion-help SPC minibuffer-completion-word TAB minibuffer-complete LFD minibuffer-complete-and-exit RET minibuffer-complete-and-exit C-g abort-recursive-edit
Command: minibuffer-complete-word
この関数は、ミニバッファの内容を部分的に(訳注:partially) complete しま す。これは最大 1 word を complete します。ミニバッファの内容が 1 つしか completion を持たない場合(も) minibuffer-complete-word は word の構成要素 でない最初の文字を越えて文字を追加することはありません。
Command: minibuffer-complete
この関数は、ミニバッファの内容を(可能な限り) complete します。
Command: minibuffer-complete-and-exit
この関数は、ミニバッファの内容を complete し、その名前が completion の必要 なく有効(訳注:valid)である場合 exit します。名前が有効にマッチするまで complete されてある場合、このコマンドを繰り返すと exit します。
Command: minibuffer-completion-help
この関数は、カレントなミニバッファの内容に対する(可能な) completion のリス トを表示します。このためのバッファ *Completions* を表示するための新しい ウィンドウをポップアップします。
Function: display-completion-list completions
この関数は、変数 completions をストリーム standard-output にコネクトされた バッファに表示します。 completions は通常、(作られた) completion のリスト です。各要素は、そのまま print されるシンボルやストリングか、(あたかも)繋 げ(訳注:concatenate)られているかのように print される 2 つのストリングの リストです。
この関数は、minibuffer-completion-help から呼ばれます。
Variable: completion-ignore-case
non-nil は、completion において大文字/小文字の違いを考慮しないことを示しま す。
User Option: completion-ignored-extensions
completion は、このリスト中(訳注:??)のストリングで終っているファイル名を 無視します。
Variable: minibuffer-completion-table
ミニバッファでの completion に用いる alist か obarray。これは completing- read が read-minibuffer に渡すグローバル変数です。
Variable: minibuffer-completion-predicate
(minibuffer-completion-table のように) これは completing-read が read- minibuffer に渡すグローバル変数。
Variable: minibuffer-completion-confirm
non-nil は、ミニバッファを出る(訳注:exit)前に確認を要求することを示しま す。
Function: file-name-all-completions partial-filename directory
この関数は、名前が partial-filaname で始まる(ディレクトリ directory 中の) ファイルの、可能な(全ての) completion のリストを返します。
partial-filename は単純なファイル名でなくてはいけません。 ( directory が絶 対パス名でない場合) directory の前にカレントバッファのデフォルトのディレク トリを付加します。
(file-name-all-completions "f" "~rms/lewis") => ("foo" "file.texinfo.~2~" "file.texinfo.~1~" "file.texinfo")
(file-name-all-completions "fo" "") => ("foo")
Function: file-name-completion filename directory
この関数は、 (ディレクトリ directory 中の) ファイル名 filaname を complete します。これは (directory 中の) filename で始まる(全ての)ファイル名に共通 する最も長いプレフィックスを返します。
マッチするものが 1つだけ存在する場合、 filename はそれに厳密に(訳注: exactly) マッチし t を返します。 directory が filename で始まる名前を持た ない場合、nil を返します。
(file-name-completions "fi" "") => "file.texinfo"
(file-name-completions "file.texinfo" "") => "file.texinfo"
(file-name-completions "file.texinfo.~1" "") => "file.texinfo.~1~"
(file-name-completions "file.texinfo.~1~" "") => t
(file-name-completions "file.texinfo.~3" "") => nil
Command: lisp-complete-symbol
この関数は、ポイントの前のシンボルの completion を行ないます。このシンボル はグローバル変数 obarray 中の(全ての) シンボルと比較され、可能なだけ complete されます。 (xx 何?? さらに completion が可能な場合、それらの文字 をバッファに挿入し、そのシンボルを complete します)。
シンボルが開き括弧のすぐ後から始まっている場合、関数定義を持つシンボルのみ を考慮します。そうでない場合、関数定義や、値や、プロパティーを持つ(全ての) シンボルを考慮します。xx 常に nil を返す?
この関数は理解できない。(訳注:??)
---------- Buffer: foo.el ---------- (forwa ---------- Buffer: foo.el ----------
(lisp-complete-symbol) => nil ---------- Buffer: foo.el ----------
(forward- ---------- Buffer: foo.el ----------