Définir les touches Ctrl + Maj sans kbd

11

J'essaie d'ajouter des fonctionnalités au package de quelqu'un d'autre, et je voudrais donc respecter leurs modèles. Malheureusement, l'un de ces modèles est de ne pas utiliser kbd.

J'ai besoin de lier une fonction C-S-b, mais je ne sais pas comment. Je sais comment faire cela avec un seul modificateur (par exemple "\S-b"), mais je ne peux pas le faire fonctionner avec plusieurs modificateurs. Je sais que je peux simplement évaluer (kbd "C-S-b")et utiliser sa sortie ( [33554434]), mais j'aimerais quelque chose de plus facile à lire.

Voici quelques choses que j'ai essayées:

(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
la source

Réponses:

15

Il manque une ?et deux barres obliques inverses dans la représentation vectorielle:

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

La section sur les séquences de touches dans le manuel Elisp dit:

Séquences de touches contenant des touches de fonction, des événements de bouton de souris, des événements système ou des caractères non ASCII tels que C-=ou H-ane pouvant pas être représentés sous forme de chaînes; ils doivent être représentés comme des vecteurs.

Dans la représentation vectorielle, chaque élément du vecteur représente un événement d'entrée, sous sa forme Lisp . Par exemple, le vecteur [?\C-x ?l]représente la séquence de touches C-x l.

Et sous Autres bits de modification de caractère, il est dit:

La syntaxe Lisp pour le bit de décalage est \S-; ainsi, ?\C-\S-oou ?\C-\S-Oreprésente le caractère shifted-control-o.

itsjeyd
la source
1
J'avais essayé de comprendre ce que signifiaient les points d'interrogation. Grâce à votre réponse, je les ai trouvées: Syntaxe Ctl-Char? \ Syntaxe C- et Meta-Char? \ M-
Kaushal Modi
Et oui, la question de Malabarba est répondue dans cette page sur les autres bits modificateurs .
Kaushal Modi
@kaushalmodi Merci pour les liens! Ils sont très utiles pour mieux comprendre ce qui se passe.
itsjeyd