如何将每个命令发送到 Emacs Term?

jcu*_*bic 0 emacs terminal elisp

是否可以配置 emacs 术语以将所有内容(可能是异常 Mx)作为原始命令发送。这将允许例如在终端内运行 emacs -nw 并且每个命令都适用于终端内的 emacs 现在是外部的。

我想要这样的东西,因为我有时从终端或屏幕运行 nano,我也使用 ssh,这将允许我在服务器上运行 emacs。现在,当我运行 nano 时,我需要调用发送 Cx 的 Cc x。

jpk*_*tta 6

我首先建议使用tramp编辑远程文件。我更喜欢在远程机器上打开编辑器。如果您尝试在term-mode缓冲区内运行 emacs ,您将一直在与它作斗争。

如果必须在term-mode缓冲区内运行 emacs ,则可以使用term-send-rawand term-send-raw-string。例如:

(defun term-send-backward-word ()
  "Move backward word in term mode."
  (interactive)
  (term-send-raw-string "\eb"))
Run Code Online (Sandbox Code Playgroud)

<Escape> beterm-color当您按下 时终端(即)所期望的C-<left>。这不一定与绑定C-<left>term-send-raw. 最好的办法可能是尝试将任何键绑定到term-send-raw,如果这不起作用,请创建一个函数term-send-raw-string并绑定它。如果term-mode缓冲区中有一个 shell,您可以找出字符串应该是什么,发送一个引号,然后键入密钥。您可以发送报价

(defun term-send-quote ()
  "Quote the next character in term-mode.
Similar to how `quoted-insert' works in a regular buffer."
  (interactive)
  (term-send-raw-string "\C-v"))
Run Code Online (Sandbox Code Playgroud)

这就像C-v在普通终端中输入一样。

最后,我要提一下multi-term。它在 melpa 中可用。它提供了我上面列出的功能,并且具有比term-modeIMO更好的默认值。但它可能与您想要的相去甚远,因为它试图term-mode与 emacs 的其余部分集成,而不是仅仅传递东西。