3

我有一个想从 elisp 调用的外部命令行程序。使用 shell-command 这很容易,但是当命令行程序是交互式的时它不能正常工作,在我的特定情况下是:当我这样调用它时,调用的脚本在读取 stdin 时会看到 EOF:

  ;; upload command is a string with the name of
  ;; a python script and some args
  (shell-command upload-command
                 (get-buffer-create "*upload output*")))))

upload-command 标识的 python 脚本可能会询问一些是/否问题,并且可能会提示输入密码,我希望输入密码。理想情况下,所有这些交互都将发生在 minibuffer 中。

当通过 elisp 调用时,如何安排事情以便我的外部交互命令通过 minibuffer 与用户交互?

4

1 回答 1

6

最简单的方法是使用make-comintor make-comint-in-buffer

(make-comint-in-buffer "upload-script-process" "*upload output*" upload-command)

这将像缓冲区一样在缓冲区中运行脚本shell,因此它不能满足所有交互都发生在迷你缓冲区中的要求。但是,如果密码提示匹配,它将自动从 minibuffer 中读取掩码形式的密码comint-password-prompt-regexp

请注意,upload-command在此示例中,此处需要是exec-path. 脚本的任何额外开关或其他参数都必须作为字符串参数传递给make-comint

(make-comint-in-buffer "upload-script-process" "*upload output*" 
   upload-command nil "--verbose" "--other-option")

有关更多详细信息,请参阅 Emacs 文档。

于 2012-12-02T22:22:16.453 回答