如何将<C-left>发送到Emacs term?

4
我使用这个功能将原始命令发送到终端:
(defun raw (str)
  (interactive "sKey: ")
  (term-send-raw-string (read-kbd-macro str)))

但是 read-kbd-macro 对于 <C-left> 返回的是 [C-left],不是一个字符串。

我也尝试了:

(term-send-raw-string "\C-\eOD")

并且

(define-key term-raw-map (kbd "<C-left>") 'term-send-raw)

但这些也不起作用。

我该如何发送C-left?


@abo-abo,我尝试插入“C-q C-left”并输入字符串^@,但两者都不起作用。 - jcubic
你说得对,它不起作用。那只是一个猜测。你到底想做什么? - abo-abo
@abo-abo 我试图添加一个命令,可以使我在Bash中不移动一个单词到左边或右边。目前它会移动,但是然后会跳回来。 - jcubic
但是bash已经有M-f和M-b了,它们有什么问题吗? - abo-abo
@abo-abo 我更喜欢使用箭头,Bash 也有这些功能,但它们不能发送到终端进程。 - jcubic
显示剩余2条评论
1个回答

4

我在我的设置文件中有以下片段,目的与你完全相同:使用C-<arrows>在Bash提示符上按单词移动

(defun term-send-Cright () (interactive) (term-send-raw-string "\e[1;5C"))
(defun term-send-Cleft  () (interactive) (term-send-raw-string "\e[1;5D"))
(define-key term-raw-map (kbd "C-<right>") 'term-send-Cright)
(define-key term-raw-map (kbd "C-<left>")  'term-send-Cleft)

我通过以下技巧找到了\e[1;5C\e[1;5D代码:
  1. 在终端中运行cat >/dev/null
  2. 键入C-<left>C-<right>,并查看在终端中回显的内容
  3. 使用C-dC-c退出
另一种查找它们的方法是在终端中输入:C-vC-<left>

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