emacs - [控制升档]不起作用

时间:2011-01-07 08:05:26

标签: emacs emacs23 gnome-terminal

我尝试将热键定义为以下

(global-set-key [(control shift up)] 'other-window)

但它不起作用(没有错误,只是不起作用),也不起作用

(global-set-key [(control shift down)] 'other-window)

但是

(global-set-key [(control shift right)] 'other-window) 

(global-set-key [(control shift left)] 'other-window)

工作!

但是因为emacs使用了最后两个键组合(默认情况下),所以我不想为其他功能更改它们。

那我怎么能让 control-shift-up control-shift-down 工作?

我用google搜索“(控制升档)”,似乎 control-shift-up 被其他人使用,(但结果不是很少)。

3 个答案:

答案 0 :(得分:6)

原因不是Emacs问题,而是因为您的终端无法为C-S-up生成密钥序列。

您可以非常轻松地验证这一点。打开终端,然后键入:

Control-v Control-Shift-right

Control-v部分将使下一个键的控制序列逐字插入到shell中。在我们的例子中,它将向右移动Control-Shift的序列,并且看起来像这样:

^[[1;6C

现在,为C-S-up尝试相同的事情:

Control-v Control-Shift-up

你会看到没有输入控制序列,这暗示当你在Emacs中按CS-up时它实际上永远不会收到任何东西,因为终端无法产生任何东西传递给Emacs

如果您刚开始新emacs -nw并输入C-h k来调用Emacs'describe-key功能,我们可以对此进行双重验证。您将在迷你缓冲区中被要求键入一个键以查看它绑定的功能。如果您现在键入C-S-up没有任何反应 - 当然不会,因为运行Emacs的终端不会产生任何结果。

但是,如果您只是在寻找一个未使用的按键组合,那么在没有控制的情况下,只需向上移动(甚至向右移动)怎么样?那个应该在终端emacs和窗口版本中都可以工作。

答案 1 :(得分:4)

最后,在superuser.com的grawity的帮助下,我得到了它的工作。请这个帖子

https://superuser.com/questions/230852/get-ubuntu-terminal-to-send-an-escape-sequence-controlshiftup

答案 2 :(得分:0)

这很可能与以下内容重复:
Binding M-<up> / M-<down> in emacs 23.1.1

如果是这种情况,吉尔斯的答案应该让你感到厌烦(不过,无疑会有不同的逃脱序列。)

编辑(为了更好的可见性 - 请参阅下面的answer):

事实证明,gnome终端不会传输这些密钥组合,因此解决方案依赖于以下内容:https://superuser.com/questions/230852/get-ubuntu-terminal-to-send-an-escape-sequence-controlshiftup