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

在emacs中,在另一个窗口中运行外部程序的最佳方式是什么?在执行程序退出后,该窗口可以通过单键命令关闭?,emacs,ansi-term,comint-mode,Emacs,Ansi Term,Comint Mode,我有一些运行外部“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 s

我有一些运行外部“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或任何其他可能有用的特定文档做到这一点


非常感谢

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

下面是我如何使用它的示例(在本例中,我可以快速运行正在编辑的任何脚本):


易于修改以适应您的代码。
let
是为了避免在
编译
历史记录中添加内容(因为我经常使用compile进行常规编译,历史记录很有用)。

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

下面是我如何使用它的示例(在本例中,我可以快速运行正在编辑的任何脚本):


易于修改以适应您的代码。
let
是为了避免在
编译
历史记录中添加内容(因为我经常使用compile进行常规编译,历史记录很有用)。

我不熟悉npm,但一般来说,我会尝试
编译
,可能是它的派生版本。有关派生编译模式的一个相当简单的示例,请参阅。另外,请注意自动掩埋(或杀死)成功的编译缓冲区。我不熟悉npm,但一般来说,我会尝试编译,可能是它的派生版本。有关派生编译模式的一个相当简单的示例,请参阅。另外,请参阅自动掩埋(或杀死)成功的编译缓冲区。
(defun juanleon/execute-buffer ()
  (interactive)
  (let ((compile-command nil))
    (compile buffer-file-name)))