プログラムを非同期で起動する関数があります。
(defun app (app-name)
(interactive "sRun application: ")
(async-shell-command app-name))
そして、選択できるすべての実行可能ファイルのリストがあります。app
関数を のように動作させswitch-to-buffer
、ユーザーにタブ補完を提供したい。Emacs でミニバッファー補完を使用するにはどうすればよいですか?
プログラムを非同期で起動する関数があります。
(defun app (app-name)
(interactive "sRun application: ")
(async-shell-command app-name))
そして、選択できるすべての実行可能ファイルのリストがあります。app
関数を のように動作させswitch-to-buffer
、ユーザーにタブ補完を提供したい。Emacs でミニバッファー補完を使用するにはどうすればよいですか?
コマンドを使用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 Inputinteractive
に従って変数に代入する代わりに使用するほうが、より慣用的である可能性があります。
(defun app (app-name)
(interactive (list (completing-read "Run application: " app-list)))
(async-shell-command app-name))
Emacs からプログラムを実行し、出力を待たないに従ってプロセス出力を気にしない場合は、(start-process app-name nil app-name)
代わりに を使用することもできます。(async-shell-command app-name)
Emacs での補完に関するアイデアについてはMinibuffer Completionを、Emacs からプロセスを呼び出すための非同期プロセスについては、どちらも GNU マニュアルから参照してください。
自分でリストを維持する必要なしに可能なシェルコマンドを完了したい場合で、Emacs 23以降を使用している場合は、次を使用できますread-shell-command
。
(defun app (app-name)
(interactive (list (read-shell-command "Run application: ")))
(async-shell-command app-name))