定义 Control-Shift-* Emacs 键盘快捷键

6

我想定义以下两个键盘快捷方式以在Emacs中在窗口之间移动:

  • C-shift-n: 转到下一个窗口
  • C-shift-b: 转到前一个窗口

我认为以下代码可以实现,但事实并非如此。

(defun select-next-window ()                                                                                                                                                                                                                                                                                               
  "Switch to the next window"                                                                                                                                                                                                                                                                                              
  (interactive)                                                                                                                                                                                                                                               
  (select-window (next-window)))                                                          

(defun select-previous-window ()                                                                                                                                                                                                                                                                                     
  "Switch to the previous window"                                                                                                                                                                                                                                                                                  
  (interactive)                                                                                                                                                                                                                                                                                              
  (select-window (previous-window)))        

(global-set-key (kbd "C-<S-n>") 'select-next-window)                                                                                                                                                                                                                                                                    
(global-set-key (kbd "C-<S-p>") 'select-previous-window)

问题似乎出在最后两行,这两行定义了实际的键盘快捷键来切换窗口(如果我使用简单的键盘快捷键而不是Control-Shift-*,它就正常工作)。
那么,我该如何使用kbd来定义Control-Shift-nControl-Shift-p

3
通常使用 C-h k 命令来查找 Emacs 如何引用给定的按键组合,然后将精确的字符串传递给 (kbd) 函数。虽然还有其他指定按键的方法,但我认为这种对称性使得 kbd 是最佳选择。 - phils
1个回答

6
假设您从不使用大写锁定键,这是一个超级简单的解决方案:
(global-set-key (kbd "C-N") 'select-next-window)

或者

(global-set-key (kbd "C-<S-N>") 'select-next-window)

问题在于当你按下Shift键时,会发送大写字母N。

抱歉,我刚才意识到了。我是在 Terminator 中运行 Emacs,它显然捕获了 C-S-NC-S-P。谢谢! - Amelio Vazquez-Reina
你的大写锁定键开着吗?我现在正在运行第一个。 - spike
1
@为什么它返回emacs的内部表示方式,无论您给出什么键字符串。因此(kbd "C-N")返回^N。您可以通过按下Control-h fkbd找到这个功能。 - spike

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