2

我试图将热键定义如下

(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-upcontrol-shift-down工作呢?

我用谷歌搜索了“(控制上移)”,似乎control-shift-up被其他人使用,(但不是很少的结果)。

4

3 回答 3

6

其原因不是 Emacs 问题,而是因为您的终端无法为 CS-up 生成键序列。

您可以很容易地验证这一点。打开一个终端,然后输入:

Control-v Control-Shift-right

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

^[[1;6C

现在,为 CS-up 尝试相同的操作:

Control-v Control-Shift-up

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

emacs -nw如果您只是启动一个新的并键入C-h k调用 Emacs 的describe-key函数,我们可以双重验证这一点。你会被要求在 minibuffer 中输入一个键来查看它绑定的函数。如果你现在输入 CS-up 什么都不会发生——当然不会,因为运行 Emacs 的终端不会产生任何东西。

但是,如果您只是在寻找一个未使用的组合键,那么在没有 Control 的情况下只使用 Shift-up(甚至 Shift-right)怎么样?那个应该在终端 emacs 和窗口版本中都可以工作。

于 2011-01-08T15:33:24.820 回答
4

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

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

于 2011-01-10T16:04:54.560 回答
0

这很可能是以下内容的副本:
Binding M-<up> / M-<down> in emacs 23.1.1

如果是这种情况,Gilles 的回答应该会让你明白(尽管毫无疑问,使用不同的转义序列。)

编辑(为了更好的可见性——见下面的答案):

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

于 2011-01-07T09:59:29.147 回答