在emacs中,在另一个窗口中运行外部程序的最佳方法是什么,该窗口可以在执行程序退出后通过单个键命令关闭



我有一个运行外部'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进行常规编译,历史记录很有用)。

相关内容

  • 没有找到相关文章

最新更新