Cum este definită cheia < backtab >; cum să-l distrug; și cum să creezi unul nou de la zero?

Logos
Practic ceea ce eu ” Am făcut ultimele câteva săptămâni și încerc să-mi personalizez tastele cu un mod la un moment dat, așa că am trecut prin fiecare mod unul câte unul și am șters complet harta tastelor sale individual. Și apoi leg funcțiile care mi se par utile.
Fac asta și în scopuri educaționale pentru a afla mai multe despre funcționarea interioară a tastelor, cum se relaționează, cum să le manipuleze etc.

Dar ceea ce m-a blocat este modul în care unele chei (sau functions / macros; eu „nu sunt sigur cum ar trebui numite) sunt definite. De exemplu <backtab>, <C-return>, <C-tab>, <C-iso-lefttab>, etc.

Am legat fiecare tastă funcțională atât în function-key-map cât și în local-function-map folosind comanda: (setf (cdr <keymap>) nil)

Dar totuși, aceste chei încă par să persiste.

Poate că eu doar confuz încercând să-mi înfășor capul în jurul multiplelor niveluri de abstractizare în același timp ..


Întrebare
Cum aș șterge complet aceste chei, astfel încât să pot începe de la primele principii și să le creez eu însumi (cu propriile nume personalizate și funcționalitate)?


Întrebare bonus
De ce este (define-key input-decode-map [?\C-i] (kbd "<C-i>")) creează o abstracție care interpretează tastele C-i și <C-i> diferit?
Control + i == C-i == ^I == TAB
Control + i = = <C-i>! = TAB
Are asta ceva de-a face cu schimbarea de paradigmă a gândirii mele care trebuie să se întâmple în ordine pentru a înțelege mai bine tastele?


Cred că mi-ar ajuta cu adevărat pe mine și pe oameni în viitor dacă cineva ar putea face un exemplu banal și complex într-un format ca acesta (presupunând că modul major actual este text-mode):

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


UPDATE
Am constatat că poți (un fel de) șterge funcțiile și apoi le reconectează la tastele ASCII corespunzătoare astfel:

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

Dar chiar dacă nu reconectez niciodată tastele, dintr-un anumit motiv fără să știu, mod ifierii tastelor încă funcționează. Așadar, există o hartă cheie pe care „pur și simplu nu o știu?

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

Comentarii

  • Este ' un mister pentru mine. 🙁 Există ' și x-alternatives-map și key-translation-map și input-decode-map, dar nu pot ' să îmi dau seama unde se află backtab provine de la …
  • Cred că am aflat unde sunt definite. Se pare că sunt codificate în keyboard.c fișier sursă . Prin urmare, nu există nicio modalitate de a le elimina complet.

Răspuns

Poate că pot răspunde la o parte din întrebările dvs. Probabil că alții vă pot ajuta mai mult.

<backtab> se numește „tastă funcțională”, dar poate fi legată de o comandă din orice hartă de taste. (Uitați de function-key-map în acest context.)

Vanilla Emacs (emacs -Q, fără fișier inițial) leagă unele taste funcționale în diferite mape de taste. Și bibliotecile pe care le încărcați o pot face și ele.

Dacă doriți cu adevărat să eliminați legăturile de taste funcționale, vă sugerez să lucrați din modurile care sunt actuale la un moment dat, în orice context dat. Utilizați C-h k pentru a afla la ce se leagă o astfel de cheie. Determinați în ce hartă de chei este legată (de obicei o hartă de taste de mod), apoi dezlegați-o de harta respectivă (în fișierul ini , pe cârligul de mod, de exemplu). Clătiți și repetați.

Puteți vedea tastele care sunt legate în prezent într-o anumită hartă folosind C-h M-k (describe-keymap) urmată de o variabilă legată de o hartă de taste (sau urmată de o hartă de taste reală, dacă nu există o variabilă).Aveți nevoie de bibliotecă help-fns+.el dacă doriți să utilizați describe-keymap.

Unele taste funcționale (cum ar fi backtab și f1, sau mai bine zis <backtab> și <f1> ( dar prefer notația nudă ) sunt destul de standard. Altele sunt specifice Emacs. Puteți gândiți-vă la o tastă funcțională ca la un nume logic pentru ceva care poate avea implementări fizice diferite. backtab este de obicei S-TAB, de exemplu. este ceea ce se află în spatele indicației de „traducere” pe care o vedeți uneori în *Help* pentru C-h k.


( Dar mă întreb de ce, în afară de învățarea despre chei și hărți de chei (ceea ce este un lucru bun), întreprindeți acest exercițiu de eliminare a legărilor de chei. Mai tipic este pur și simplu legarea unei chei diferite de comanda a cărei legare nu doriți e. Oricum, nu trebuie să înțeleg de ce.)

Comentarii

Lasă un răspuns

Adresa ta de email nu va fi publicată. Câmpurile obligatorii sunt marcate cu *