Loga
V podstatě to, co já “ Dělal jsem posledních pár týdnů se snaží přizpůsobit své keybinds jeden režim najednou; tak jsem „jsem procházel každý režim jeden po druhém a úplně vymazat jeho keymap individuálně. A pak svázat funkce, které považuji za užitečné.
Dělám to také pro vzdělávací účely, abych se dozvěděl více o vnitřním fungování keymap, o tom, jak souvisí, jak s nimi manipulovat atd.
Co mě ale zaseklo, je to, jak některé klíče (nebo functions
/ macros
; nejsem jsou definovány. Například <backtab>
, <C-return>
, <C-tab>
, <C-iso-lefttab>
atd.
Pomocí příkazu jsem uvolnil každý funkční klíč v function-key-map
a local-function-map
: (setf (cdr <keymap>) nil)
Zdá se však, že tyto klíče stále existují.
Možná jsem jen matoucí pokusím se omotat hlavu několika úrovněmi abstrakce najednou ..
Otázka
Jak bych tedy tyto klíče úplně vyhladil, abych mohl začít od prvních principů a vytvářet je sám (se svými vlastními názvy a funkcemi)?
Bonusová otázka
Proč (define-key input-decode-map [?\C-i] (kbd "<C-i>"))
vytváří abstrakci, která interpretuje klíče C-i
a <C-i>
jinak?
Control + i == C-i
== ^I
== TAB
Control + i = = <C-i>
! = TAB
Má to snad něco společného s posunem paradigmatu mého myšlení, ke kterému musí dojít, aby lépe porozumět keymapám?
Myslím, že by mi i lidem v budoucnu skutečně pomohlo, kdyby někdo mohl udělat triviální a komplexní příklad v takovém formátu (za předpokladu, že současný hlavní režim je text-mode
):
keypress Control + Backspace ->
local-function-keymap Control + Backspace = <C-backspace>
->
text-mode-map <C-backspace>
= nil
->
global-map <C-backspace>
= backward-kill-word
UPDATE
Zjistil jsem, že můžete (druh) vyhlazení funkcí a jejich opětovné svázání s odpovídajícími klíči ASCII takto:
(setf (cdr x-alternatives-map) nil) (setf (cdr function-key-map) nil) (setf (cdr local-function-key-map) nil) (define-key local-function-key-map (kbd "<tab>") [9]) (define-key local-function-key-map (kbd "<return>") [13]) (define-key local-function-key-map (kbd "<escape>") [27]) (define-key local-function-key-map (kbd "<backspace>") [127])
Ale i když klíče z nějakého důvodu nikdy nevázám znovu bez vědomí mě, mod ifiers klíčů stále funguje. Existuje tedy mapa klíčů, které si nejsem vědom?
if <tab> = undefined C-<tab> = defined
Komentáře
Odpovědět
Možná mohu odpovědět na část vašich otázek. Ostatní zde pravděpodobně mohou pomoci více.
<backtab>
se nazývá „funkční klíč“, ale lze jej vázat na příkaz v libovolné klávesové mapě. (V této souvislosti zapomeňte na function-key-map
.)
Vanilla Emacs (emacs -Q
, žádný soubor init) váže některé funkční klávesy v různých mapách kláves. A knihovny, které načtete, to také mohou udělat.
Pokud opravdu chcete odstranit vazby na funkční klávesy, navrhuji, abyste pracovali z režimů, které jsou aktuální v danou dobu, v jakémkoli daném kontextu. Pomocí C-h k
zjistěte, na co je takový klíč vázán. Určete, v jaké klávesové mapě je vázán (obvykle režimová keymapa), a poté ji z této mapy (ve vašem souboru init) odpojte , například na háku režimu). Opláchněte a opakujte.
Klíče, které jsou aktuálně svázány v dané klávesové mapě, můžete zobrazit pomocí C-h M-k
(describe-keymap
) následovaný proměnnou vázanou na mapu kláves (nebo následovanou skutečnou mapou kláves, pokud proměnná neexistuje).Pokud chcete použít describe-keymap
, potřebujete knihovnu help-fns+.el
. / p>
Některé funkční klávesy (například backtab
a f1
nebo spíše <backtab>
a <f1>
( ale dávám přednost nahé notaci ) jsou docela standardní. Jiné jsou specifické pro Emacs. Můžete Představte si funkční klíč jako logický název pro něco, co může mít různé fyzické implementace. backtab
je například obvykle v podstatě S-TAB
. je to, co stojí za označením „překlad“, které někdy vidíte v *Help*
pro C-h k
.
( Ale zajímalo by mě, proč, kromě učení o klíčích a mapách kláves (což je dobrá věc), provádíte toto cvičení odstraňování vazeb kláves. Typičtější je jednoduše svázat jiný klíč k příkazu, jehož vazba se vám nelíbí E. Každopádně nemusím rozumět proč.)
Komentáře
- Myslím, že jsem možná zjistil, kde jsou definovány. Zdá se, že jsou pevně zakódovány do
keyboard.c
zdrojového souboru . Neexistuje tedy způsob, jak je úplně vyhladit. - Aktualizoval jsem otázku, co jsem doposud dostal. Myslím, že možná hledám neznámo-neznámo chybějící mapu klíčů
x-alternatives-map
akey-translation-map
ainput-decode-map
, ale nedokážu ' zjistit, kde backtab pochází z…keyboard.c
zdrojový soubor . Neexistuje tedy způsob, jak je úplně vyhladit.