使用elisp,如何在emacs终端模拟器中启动、发送按键并停止命令?

4
使用elisp(而不是交互式键鼓),如何在emacs终端模拟器中运行命令;以及如何向该缓冲区发送按键?
似乎需要启动term,并使用(term "/bin/bash"),但这没有运行命令的范围。我认为这可能是因为term是用作交互式工具...
另外,我想向正在运行的应用程序发送特定的按键。这可行吗?我认为(插入'x')可能有效,但它没有缓冲区参数,也不允许M- C- S- s-。
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")))

@ataylor: 谢谢.. 这对于像我这样的elisp新手来说是非常有帮助的,它让我发现了许多其他的term-*命令。 - Peter.O

0
在第一个示例中,您也可以尝试:
(with-current-buffer "*terminal*" 
  (term-send-raw-string "ls -l\n"))

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接