2012-07-26 17 views
6

私は非同期的にプログラムを起動する機能を持っている:Emacsのミニバッファ補完

(defun app (app-name) 
    (interactive "sRun application: ") 
    (async-shell-command app-name)) 

が、私は、そこから選択するすべての実行可能ファイルのリストを持っています。 app関数をswitch-to-bufferとして動作させ、ユーザーにTAB補完機能を提供したい。 Emacsでミニバッファ補完を使うにはどうすればいいですか?

答えて

8

completing-readコマンドを使用してください。この関数は

(defun app() 
    (interactive) 
    (let ((app-name (completing-read "Run application: " program-list))) 
    (async-shell-command app-name))) 

のようにおそらくより多くの慣用的になりますEmacs Lisp Idioms: Prompting for User Inputに応じて可変に割り当てるのではなく、interactiveを使用することです:

(defun app (app-name) 
    (interactive (list (completing-read "Run application: " app-list))) 
    (async-shell-command app-name)) 

もしあればまたあなたは、(start-process app-name nil app-name)代わりの(async-shell-command app-name)を使用することができますRun a program from Emacs and don't wait for outputに従ってプロセス出力を気にしないでください。


GNUマニュアルの両方から、Emacsのからプロセスを呼び出すためのEmacsとAsynchronous Processesで完了でより多くのアイデアのためのMinibuffer Completionを参照してください。

4

リストを自分で維持することなく、可能なシェルコマンドの完了をしたい場合は、あなたがEmacsの23以降を使用している、あなたはread-shell-commandを使用することができます。

(defun app (app-name) 
    (interactive (list (read-shell-command "Run application: "))) 
    (async-shell-command app-name)) 
関連する問題