Hur definieras nyckeln < baksida >; hur man utplånar det; och hur man skapar en ny från grunden?

Logotyper
I grund och botten vad jag ” Jag har gjort de senaste veckorna och försöker anpassa mina nyckelbindningar ett läge i taget, så jag har gått igenom varje läge en efter en och rensat helt nyckelplanen individuellt. Och sedan binda de funktioner som jag tycker är användbara.
Jag gör det också för utbildningsändamål för att lära mig mer om de inre funktionerna i tangentkartor, hur de relaterar, hur man manipulerar dem osv.

Men det som har fastnat är hur några tangenter (eller functions / macros; Jag är inte säker på vad de ska kallas) definieras. Till exempel <backtab>, <C-return>, <C-tab>, <C-iso-lefttab> osv.

Jag har obundet alla funktionsknappar i både function-key-map och local-function-map med kommandot: (setf (cdr <keymap>) nil)

Men ändå verkar dessa nycklar fortfarande kvar.

Jag kanske bara är förvirrande själv genom att försöka linda mitt huvud runt de olika abstraktionsnivåerna samtidigt ..


Fråga
Så hur skulle jag helt utplåna dessa nycklar, så att jag kan börja från de första principerna och skapa dem själv (med sina egna anpassade namn och funktionalitet)?


Bonusfråga
Varför är det (define-key input-decode-map [?\C-i] (kbd "<C-i>")) skapar en abstraktion som tolkar tangenterna C-i div id = ”5407ad7918″>

annorlunda?
Control + i == C-i == ^I == TAB
Control + i = = <C-i>! = TAB
Har det kanske något att göra med paradigmskiftet i mitt tänkande som måste ske för att för att bättre förstå tangentkartor?


Jag tror att det verkligen skulle hjälpa mig och människor i framtiden om någon kunde göra ett trivialt och komplext exempel i ett format som detta (förutsatt att nuvarande huvudläge är text-mode):

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


UPPDATERING
Jag fann att du kan (typ av) utplåna funktionerna och sedan binda dem om till motsvarande ASCII-tangenter så här:

(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 även om jag aldrig ombinder nycklarna, av någon anledning utan att jag känner till det, modet tangenterna fortfarande fungerar. Så finns det en tangentkarta som jag bara inte känner till?

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

Kommentarer

  • Det ' är ett mysterium för mig. 🙁 Det ' är också x-alternatives-map och key-translation-map och input-decode-map men jag kan ' t räkna ut var baksidan ' s definition kommer från …
  • Jag tror att jag kanske har fått reda på var de definieras. Det verkar som att de är hårdkodade i keyboard.c källfil . Därför finns det inget sätt att helt utplåna dem.

Svara

Jag kanske kan svara på en del av dina frågor. Andra kan nog hjälpa mer här.

<backtab> kallas en ”funktionsknapp”, men den kan bindas till ett kommando i valfri tangentkarta. (Glöm function-key-map i detta sammanhang.)

Vanilla Emacs (emacs -Q, ingen init-fil) binder några funktionstangenter i olika tangentkartor. Och bibliotek du laddar kan också göra det.

Om du verkligen vill ta bort funktionstangentbindningar, föreslår jag att du arbetar från de lägen som är aktuella vid en given tidpunkt, i ett givet sammanhang. Använd C-h k för att ta reda på vad en sådan nyckel är bunden till. Bestäm vilken tangentkarta den är bunden till (vanligtvis en lägesknapp) och bind sedan upp den från den kartan (i din init-fil , på lägeskroken, till exempel). Skölj och upprepa.

Du kan se tangenterna som för närvarande är bundna i en viss tangentkarta med C-h M-k (describe-keymap) följt av en variabel bunden till en tangentkarta (eller följt av en faktisk tangentkarta, om det inte finns någon variabel).Du behöver bibliotek help-fns+.el om du vill använda describe-keymap.

Vissa funktionstangenter (som backtab och f1, eller snarare <backtab> och <f1> ( men jag föredrar naken notering ) är ganska standard. Andra är specifika för Emacs. Du kan tänk på en funktionsknapp som ett logiskt namn för något som kan ha olika fysiska implementeringar. backtab är till exempel i huvudsak S-TAB, till exempel. är vad som ligger bakom ”översättning” -indikationen som du ibland ser i *Help* för C-h k.


( Men jag undrar varför, förutom för att lära dig om tangenter och tangentkartor (vilket är bra), gör du den här övningen att ta bort tangentbindningar. e. Hur som helst behöver jag inte förstå varför.)

Kommentarer

  • Jag tror att jag kanske har fått reda på var de är definierade. de är hårdkodade i keyboard.c källfilen . Därför finns det inget sätt att helt utplåna dem.
  • Jag uppdaterade frågan om vad jag har hittills. Jag tror att jag kanske letar efter en okänd okänd saknad tangentkarta

Lämna ett svar

Din e-postadress kommer inte publiceras. Obligatoriska fält är märkta *