在Emacs 23.1.1中绑定M- <up>/M- <down>

lia*_*iam 22 emacs gnu-screen key-bindings emacs23

我试图在Eclipse中放入一个我想念的功能,其中Alt+ [ Up/ Down]可以向上或向下转换行,但是在我的生活中不能找到如何正确分配这些键的功能.我在-nw模式中使用它(所以只在shell窗口中),通常在屏幕会话中运行.

使用全局键绑定,我可以使用字母组合,比如(kbd "M-m"),但是我为箭头键尝试的每个组合只给我一条没有意义的消息,我总是得到:

"ESC <up> is undefined"
Run Code Online (Sandbox Code Playgroud)

我尝试过的:

(global-set-key (kbd "M-<up>") 'transpose-line-up)    
(global-set-key (kbd "<escape>-<up>") 'transpose-line-up)
(global-set-key [M-up] 'transpose-line-up)
(global-set-key [\e \M-O A] 'transpose-line-up)
Run Code Online (Sandbox Code Playgroud)

而且C-h c只是回报:

ESC <up> (translated from ESC M-O A) is undefined
Run Code Online (Sandbox Code Playgroud)

这些都不起作用,无论是使用ESC还是Alt.

知道如何让这个工作吗?我更愿意将这些作为Alt+ [ Up/ Down],因为这是我习惯的.

编辑

来自评论:

  • C-q Up打印^[OA.

  • C-q M-Up打印^[并将光标向上移动一行.

  • C-h k(Alt+ Up)打印ESC <up> (translated from ESC M-O A) is undefined.

感谢您的建议,但他们都是一样的.

Gil*_*il' 20

Emacs有一个复杂的机制来处理各种终端类型上的功能键和修饰符编码的变化.在所有情况下,它都无法开箱即用.以下设置应适用于您的终端:

(define-key input-decode-map "\e\eOA" [(meta up)])
(define-key input-decode-map "\e\eOB" [(meta down)])
(global-set-key [(meta up)] 'transpose-line-up)
(global-set-key [(meta down)] 'transpose-line-down)
Run Code Online (Sandbox Code Playgroud)

您应该能够使用(kbd "<M-up>")(kbd "<M-down>")代替,[(meta up)]并且[(meta down)]只要您完成了向Emacs(via input-decode-map)告知终端用于编码这些组合键的转义序列的步骤.


phi*_*ils 7

我总是使用C-h k (key)(ie describe-key)找出Emacs如何引用(键),然后使用(kbd)相同的字符串来使用它.

在这种情况下,describe-key返回<M-up>,所以我会使用(global-set-key (kbd "<M-up>") 'transpose-line-up)(正如塞巴斯蒂安JF所做的那样).

编辑:

运行emacs -nw(但不通过屏幕),描述密钥报告ESC <up> (translated from ESC M-[ A),并(kbd "ESC <up>")成功绑定它.

运行screen emacs -nw,描述密钥报告ESC <up> (translated from ESC M-O A),似乎与您看到的匹配,并且绑定(kbd "ESC <up>")仍然适用于我.

(nb在Cygwin下测试,屏幕为4.00.03,Emacs为23.2.1.)


Pau*_*han 5

(global-set-key [M-up] 'beginning-of-buffer)
(global-set-key [M-down] 'end-of-buffer)
Run Code Online (Sandbox Code Playgroud)

在我的OSX,我有这样的定义,执行的Alt-向上/向下跳转到缓冲区的顶部/底部.