В чем разница между TAB и <tab>?

15

Я читал документацию по режиму Yasnippet, когда пришел в раздел, где определяется ключ триггера:

Кажется, что младший режим Yasnippet определяет TABключ для запуска, yas-expandиспользуя:

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

В чем разница между <tab>и TAB? (Я пытался Google это, но я не мог найти четкое описание)

Хокон Хагланд
источник

Ответы:

9

Хотя Emacs обычно переводит <tab>(единственный ключ) в TAB( C-i), вы можете связать <tab> и TABс разными вещами:

(global-set-key (kbd "<tab>") #'proced)
(global-set-key (kbd "TAB") #'indent-for-tab-command)
Або-або
источник
2
Понятно, но зачем Ясниппет определять и то <tab>и другое TAB?
Håkon Hægland
3
@ HåkonHægland, если вам случится связать их с различными командами на глобальной карте, emacs прекратит переводить одну на другую (даже на картах в второстепенном режиме), поэтому yasnippet связывает обе на всякий случай.
Малабарба
1
@Malabarba Итак, если вы определили оба <tab>и TAB, единственный способ запустить команду, связанную с, TABэто набрать C-i?
Håkon Hægland
2
Если вы связываете <tab>команду, отличную от той, к которой вы привязываетесь TAB, то, что вы получите, когда нажмете клавишу «Tab», зависит от того, что / что она отправляет в Emacs. Если он отправляет C-i(иначе TAB), то вы получаете TABпривязку. Если он отправляет, <tab>вы получаете его привязку. (И да, вы всегда можете нажать, C-iчтобы получить TABпривязку.)
Дрю
1
Более историческая информация о различных TABключах дана StreakyCobraв этом выпуске spacemacs github. Вы можете включить часть этой информации в свой ответ.
Хокон Хагланд