定义不带kbd的Control + Shift键


11

我正在尝试向其他人的软件包添加一些功能,因此我想尊重他们的模式。不幸的是,这些模式之一是不使用kbd

我需要将一个函数绑定到C-S-b,但是我不知道如何。我知道如何使用单个修饰符(例如"\S-b")来执行此操作,但是我无法使其与多个修饰符一起使用。我知道我可以评估(kbd "C-S-b")并使用其输出([33554434]),但我想更容易阅读。

这是我尝试过的一些方法:

(define-key emacs-lisp-mode-map
  "\C-\S-b" 'test-command)
;;; Invalid modifier

(define-key emacs-lisp-mode-map
  [C-S-b] 'test-command)
;;; Does nothing

(define-key emacs-lisp-mode-map
  "\C-B" 'test-command)
;;; Binds C-b

Answers:


15

?在向量表示中缺少和两个反斜杠:

(global-set-key [?\C-\S-b] 'test-command)

Elisp手册中有关“ 键序列 ”的部分说:

包含功能键,鼠标按钮事件,系统事件或非ASCII字符(例如C-=H-a不能表示为字符串)的键序列;它们必须表示为向量。

在向量表示中,向量的每个元素均以Lisp形式表示输入事件。例如,向量[?\C-x ?l]表示键序列C-x l

在“ 其他字符修饰符位 ”下显示:

移位位的Lisp语法为\S-; 因此,?\C-\S-o?\C-\S-O表示Shift-O控制字符。


1
我一直在试图理解问号的含义。感谢您的答复,我发现了这些:Ctl-Char语法?\ C-Meta-Char语法?\ M-
Kaushal Modi 2014年

是的,Malabarba的问题在本页其他修饰符上得到了回答。
Kaushal Modi 2014年

@kaushalmodi感谢您的链接!它们对于深入了解正在发生的事情非常有用。
itsjeyd 2014年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.