使用elisp,如何在emacs终端模拟器中启动,发送密钥和停止命令?

时间:2011-11-25 15:13:02

标签: linux emacs elisp term

使用elisp(非交互式按键),如何在emacs终端仿真器中运行命令;以及如何将按键发送到该缓冲区?

启动term似乎需要(term "/bin/bash"),它没有运行命令的空间。我想这可能是因为 term 旨在作为一个交互式工具......

另外,我想将特定密钥发送到正在运行的应用程序。可以做到这一点。我认为(插入'x)可能有效,但它没有缓冲参数,也不允许M-C- S- s-

2 个答案:

答案 0 :(得分:4)

您可以使用term-send-raw-string将输入直接发送到终端。例如:

(progn
  (set-buffer "*terminal*")
  (term-send-raw-string "ls -l\n"))

这将模拟将ls -l RET 键入终端缓冲区的效果。

虽然term对于参数解析不是很灵活,但启动shell并用term-send-raw-string提供命令来加载目标程序通常就足够了。这里有一小段elisp将一些命令编写到交互式程序中:

(progn 
  (let ((term-buffer (term "/bin/bash")))
    (set-buffer term-buffer)

    ;; start up vi
    (term-send-raw-string "vi hello.txt\n")

    ;; some line noise :P
    (term-send-raw-string "ihello world\033:wq\n")

    ;; quit our shell
    (term-send-raw-string "exit")))

答案 1 :(得分:0)

在第一个例子中,你也可以尝试:

(with-current-buffer "*terminal*" 
  (term-send-raw-string "ls -l\n"))