Definisci i tasti Control + Maiusc senza kbd


11

Sto cercando di aggiungere alcune funzionalità al pacchetto di qualcun altro, e quindi mi piacerebbe rispettare i loro schemi. Sfortunatamente, uno di questi schemi è di non usare kbd.

Devo associare una funzione a C-S-b, ma non riesco a capire come. So come farlo con un singolo modificatore (ad es. "\S-b"), Ma non riesco a farlo funzionare con più modificatori. So di poter semplicemente valutare (kbd "C-S-b")e usare il suo output ( [33554434]), ma vorrei qualcosa di più facile da leggere.

Ecco alcune cose che ho provato:

(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

Risposte:


15

Nella ?rappresentazione vettoriale mancano una e due barre rovesciate:

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

La sezione sulle sequenze di tasti nel manuale Elisp dice:

Sequenze di tasti contenenti tasti funzione, eventi del pulsante del mouse, eventi di sistema o caratteri non ASCII come C-=o H-anon possono essere rappresentati come stringhe; devono essere rappresentati come vettori.

Nella rappresentazione vettoriale, ogni elemento del vettore rappresenta un evento di input, nella sua forma Lisp . Ad esempio, il vettore [?\C-x ?l]rappresenta la sequenza di tasti C-x l.

E sotto Altri bit di modifica caratteri si dice:

La sintassi di Lisp per il bit di spostamento è \S-; quindi, ?\C-\S-oo ?\C-\S-Orappresenta il carattere shifted-control-o.


1
Avevo cercato di capire cosa significano i punti interrogativi. Grazie alla tua risposta, ho trovato questi: Sintassi Ctl-Char? \ Sintassi C- e Meta-Char? \ M-
Kaushal Modi

E sì, alla domanda di Malabarba viene data risposta in questa pagina su Altri bit di modifica .
Kaushal Modi,

@kaushalmodi Grazie per i collegamenti! Sono molto utili per ottenere una comprensione più profonda di ciò che sta accadendo.
È il
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.