我有一个运行外部'npm'命令的elisp。
(defun npm-mode-npm-run ()
"Run the 'npm run' command on a project script."
(interactive)
(let ((command
(completing-read
"Run command: " (npm-mode--get-project-scripts))))
(message "Running npm script: %s" command)
(switch-to-buffer npm-mode--buffer-name command)
(erase-buffer)
(ansi-term (getenv "SHELL") "npm-mode-npm-run")
(comint-send-string "*npm-mode-npm-run*" (format "npm run-script %sn" command))))
当它完成这项工作时,当执行完成时,用户留在必须杀死的缓冲区中,这需要额外的确认来杀死进程。
我想要的是一旦程序退出,我可以按'q'键来做所有这些,让用户留在原来的缓冲区中。
对于我可以参考的现代emacs来说,他们是如何做到这一点的一个很好的例子,或者任何其他可能有用的特定文档?
提前感谢!
正如@jpkotta所说,编译是一个很好的选择。你可以很容易地隐藏缓冲区,向底层进程发送一个TERM信号,等等。此外,您还可以获得许多语言的免费错误解析(语法着色+跳转到错误行的能力)。
下面是我如何使用它的一个例子(在这种情况下,我正在编辑的任何脚本的快速运行):
(defun juanleon/execute-buffer ()
(interactive)
(let ((compile-command nil))
(compile buffer-file-name)))
易于修改以适应您的代码。let
是为了避免在compile
历史记录中添加东西(因为我经常使用compile进行常规编译,历史记录很有用)。