Hvordan er nøkkelen < baksiden > definert; hvordan å utslette det; og hvordan lage en ny fra bunnen av?

Logoer
I utgangspunktet hva jeg » Jeg har gjort de siste par ukene og prøvd å tilpasse nøkkelbåndene mine en om gangen, og derfor har jeg gått gjennom hver modus en etter en og fullstendig ryddet tastaturet individuelt. Og så binder jeg funksjonene som jeg synes er nyttige.
Jeg gjør dette også for pedagogiske formål for å lære mer om de indre funksjonene til tastekartene, hvordan de forholder seg, hvordan man kan manipulere dem osv.

Men det som har satt meg fast, er hvordan noen nøkler (eller functions / macros; Jeg er ikke er sikker på hva de skal hete) er definert. For eksempel <backtab>, <C-return>, <C-tab>, <C-iso-lefttab> osv.

Jeg har ubundet hver funksjonstast i både function-key-map og local-function-map ved hjelp av kommandoen: (setf (cdr <keymap>) nil)

Men likevel ser disse nøklene fortsatt ut til å eksistere.

Kanskje jeg bare forvirrer meg selv ved å prøve å pakke hodet rundt de forskjellige abstraksjonsnivåene samtidig ..


Spørsmål
Så hvordan ville jeg fullstendig utslette disse nøklene, slik at jeg kan starte fra de første prinsippene og lage dem selv (med sine egne tilpassede navn og funksjonalitet)?


Bonusspørsmål
Hvorfor er det (define-key input-decode-map [?\C-i] (kbd "<C-i>")) skaper en abstraksjon som tolker nøklene C-i og <C-i> annerledes?
Control + i == C-i == ^I == TAB
Control + i = = <C-i>! = TAB
Har dette kanskje noe å gjøre med paradigmeskiftet i tankegangen min som må skje for at for bedre å forstå tastekart?


Jeg tror det virkelig vil hjelpe meg og mennesker i fremtiden hvis noen kan lage et trivielt og komplekst eksempel i et format som dette (forutsatt at nåværende hovedmodus er text-mode):

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


OPPDATERING
Jeg fant ut at du kan (slags) utslette funksjonene og bind dem deretter tilbake til deres tilsvarende ASCII-nøkler slik:

(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 selv om jeg av en eller annen grunn aldri gjenbinder nøklene uten å vite om meg, mod ifiers av tastene fortsatt fungerer. Så er det et nøkkelkort som jeg bare ikke er klar over?

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

Kommentarer

  • Det ' er et mysterium for meg. 🙁 Det ' er også x-alternatives-map og key-translation-map og input-decode-map men jeg kan ' t finne ut hvor baksiden ' s definisjon kommer fra…
  • Jeg tror jeg kanskje har funnet ut hvor de er definert. Det ser ut til at de er hardkodet i keyboard.c kildefil . Derfor er det ingen måte å fullstendig utslette dem.

Svar

Kanskje jeg kan svare på en del av spørsmålene dine. Andre kan nok hjelpe mer her.

<backtab> kalles en «funksjonstast», men den kan være bundet til en kommando i hvilket som helst tastekart. (Glem function-key-map i denne sammenhengen.)

Vanilla Emacs (emacs -Q, ingen init-fil) binder noen funksjonstaster i forskjellige tastekart. Og biblioteker du laster inn kan også gjøre det.

Hvis du virkelig vil fjerne funksjonstastebindinger, vil jeg foreslå at du arbeider fra de modusene som er gjeldende på et gitt tidspunkt, i en hvilken som helst gitt kontekst. Bruk C-h k for å finne ut hva en slik nøkkel er bundet til. Bestem hvilket tastatur det er bundet i (vanligvis et modus-tastatur), og bind det deretter opp fra det kartet (i init-filen din , på moduskroken, for eksempel.) Skyll og gjenta.

Du kan se tastene som for øyeblikket er bundet i et gitt tastekart ved hjelp av C-h M-k (describe-keymap) etterfulgt av en variabel bundet til et tastekart (eller etterfulgt av en faktisk tastekart, hvis det ikke er noen variabel).Du trenger bibliotek help-fns+.el hvis du vil bruke describe-keymap.

Noen funksjonstaster (for eksempel backtab og f1, eller rettere sagt <backtab> og <f1> ( men jeg foretrekker naken notasjon ) er ganske standard. Andre er spesifikke for Emacs. Du kan tenk på en funksjonstast som et logisk navn på noe som kan ha forskjellige fysiske implementeringer. backtab er for eksempel vanligvis i hovedsak S-TAB. Dette er det som ligger bak «oversettelses» -indikasjonen du noen ganger ser i *Help* for C-h k.


( Men jeg lurer på hvorfor, bortsett fra for å lære om nøkler og tastekart (som er bra), utfører du denne øvelsen for å fjerne tastebindinger. Mer typisk er å bare binde en annen nøkkel til kommandoen hvis binding du ikke liker e. Uansett trenger jeg ikke forstå hvorfor.)

Kommentarer

  • Jeg tror jeg kanskje har funnet ut hvor de er definert. Det ser ut til at de er hardkodet i keyboard.c kildefilen . Derfor er det ingen måte å utslette dem fullstendig.
  • Jeg oppdaterte spørsmålet om hva jeg har fått så langt. Jeg tror jeg kan være på utkikk etter et ukjent-ukjent manglende nøkkelkort

Legg igjen en kommentar

Din e-postadresse vil ikke bli publisert. Obligatoriske felt er merket med *