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

Pet*_*r.O 3 linux emacs elisp term

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

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

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

ata*_*lor 5

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

(progn
  (set-buffer "*terminal*")
  (term-send-raw-string "ls -l\n"))
Run Code Online (Sandbox Code Playgroud)

这将模拟键入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")))
Run Code Online (Sandbox Code Playgroud)