Infelizmente, não existe uma solução única para isso para o cliente emacs em execução em uma janela de terminal. O problema surge porque o caractere <TAB>
é definido como CTRL-I
, então CTRL-<TAB>
significaria CTRL-CTRL-I
e, portanto, não é possível.
Quando o emacs está sendo executado no modo de janela, ele recebe sua entrada diretamente das teclas pressionadas. Quando é executado dentro de um terminal (ou se torna as coisas mais claras porque não funciona - em uma conexão ssh), a entrada vem do terminal I / O. É o programa terminal que lê os eventos de chave de hardware e gera o fluxo de entrada (não muito preciso, mas destaca o problema). O Emacs lê o fluxo de entrada e converte em eventos de pressionamento de tecla. Como o emacs não pode acessar os eventos de chave de hardware, ele é limitado pelas restrições do ambiente do terminal.
Para alguns programas de terminal, pode ser possível gerar uma sequência de entrada personalizada (por exemplo, quando você pressiona F1
) quando pressiona CTRL-<Tab>
, que pode ser interpretado pelo Emacs como CTRL-<Tab>
. Um exemplo de snippet para fazer isso para CTRL-<Home>
é:
(when (not window-system)
; Fixup missing console keys
(define-key key-translation-map (kbd "M-[ 4 ^") (kbd "C-<end>"))
(define-key key-translation-map (kbd "M-[ 1 ^") (kbd "C-<home>")))
Neste exemplo, M-[ 1 ^
é a sequência de entrada gerada quando eu pressiono CTRL-<Home>
no meu terminal.
Não é uma solução muito portátil (eu uso principalmente putty para acessar minha caixa de linux a partir do Windows, e não permite isso), então sua milhagem pode variar.
No final, decidi usar outra ligação de chave no meu .emacs e deixar a memória muscular de CTRL-<TAB>
morrer.