10

私は1つの引数をとるElisp関数を持っています(これまでのところとても良いです)。この 1 つの引数は、リストからの項目であると想定されており、それ以外には何もありません。

文字列を手動で入力する代わりに、ユーザーがアイテムにナビゲートしてEnterキーを押すことで選択できる「選択バッファ」(diredのような)のようなリストを表示する方法はありますか?

4

4 に答える 4

8

これを行う通常の方法は、経由completing-readです。その後、minibuffer-with-setup-hookwhere を呼び出してバッファをすぐminibuffer-completion-helpにポップアップすることができます。これにより、ユーザーは自分の選択をクリックできるようになります。*Completions*

于 2013-11-04T19:21:18.137 に答える
4

質問を正しく理解していれば、次のようなものを探しています。

(defun foo (list)
  (interactive)
  (let ((arg (ido-completing-read "Select from list: " list))))
     ...)

ido選択プロセスは dired とは異なりますが、emacs ユーザーが、または他の同様の代替手段を使用してリストから選択するのは一般的です。検索を絞り込んだり、代替案や長いものの間を移動したりできます。どの設定をカスタマイズできるかを知りたい場合は、 Mxcustom-group RET ido と入力してください。

于 2013-11-04T16:51:17.193 に答える
0

私はこの種のポップアップメニューを使用するのが好きです:

(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 で単項関数しか取りません :-(

于 2013-11-07T12:08:24.163 に答える