4

使用elisp(不是交互式键和弦),我如何在emacs终端模拟器中运行命令;以及如何将按键发送到该缓冲区?

开始term似乎需要(term "/bin/bash"),它没有运行命令的范围。我认为这可能是因为术语旨在作为一种交互式工具......

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

4

2 回答 2

5

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

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

这将模拟输入ls -lRET终端缓冲区的效果。

虽然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")))
于 2011-11-25T22:20:39.257 回答
0

在第一个示例中,您还可以尝试:

(with-current-buffer "*terminal*" 
  (term-send-raw-string "ls -l\n"))
于 2018-03-30T16:20:03.330 回答