使用elisp
(不是交互式键和弦),我如何在emacs
终端模拟器中运行命令;以及如何将按键发送到该缓冲区?
开始term
似乎需要(term "/bin/bash")
,它没有运行命令的范围。我认为这可能是因为术语旨在作为一种交互式工具......
我还想将特定的密钥发送到正在运行的应用程序。这可以做到吗。我认为 (insert 'x) 可能有效,但它没有缓冲区参数,也不允许 M- C- S- s-
您可以使用 将输入直接发送到终端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")))
在第一个示例中,您还可以尝试:
(with-current-buffer "*terminal*"
(term-send-raw-string "ls -l\n"))