Definir teclas Control + Shift sin kbd


11

Estoy tratando de agregar alguna funcionalidad al paquete de otra persona, por lo que me gustaría respetar sus patrones. Desafortunadamente, uno de estos patrones es no usar kbd.

Necesito vincular una función C-S-b, pero no puedo entender cómo. Sé cómo hacer esto con un solo modificador (por ejemplo "\S-b"), pero no puedo hacer que funcione con múltiples modificadores. Sé que puedo evaluar (kbd "C-S-b")y usar su salida ( [33554434]), pero me gustaría algo más fácil de leer.

Aquí hay algunas cosas que he probado:

(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

Respuestas:


15

Le faltan una ?y dos barras invertidas en la representación vectorial:

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

La sección sobre secuencias clave en el manual de Elisp dice:

Secuencias de teclas que contienen teclas de función, eventos de botón del mouse, eventos del sistema o caracteres que no son ASCII, como C-=o H-ano pueden representarse como cadenas; tienen que ser representados como vectores.

En la representación vectorial, cada elemento del vector representa un evento de entrada, en su forma Lisp . Por ejemplo, el vector [?\C-x ?l]representa la secuencia de teclas C-x l.

Y bajo Bits modificadores de otros caracteres dice:

La sintaxis de Lisp para el bit de cambio es \S-; por lo tanto, ?\C-\S-oo ?\C-\S-Orepresenta el carácter desplazado-control-o.


1
Había estado tratando de entender lo que significan los signos de interrogación. Gracias a su respuesta, encontré estos: Ctl-Char Syntax? \ C- y Meta-Char Syntax? \ M-
Kaushal Modi

Y sí, la pregunta de Malabarba se responde en esta página en Otros bits modificadores .
Kaushal Modi

@kaushalmodi Gracias por los enlaces! Son muy útiles para obtener una comprensión más profunda de lo que está sucediendo.
itsjeyd el
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.