1

我有一些运行外部“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 %s\n" command))))

当它完成这项工作时,当执行完成时,用户被留在必须被杀死的缓冲区中,这需要额外的确认才能杀死进程。

我想要的是,一旦程序退出,我可以按“q”键来完成所有这些操作,将用户留在原来的缓冲区中。

他们是如何为我可以参考的现代 emacs 或任何其他可能有帮助的特定文档最好地做到这一点的一个很好的例子吗?

提前谢谢了!

4

1 回答 1

0

正如@jpkotta 所说,编译是一个不错的选择。您可以轻松地隐藏缓冲区,向底层进程发送 TERM 信号等。此外,您还可以获得许多语言的免费错误解析(语法着色+跳转到违规行的能力)。

这是我如何使用它的示例(在这种情况下,快速运行我正在编辑的任何脚本):

(defun juanleon/execute-buffer ()
  (interactive)
  (let ((compile-command nil))
    (compile buffer-file-name)))

易于修改以适应您的代码。这let是为了避免向compile历史添加东西(因为我经常使用 compile 进行常规编译,并且历史很有用)。

于 2016-07-04T11:16:40.927 回答