【问题标题】:Properly invoking an interactive script from elisp从 elisp 正确调用交互式脚本
【发布时间】:2012-12-02 21:33:28
【问题描述】:

我有一个想从 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 与用户交互?

【问题讨论】:

    标签: emacs elisp


    【解决方案1】:

    最简单的方法是使用make-comintmake-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 文档。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-12-31
      • 1970-01-01
      • 1970-01-01
      • 2012-07-07
      • 2012-02-02
      • 1970-01-01
      • 2014-09-23
      • 1970-01-01
      相关资源
      最近更新 更多