Definieren Sie Control + Shift-Tasten ohne kbd

11

Ich versuche, dem Paket eines anderen eine gewisse Funktionalität hinzuzufügen, und möchte daher dessen Muster respektieren. Leider ist eines dieser Muster nicht zu verwenden kbd.

Ich muss eine Funktion binden C-S-b, aber ich kann nicht herausfinden, wie. Ich weiß, wie man das mit einem einzelnen Modifikator macht (zB "\S-b"), aber ich kann es nicht mit mehreren Modifikatoren zum Laufen bringen. Ich weiß, dass ich nur die (kbd "C-S-b")Ausgabe ( [33554434]) auswerten und verwenden kann , aber ich möchte etwas, das leichter zu lesen ist.

Hier sind einige Dinge, die ich versucht habe:

(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
quelle

Antworten:

15

?In der Vektordarstellung fehlen ein und zwei Backslashes:

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

Der Abschnitt über Schlüsselsequenzen im Elisp-Handbuch lautet:

Tastenfolgen mit Funktionstasten, Maustastenereignissen, Systemereignissen oder Nicht-ASCII-Zeichen, wie sie als Zeichenfolgen dargestellt werden können C-=oder H-anicht; Sie müssen als Vektoren dargestellt werden.

In der Vektordarstellung repräsentiert jedes Element des Vektors ein Eingabeereignis in seiner Lisp-Form . Beispielsweise [?\C-x ?l]repräsentiert der Vektor die Schlüsselsequenz C-x l.

Und unter Other Character Modifier Bits heißt es:

Die Lisp-Syntax für das Shift-Bit lautet \S-; also ?\C-\S-ooder ?\C-\S-Orepräsentiert den Shifted-Control-O-Charakter.

itsjeyd
quelle
1
Ich hatte versucht zu verstehen, was die Fragezeichen bedeuten. Dank Ihrer Antwort fand ich diese: Ctl-Char-Syntax? \ C- und Meta-Char-Syntax? \ M-
Kaushal Modi
Und ja, Malabarbas Frage wird auf dieser Seite unter Andere Modifikator-Bits beantwortet .
Kaushal Modi
@kaushalmodi Danke für die Links! Sie sind sehr nützlich, um ein tieferes Verständnis dafür zu erlangen, was vor sich geht.
Itsjeyd