Come viene definita la chiave < backtab >; come cancellarlo; e come crearne uno nuovo da zero?

Loghi
Fondamentalmente quello che io ” Ho fatto le ultime due settimane cercando di personalizzare le mie combinazioni di tasti una modalità alla volta, quindi ho passato ciascuna modalità una alla volta e ho cancellato completamente la sua mappa dei tasti individualmente. E poi associare le funzioni che trovo utili.
Lo faccio anche per scopi didattici per saperne di più sul funzionamento interno delle mappe dei tasti, su come si relazionano, su come manipolarle, ecc.

Ma quello che mi ha bloccato, è come alcune chiavi (o functions / macros; io “no certo come dovrebbero essere chiamati) sono definiti. Ad esempio <backtab>, <C-return>, <C-tab>, <C-iso-lefttab>, ecc.

Ho sbloccato tutti i tasti funzione sia in function-key-map e local-function-map utilizzando il comando: (setf (cdr <keymap>) nil)

Ma tuttavia queste chiavi sembrano ancora esistere.

Forse sto solo confondendo cercando di comprendere i diversi livelli di astrazione contemporaneamente ..


Domanda
Quindi, come potrei cancellare completamente queste chiavi, in modo da poter partire dai primi principi e crearle da solo (con i loro nomi e funzionalità personalizzati)?


Domanda bonus
Perché (define-key input-decode-map [?\C-i] (kbd "<C-i>")) crea unastrazione che interpreta le chiavi C-i e <C-i> in modo diverso?
Control + i == C-i == ^I == TAB
Control + i = = <C-i>! = TAB
Forse questo ha qualcosa a che fare con il cambio di paradigma del mio pensiero che deve avvenire in ordine per capire meglio le mappe dei tasti?


Penso che in futuro aiuterebbe davvero me e le persone se qualcuno potesse fare un esempio banale e complesso in un formato come questo (supponendo che la modalità principale corrente sia text-mode):

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


UPDATE
Ho scoperto che puoi (una specie di) cancella le funzioni e poi le associa nuovamente alle chiavi ASCII corrispondenti in questo modo:

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

Ma anche se non rileggo mai le chiavi, per qualche motivo a mia insaputa, il mod le chiavi delle chiavi funzionano ancora. Quindi esiste una mappa dei tasti di cui non sono a conoscenza?

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

Commenti

  • ' per me è un mistero. 🙁 ' s anche x-alternatives-map e key-translation-map e input-decode-map ma non posso ' capire dove backtab deriva da …
  • Penso di aver scoperto dove sono definiti. Sembra che siano hard-coded nel keyboard.c file sorgente . Pertanto non cè modo di cancellarli completamente.

Risposta

Forse posso rispondere a parte della tua domanda. Altri possono probabilmente aiutarti di più qui.

<backtab> è chiamato “tasto funzione”, ma può essere associato a un comando in qualsiasi mappa di tasti (dimentica function-key-map in questo contesto.)

Vanilla Emacs (emacs -Q, nessun file di inizializzazione) lega alcuni tasti funzione in varie mappe di tasti. E anche le librerie che carichi possono farlo.

Se vuoi veramente rimuovere le associazioni di tasti funzione, ti suggerirei di lavorare dalle modalità che sono correnti in un dato momento, in un dato contesto. Usa C-h k per scoprire a cosa è associata una chiave di questo tipo. Determina a quale mappa di tasti è associata (tipicamente una mappa di tasti in modalità), quindi svincola da quella mappa (nel tuo file init , sulla modalità hook, per esempio). Sciacquare e ripetere.

Puoi vedere le chiavi che sono attualmente associate in una data mappa di tasti usando C-h M-k (describe-keymap) seguito da una variabile associata a una mappa di tasti (o seguita da una mappa di tasti effettiva, se non esiste una variabile).È necessaria la libreria help-fns+.el se si desidera utilizzare describe-keymap.

Alcuni tasti funzione (come backtab e f1, o meglio <backtab> e <f1> ( ma preferisco la notazione nuda ) sono piuttosto standard. Altri sono specifici di Emacs. Puoi pensa a un tasto funzione come un nome logico per qualcosa che può avere diverse implementazioni fisiche. backtab è in genere essenzialmente S-TAB, ad esempio. Questo è ciò che sta dietro lindicazione “traduzione” che a volte vedi in *Help* per C-h k.


( Ma mi chiedo perché, oltre che per apprendere chiavi e mappe di tasti (che è una buona cosa), stai intraprendendo questo esercizio di rimozione delle associazioni di tasti. Più tipico è semplicemente associare una chiave diversa al comando la cui associazione non ti piace e. Comunque, non ho bisogno di capire perché.)

Commenti

  • Penso di aver scoperto dove sono definiti. Sembra che sono hard-coded nel keyboard.c file sorgente . Pertanto non cè modo di cancellarli completamente.
  • Ho aggiornato la domanda su ciò che ho ottenuto finora. Penso di essere alla ricerca di una mappa dei tasti sconosciuta mancante

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *