0

のドキュメントを読んでいますがcompleting-read、必要なことを行う方法が見つかりません。

次のように述べています。

(completing-read PROMPT COLLECTION &optional PREDICATE REQUIRE-MATCH INITIAL-INPUT HIST DEF INHERIT-INPUT-METHOD)

. . .

REQUIRE-MATCH は次の値を取ることができます。- nil は、ユーザーが任意の入力で終了できることを意味します。- 「確認」は、ユーザーが任意の入力で終了できることを意味しますが、入力が COLLECTION の要素でない場合は、選択を確認する必要があります。- `confirm-after-completion' は、ユーザーが任意の入力で終了できることを意味しますが、
`minibuffer-complete-and-exit' の直前に `minibuffer-complete'を呼び出し
、入力がコレクションの要素。- それ以外は t のように動作しますが、NULL 以外の補完を行う場合に RET を入力しても終了しない点が異なります。

私がする必要があるのは次のようなものです:

(completing-read "What kind of project should I create? "
  haxe-project-kinds
  (lambda (x) (message "predicate: %s" x)) t)

返された場合はエラーになるため、これは返されるべきnilではありませんが、最初のオプションが間違っていることに気付くまで、他のすべてのオプションをユーザーに実行させたくありません。

それ以上に、ドキュメントで宣伝されている動作は、実際に起こることと一致しません。4番目の引数の位置に何を入れてもまったく違いはありません。動作は変わりません。

4

1 に答える 1

1

あなたのサンプル コードでは、あなたが望むもののどの部分が満たされていないのか正確にはわかりません。そのため、適切な答えを出すのは困難です。私の推測では、ユーザーが空の回答で RET を押すのを防ぎたいと考えています。セットを使用しても、 Indeedcompleting-readはそれを妨げませんrequire-match。これは通常、引数に nil 以外の値を使用することで処理されdefaultます。この場合、ユーザーが RET を押したときにこの値が返されます。

それが十分でない場合はminibiffer-with-setup-hook、フックで、この目的のために作成した特別なキーマップをセットアップする必要があります。RET は、ミニバッファーが空の場合にエラーを通知する新しい関数にバインドされ、それ以外の場合は呼び出しminibuffer-complete-and-exitます。

于 2012-10-10T17:09:56.660 に答える