Qual é a diferença entre TAB e <tab>?

15

Eu estava lendo a documentação para o modo Yasnippet, quando cheguei à seção onde a chave de gatilho está definida:

Parece que o modo secundário Yasnippet define a TABchave a ser executada yas-expandusando:

(define-key yas-minor-mode-map (kbd "<tab>") 'yas-expand)
(define-key yas-minor-mode-map (kbd "TAB") 'yas-expand)

Qual é a diferença entre <tab>e TAB? (Tentei pesquisar no Google, mas não consegui encontrar uma descrição clara)

Håkon Hægland
fonte

Respostas:

9

Embora o Emacs geralmente traduza <tab>(a única tecla) para TAB( C-i), você pode vincular <tab> e TABa coisas diferentes:

(global-set-key (kbd "<tab>") #'proced)
(global-set-key (kbd "TAB") #'indent-for-tab-command)
abo-abo
fonte
2
Entendo, mas por que o Yasnippet precisa definir ambos <tab>e TAB?
Håkon Hægland
3
@ HåkonHægland Se você os vincular a diferentes comandos no mapa global, o emacs para de traduzir um para o outro (mesmo em mapas de modo menor), então o ynipet vincula os dois por via das dúvidas.
Malabarba
11
@ Malabarba Então, se você definir ambos <tab>e TAB, a única maneira de executar o comando associado TABé digitar C-i?
Håkon Hægland
2
Se você vincular <tab>a um comando diferente do que você vincula TAB, o que você obtém ao pressionar a tecla "Tab" depende de qual / o que ele envia ao Emacs. Se ele envia C-i(aka TAB), você recebe a TABligação. Se ele enviar <tab>, você receberá sua ligação. (E sim, você sempre pode bater C-ipara obter a TABligação.)
de Drew
11
Mais informação histórica sobre os diferentes TABchaves são dadas por StreakyCobraem esta questão github spacemacs. Você pode incluir algumas dessas informações em sua resposta.
Håkon Hægland 28/10