Zdefiniuj klawisze Control + Shift bez kbd

11

Próbuję dodać funkcjonalność do pakietu innej osoby, dlatego chciałbym uszanować ich wzorce. Niestety, jednym z tych wzorów jest nieużywanie kbd.

Muszę powiązać funkcję C-S-b, ale nie wiem, jak to zrobić. Wiem, jak to zrobić z jednym modyfikatorem (np. "\S-b"), Ale nie mogę zmusić go do pracy z wieloma modyfikatorami. Wiem, że mogę po prostu ocenić (kbd "C-S-b")i użyć jego danych wyjściowych ( [33554434]), ale chciałbym coś łatwiejszego do odczytania.

Oto kilka rzeczy, które próbowałem:

(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
Malabarba
źródło

Odpowiedzi:

15

W ?reprezentacji wektorowej brakuje ci dwóch i dwóch ukośników odwrotnych:

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

Sekcja dotycząca kluczowych sekwencji w podręczniku Elisp mówi:

Sekwencje klawiszy zawierające klawisze funkcyjne, zdarzenia przycisków myszy, zdarzenia systemowe lub znaki spoza ASCII, takie jak C-=lub H-anie mogą być reprezentowane jako ciągi; muszą być reprezentowane jako wektory.

W reprezentacji wektorowej każdy element wektora reprezentuje zdarzenie wejściowe w postaci Lisp . Na przykład wektor [?\C-x ?l]reprezentuje sekwencję klawiszy C-x l.

A pod innymi bitami modyfikującymi postać napisano:

Składnia Lisp dla bitu shift jest następująca \S-; w ten sposób ?\C-\S-olub ?\C-\S-Oreprezentuje postać o przesuniętej kontroli-o.

itsjeyd
źródło
1
Próbowałem zrozumieć, co oznaczają znaki zapytania. Dzięki twojej odpowiedzi znalazłem: Składnia Ctl-Char? \ Składnia C i Meta-Char? \ M-
Kaushal Modi
I tak, na pytanie Malabarby znajduje się odpowiedź na tej stronie na temat innych bitów modyfikujących .
Kaushal Modi
@kaushalmodi Dzięki za linki! Są bardzo przydatne w głębszym zrozumieniu tego, co się dzieje.
itsjeyd