我有一个启动程序的异步函数:
(defun app (app-name)
(interactive "sRun application: ")
(async-shell-command app-name))
我有一个可选的所有可执行文件列表,我希望app
函数的行为就像switch-to-buffer
,为用户提供TAB自动完成。我该如何在Emacs中使用minibuffer自动完成?
我有一个启动程序的异步函数:
(defun app (app-name)
(interactive "sRun application: ")
(async-shell-command app-name))
我有一个可选的所有可执行文件列表,我希望app
函数的行为就像switch-to-buffer
,为用户提供TAB自动完成。我该如何在Emacs中使用minibuffer自动完成?
使用completing-read
命令。该函数看起来像:
(defun app ()
(interactive)
(let ((app-name (completing-read "Run application: " program-list)))
(async-shell-command app-name)))
可能更符合惯用语的方法是使用 interactive
而不是根据 Emacs Lisp习惯:提示用户输入 分配给变量:
(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)
,参考在Emacs中运行程序而不等待输出。
read-shell-command
函数:(defun app (app-name)
(interactive (list (read-shell-command "Run application: ")))
(async-shell-command app-name))