Визначте клавіші Control + Shift без kbd


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

Відповіді:


15

У ?векторному поданні пропущені риски a і два:

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

У розділі про ключові послідовності в посібнику Elisp сказано:

Ключові послідовності, що містять функціональні клавіші, події кнопки миші, системні події або символи, що не належать до ASCII, такі як C-=або H-aне можуть бути представлені у вигляді рядків; вони повинні бути представлені як вектори.

У векторному поданні кожен елемент вектора представляє вхідну подію у своїй формі Лісп . Наприклад, вектор [?\C-x ?l]представляє ключову послідовність C-x l.

І в розділі Інші біти модифікатора символів написано:

Синтаксис Lisp для біта зсуву є \S-; таким чином, ?\C-\S-oабо ?\C-\S-Oявляє символ зміщеного управління-o.


1
Я намагався зрозуміти, що означають знаки запитання. Завдяки вашій відповіді я знайшов такі: Синтаксис Ctl-Char? \ C- та Meta-Char Syntax? \ M-
Kaushal Modi

І так, на питання Малабарби відповідає на цій сторінці в розділі Інші біти модифікаторів .
Каушал Моді

@kaushalmodi Дякую за посилання! Вони дуже корисні для глибшого розуміння того, що відбувається.
itjeyd
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.