正确调用elisp的交互式脚本

时间:2012-12-02 21:33:28

标签: emacs elisp

我有一个外部命令行程序,我想从elisp调用。使用shell命令这很容易,但是当命令行程序是交互式时它无法正常工作,在我的特定情况下它是:当我调用它时,被调用的脚本在读取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脚本可能会询问一些是/否问题,并且可能会提示输入密码,我想要屏蔽输入。理想情况下,所有这些互动都会发生在迷你缓冲区内。

我如何安排事情,以便在通过elisp调用时,我的外部交互式命令通过迷你缓冲区与用户交互?

1 个答案:

答案 0 :(得分:6)

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

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

这将在像shell缓冲区这样的缓冲区中运行脚本,因此它不能满足在迷你缓冲区中进行所有交互的要求。但是,如果密码提示符与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文档。