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

时间:2014-02-13 14:48:50

标签: emacs terminal elisp

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

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

1 个答案:

答案 0 :(得分:4)

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

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

(defun term-send-backward-word ()
  "Move backward word in term mode."
  (interactive)
  (term-send-raw-string "\eb"))
当您按<Escape> b时,

eterm-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"))

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

最后,我会提到multi-term。它可以在melpa中使用。它提供了我上面列出的功能,其默认值优于term-mode IMO。但它可能会从你想要的更进一步,因为它试图将term-mode与其他emacs集成,而不仅仅是传递内容。