我有一个外部命令行程序,我想从elisp调用.这是壳命令很容易,但是当命令行程序是互动的,这在我的特殊情况下,它不能正常工作:被调用的脚本看到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*")))))
Run Code Online (Sandbox Code Playgroud)
upload-command标识的python脚本可能会询问一些是/否问题,并且可能会提示输入密码,我想要屏蔽输入.理想情况下,所有这些交互都会发生在迷你缓冲区内.
我如何安排事情,以便当通过elisp调用时,我的外部交互式命令通过迷你缓冲区与用户交互?
最简单的方法是使用make-comint或make-comint-in-buffer:
(make-comint-in-buffer "upload-script-process" "*upload output*" upload-command)
Run Code Online (Sandbox Code Playgroud)
这将在缓冲区之类的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")
Run Code Online (Sandbox Code Playgroud)
有关更多详细信息,请参阅Emacs文档.