Hvordan defineres nøglen < backtab >; hvordan man udsletter det; og hvordan man opretter en ny fra bunden?

Logoer
Grundlæggende hvad jeg ” Jeg har gjort de sidste par uger og forsøger at tilpasse mine nøglelister en tilstand ad gangen, og derfor har jeg gennemgået hver tilstand en efter en og fuldstændigt ryddet dens nøglekort individuelt. Og så binder jeg de funktioner, som jeg finder nyttige.
Jeg gør det også til uddannelsesmæssige formål for at lære mere om det indre arbejde med keymaps, hvordan de relaterer sig til, hvordan man manipulerer dem osv.

Men hvad har jeg fast, er, hvordan nogle nøgler (eller functions / macros; Jeg er ikke (hvad de skal kaldes) er defineret. For eksempel <backtab>, <C-return>, <C-tab>, <C-iso-lefttab> osv.

Jeg har ubundet hver funktionstast i både function-key-map og local-function-map ved hjælp af kommandoen: (setf (cdr <keymap>) nil)

Men alligevel synes disse nøgler stadig at eksistere.

Måske er jeg bare forvirrende mig selv ved at prøve at pakke mit hoved rundt om de mange abstraktionsniveauer på samme tid ..


Spørgsmål
Så hvordan ville jeg udslette disse nøgler fuldstændigt, så jeg kan starte med de første principper og oprette dem selv (med deres egne brugernavne og funktionalitet)?


Bonusspørgsmål
Hvorfor er det (define-key input-decode-map [?\C-i] (kbd "<C-i>")) skaber en abstraktion, der fortolker tasterne C-i og <C-i> forskelligt?
Control + i == C-i == ^I == TAB
Control + i = = <C-i>! = TAB
Har dette måske noget at gøre med paradigmeskiftet i min tænkning, der skal ske for at for bedre at forstå nøglekort?


Jeg tror, det ville virkelig hjælpe mig og mennesker i fremtiden, hvis nogen kunne lave et trivielt og komplekst eksempel i et format som dette (forudsat at den aktuelle hovedtilstand er text-mode):

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


UPDATE
Jeg fandt ud af, at du kan (slags) udsletter funktionerne og genindbinder dem derefter til deres tilsvarende ASCII-nøgler som sådan:

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

Men selvom jeg aldrig genindbinder tasterne, af en eller anden grund uden at jeg ved det, mod hvis tasterne stadig fungerer. Så er der et nøglekort, som jeg bare ikke er opmærksom på?

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

Kommentarer

  • Det ' er et mysterium for mig. 🙁 Der ' er også x-alternatives-map og key-translation-map og input-decode-map men jeg kan ' t finde ud af, hvor backtab ' s definition kommer fra …
  • Jeg tror, jeg måske har fundet ud af, hvor de er defineret. Det ser ud til, at de er hårdkodede i keyboard.c kildefil . Derfor er der ingen måde at udslette dem fuldstændigt.

Svar

Måske kan jeg besvare en del af dine spørgsmål. Andre kan sandsynligvis hjælpe mere her.

<backtab> kaldes en “funktionstast”, men den kan bindes til en kommando i ethvert nøglekort. (Glem alt om function-key-map i denne sammenhæng.)

Vanilla Emacs (emacs -Q, ingen init-fil) binder nogle funktionstaster i forskellige nøglekort. Og biblioteker, du indlæser, kan også gøre det.

Hvis du virkelig vil fjerne funktionstastebindinger, vil jeg foreslå, at du arbejder fra de tilstande, der er aktuelle på et givet tidspunkt, i en given kontekst. Brug C-h k for at finde ud af, hvad en sådan nøgle er bundet til. Bestem, hvilket nøglekort det er bundet i (typisk et tilstandstastatur), og løsn det derefter fra det kort (i din init-fil , for eksempel på tilstandskrogen). Skyl og gentag.

Du kan se de taster, der aktuelt er bundet i et givet tastaturkort ved hjælp af C-h M-k (describe-keymap) efterfulgt af en variabel bundet til et nøglekort (eller efterfulgt af en faktisk nøglekort, hvis der ikke er nogen variabel).Du har brug for bibliotek help-fns+.el , hvis du vil bruge describe-keymap.

Nogle funktionstaster (såsom backtab og f1, eller rettere <backtab> og <f1> ( men jeg foretrækker nøgen notation ) er ret standard. Andre er specifikke for Emacs. Du kan tænk på en funktionstast som et logisk navn for noget, der kan have forskellige fysiske implementeringer. backtab er for eksempel typisk i det væsentlige S-TAB. Dette er hvad der ligger bag indikationen “oversættelse”, som du undertiden ser i *Help* til C-h k.


( Men jeg spekulerer på, hvorfor, bortset fra for at lære om nøgler og tastaturkort (hvilket er en god ting), foretager du denne øvelse for at fjerne tastebindinger. Mere typisk er det simpelthen at binde en anden nøgle til kommandoen, hvis binding du ikke synes om e. Alligevel behøver jeg ikke forstå hvorfor.)

Kommentarer

  • Jeg tror, jeg måske har fundet ud af, hvor de er defineret. Det ser ud til, at de er hårdkodede i keyboard.c kildefilen . Derfor er der ingen måde at udslette dem fuldstændigt.
  • Jeg opdaterede spørgsmålet om, hvad jeg fik indtil videre. Jeg tror, jeg kan være på udkig efter et ukendt-ukendt manglende nøglekort

Skriv et svar

Din e-mailadresse vil ikke blive publiceret. Krævede felter er markeret med *