在Emacs 23.1.1中绑定M- <up> / M- <down>
我试图把一个function,我错过了Eclipse,在那里Alt + [ 上 / 下 ]转换线路的上或下,但不能为我的生活弄清楚如何正确地分配给这些键。 我在-nw
模式下使用它(只是在shell窗口中),并且通常在屏幕会话中运行。
使用全局键绑定,我可以使用字母组合(如(kbd "Mm")
,但是我尝试过的每个组合都只是给了我一个没有意义的消息,我总是得到:
"ESC <up> is undefined"
我曾经尝试过:
(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 \MO A] 'transpose-line-up)
Ch c只是返回:
ESC <up> (translated from ESC MO A) is undefined
这些都没有工作,无论是使用ESC或Alt 。
任何想法如何我可以使这项工作? 我宁愿把这些作为Alt + [ Up / Down ],因为这是我习惯的。
编辑
来自评论:
-
Cq Up打印
^[OA
。 -
Cq M-Up打印
^[
并将光标向上移动一行。 -
Ch k ( Alt + Up )打印
ESC <up> (translated from ESC MO A) is undefined
。
感谢您的build议,但他们都是一样的。
Emacs有一个复杂的机制来处理各种terminaltypes的function键和修饰符编码的变迁。 在任何情况下,它都不能起作用。 以下设置应该在您的terminal上运行:
(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)
您应该可以使用(kbd "<M-up>")
和(kbd "<M-down>")
来代替[(meta up)]
和[(meta down)]
,只要您(通过input-decode-map
)告诉Emacs有关您的terminal用来对这些组合键进行编码的转义序列。
我总是使用Chk(key) (即describe-key
)来找出Emacs如何引用(key),然后使用(kbd)
来使用它。
在这种情况下, describe-key
返回<M-up>
,所以我将使用(global-set-key (kbd "<M-up>") 'transpose-line-up)
(正如JF Sebastian所做的那样)。
编辑:
运行emacs -nw
(但不是通过屏幕),描述键报告ESC <up> (translated from ESC M-[ A)
和(kbd "ESC <up>")
成功绑定它。
运行screen emacs -nw
– screen emacs -nw
,describe-key报告ESC <up> (translated from ESC MO A)
,看起来与您所看到的相符,绑定(kbd "ESC <up>")
仍然适用于我。
(nb在Cygwin下使用屏幕4.00.03和Emacs 23.2.1进行testing)
(global-set-key [M-up] 'beginning-of-buffer) (global-set-key [M-down] 'end-of-buffer)
在我的OSX中,我有这个定义来执行Alt-up / down来跳转到缓冲区的顶部/底部。
丑陋的解决方法:
我input了Cq <M-up>它在emacs
里面的terminal里面生成了^[[1;3A
。
(global-set-key (kbd "<M-up>") 'transpose-line-up) (global-set-key (kbd "^[[1;3A") 'transpose-line-up)
我有Lisp error: (void-function transpose-line-up)
所以键绑定工作。
注意: Cq运行quoted-insert
命令。
假设你已经定义了函数transpose-line-up
和transpose-line-down
(因为它似乎来自原始问题中的示例代码):
(global-set-key [(meta up)] 'transpose-line-up) (global-set-key [(meta down)] 'transpose-line-down)
以下几行适用于macOS 10.11.6和GNU Emacs 25.2.1 :
(global-set-key (kbd "ESC <down>") 'end-of-buffer) (global-set-key (kbd "ESC <up>") 'beginning-of-buffer)