Hoe wordt de sleutel < backtab > gedefinieerd; hoe het uit te wissen; en hoe maak je helemaal opnieuw een nieuwe aan?

Logos
In feite wat ik ” ik heb de afgelopen weken geprobeerd mijn keybinds één voor één aan te passen, dus heb ik elke modus één voor één doorlopen en de keymap afzonderlijk volledig gewist. En dan de functies binden die ik nuttig vind.
Ik doe dit ook voor educatieve doeleinden om meer te weten te komen over de innerlijke werking van keymaps, hoe ze verband houden, hoe ze te manipuleren, enz.

Maar waar ik aan vast zit, is hoe sommige sleutels (of functions / macros; ik “niet zeker hoe ze zouden moeten heten) zijn gedefinieerd. Bijvoorbeeld <backtab>, <C-return>, <C-tab>, <C-iso-lefttab>, etc.

Ik heb elke functietoets in zowel function-key-map als local-function-map losgekoppeld met behulp van de volgende opdracht: (setf (cdr <keymap>) nil)

Maar toch lijken deze sleutels nog steeds te bestaan.

Misschien ben ik gewoon verwarrend mezelf door te proberen mijn hoofd tegelijkertijd rond de verschillende abstractieniveaus te wikkelen.


Vraag
Dus hoe zou ik deze sleutels volledig uitwissen, zodat ik kan beginnen met de eerste principes en ze zelf kan maken (met hun eigen aangepaste namen en functionaliteit)?


Bonusvraag
Waarom is het (define-key input-decode-map [?\C-i] (kbd "<C-i>")) creëert een abstractie die de sleutels C-i en <C-i> anders?
Control + i == C-i == ^I == TAB
Control + i = = <C-i>! = TAB
Heeft dit misschien iets te maken met de paradigmaverschuiving van mijn denken die moet gebeuren om om keymaps beter te begrijpen?


Ik denk dat het mij en mensen in de toekomst echt zou helpen als iemand een triviaal en complex voorbeeld zou kunnen maken in een indeling als deze (ervan uitgaande dat de huidige hoofdmodus text-mode is):

toetsaanslag Control + Backspace ->
local-function-keymap Control + Backspace = <C-backspace> ->
text-mode-map <C-backspace> = nil ->
global-map <C-backspace> = backward-kill-word


UPDATE
Ik heb gemerkt dat je (soort van) de functies uitwissen en ze vervolgens opnieuw verbinden met hun corresponderende ASCII-sleutels als volgt:

(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]) 

Maar zelfs als ik de sleutels nooit opnieuw bind, om de een of andere reden buiten medeweten van mij, de mod ifiers van de toetsen werken nog steeds. Dus is er een keymap waarvan ik “me gewoon niet bewust ben?

if <tab> = undefined C-<tab> = defined 

Reacties

  • Het ' is mij een raadsel. 🙁 Daar ' is ook x-alternatives-map en key-translation-map en input-decode-map maar ik kan ' niet achterhalen waar backtab ' s definitie komt van …
  • Ik denk dat ik heb ontdekt waar ze zijn gedefinieerd. Het lijkt erop dat ze hard gecodeerd zijn in de keyboard.c bronbestand . Daarom is er geen manier om ze volledig uit te wissen.

Antwoord

Misschien kan ik een deel van uw vraag (en) beantwoorden. Anderen kunnen hier waarschijnlijk meer helpen.

<backtab> wordt een “functietoets” genoemd, maar het kan worden gebonden aan een commando in elke keymap. (vergeet function-key-map in deze context.)

Vanilla Emacs (emacs -Q, geen init-bestand) bindt enkele functietoetsen in verschillende keymaps. En bibliotheken die je laadt, kunnen dat ook doen.

Als je echt functietoetsbindingen wilt verwijderen, zou ik voorstellen dat je werkt vanuit de modi die op een bepaald moment actueel zijn, in elke gegeven context. Gebruik C-h k om erachter te komen waaraan een dergelijke sleutel is gebonden. Bepaal in welke keymap deze is gebonden (meestal een keymap voor modus) en koppel deze vervolgens los van die map (in uw init-bestand , op de mode hook, bijvoorbeeld). Spoel en herhaal.

Je kunt de sleutels zien die momenteel gebonden zijn in een bepaalde keymap met C-h M-k (describe-keymap) gevolgd door een variabele die aan een keymap is gebonden (of gevolgd door een echte keymap, als er geen variabele is).U heeft bibliotheek help-fns+.el nodig als u describe-keymap wilt gebruiken.

Sommige functietoetsen (zoals backtab en f1, of liever <backtab> en <f1> ( maar ik geef de voorkeur aan kale notatie ) zijn vrij standaard. Andere zijn specifiek voor Emacs. Je kunt beschouw een functietoets als een logische naam voor iets dat verschillende fysieke implementaties kan hebben. backtab is typisch in wezen S-TAB, bijvoorbeeld. Dit is wat er achter de “vertaling” -indicatie zit die je soms ziet in *Help* voor C-h k.


( Maar ik vraag me af waarom je, behalve om meer te weten te komen over toetsen en keymaps (wat een goede zaak is), deze oefening uitvoert om toetsbindingen te verwijderen. Typischer is gewoon het binden van een andere sleutel aan het commando waarvan je de binding niet leuk vindt e. Hoe dan ook, ik hoef niet te begrijpen waarom.)

Reacties

  • Ik denk dat ik heb ontdekt waar ze zijn gedefinieerd. Het lijkt erop dat ze zijn hard gecodeerd in het keyboard.c bronbestand . Daarom is er geen manier om ze volledig uit te wissen.
  • Ik heb de vraag bijgewerkt van wat ik tot nu toe heb gekregen. Ik denk dat ik misschien op zoek ben naar een onbekend-onbekend ontbrekende keymap

Geef een reactie

Het e-mailadres wordt niet gepubliceerd. Vereiste velden zijn gemarkeerd met *