私は1つの引数をとるElisp関数を持っています(これまでのところとても良いです)。この 1 つの引数は、リストからの項目であると想定されており、それ以外には何もありません。
文字列を手動で入力する代わりに、ユーザーがアイテムにナビゲートしてEnterキーを押すことで選択できる「選択バッファ」(diredのような)のようなリストを表示する方法はありますか?
これを行う通常の方法は、経由completing-read
です。その後、minibuffer-with-setup-hook
where を呼び出してバッファをすぐminibuffer-completion-help
にポップアップすることができます。これにより、ユーザーは自分の選択をクリックできるようになります。*Completions*
質問を正しく理解していれば、次のようなものを探しています。
(defun foo (list)
(interactive)
(let ((arg (ido-completing-read "Select from list: " list))))
...)
ido
選択プロセスは dired とは異なりますが、emacs ユーザーが、または他の同様の代替手段を使用してリストから選択するのは一般的です。検索を絞り込んだり、代替案や長いものの間を移動したりできます。どの設定をカスタマイズできるかを知りたい場合は、 Mxcustom-group RET ido と入力してください。
私はこの種のポップアップメニューを使用するのが好きです:
(x-popup-menu
(list '(50 50) (selected-frame)) ;; where to popup
(list "Please choose" ;; the menu itself
(cons "" (mapcar (function (lambda (item) (cons item item)))
your-list-of-strings))))
ところで、(mapcar 'cons your-list-of-strings your-list-of-strings)
Common Lisp 風に使いたい人がいますが、elisp は mapcar で単項関数しか取りません :-(