Definir teclas Control + Shift sem kbd

11

Estou tentando adicionar alguma funcionalidade ao pacote de outra pessoa e, portanto, gostaria de respeitar seus padrões. Infelizmente, um desses padrões é não usar kbd.

Preciso vincular uma função C-S-b, mas não consigo descobrir como. Eu sei como fazer isso com um único modificador (por exemplo "\S-b"), mas não consigo fazê-lo funcionar com vários modificadores. Eu sei que posso apenas avaliar (kbd "C-S-b")e usar sua saída ( [33554434]), mas gostaria de algo mais fácil de ler.

Aqui estão algumas coisas que eu tentei:

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

Respostas:

15

Faltam uma ?e duas barras invertidas na representação vetorial:

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

A seção Sequências de teclas no manual Elisp diz:

Sequências de teclas contendo teclas de função, eventos de botões do mouse, eventos do sistema ou caracteres não ASCII, como C-=ou H-anão podem ser representados como seqüências de caracteres; eles precisam ser representados como vetores.

Na representação vetorial, cada elemento do vetor representa um evento de entrada, em sua forma Lisp . Por exemplo, o vetor [?\C-x ?l]representa a sequência de teclas C-x l.

E em Outros bits de modificador de caracteres, ele diz:

A sintaxe Lisp para o bit de deslocamento é \S-; portanto, ?\C-\S-oou ?\C-\S-Orepresenta o caractere shift-control-o.

itsjeyd
fonte
1
Eu estava tentando entender o que os pontos de interrogação significam. Graças à sua resposta, eu encontrei estes: ? Ctl-Char Sintaxe \ C- e ? Meta-Char Sintaxe \ M-
Kaushal Modi
E sim, a pergunta de Malabarba é respondida nesta página em Outros bits de modificador .
precisa
@kaushalmodi Obrigado pelos links! Eles são muito úteis para obter uma compreensão mais profunda do que está acontecendo.
itsjeyd