Logos
En gros ce que je » Jai essayé ces dernières semaines de personnaliser mes raccourcis clavier un mode à la fois, ainsi jai parcouru chaque mode un par un et effacé complètement son keymap individuellement. Et puis lier les fonctions que je trouve utiles.
Je le fais aussi à des fins éducatives pour en savoir plus sur le fonctionnement interne des keymaps, comment ils sont liés, comment les manipuler, etc.
Mais ce qui ma bloqué, cest comment certaines clés (ou functions
/ macros
; je « ne suis pas bien sûr comment ils doivent être appelés) sont définis. Par exemple <backtab>
, <C-return>
, <C-tab>
, <C-iso-lefttab>
, etc.
Jai dissocié toutes les touches de fonction dans function-key-map
et local-function-map
en utilisant la commande: (setf (cdr <keymap>) nil)
Mais pourtant, ces clés semblent toujours persister.
Peut-être que je « suis juste déroutant moi-même en essayant de me concentrer sur les multiples niveaux dabstraction en même temps.
Question
Alors, comment pourrais-je complètement effacer ces clés, pour pouvoir partir des premiers principes et les créer moi-même (avec leurs propres noms et fonctionnalités personnalisés)?
Question bonus
Pourquoi (define-key input-decode-map [?\C-i] (kbd "<C-i>"))
crée une abstraction qui interprète les clés C-i
et <C-i>
différemment?
Ctrl + i == C-i
== ^I
== TAB
Contrôle + i = = <C-i>
! = TAB
Est-ce que cela a peut-être quelque chose à voir avec le changement de paradigme de ma pensée qui doit se produire dans lordre pour mieux comprendre les keymaps?
Je pense que cela maiderait vraiment, moi et les gens à lavenir, si quelquun pouvait faire un exemple trivial et complexe dans un format comme celui-ci (en supposant que le mode majeur actuel est text-mode
):
pression sur la touche Contrôle + Retour arrière ->
local-function-keymap Contrôle + Retour arrière = <C-backspace>
->
text-mode-map <C-backspace>
= nil
->
global-map <C-backspace>
= backward-kill-word
UPDATE
Jai constaté que vous pouviez (en quelque sorte) oblitérer les fonctions puis les relier à leurs clés ASCII correspondantes comme ceci:
(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])
Mais même si je ne relie jamais les clés, pour une raison quelconque à mon insu, le mod Les ifiers des touches fonctionnent toujours. Alors, y a-t-il un keymap dont je « ne suis tout simplement pas conscient?
if <tab> = undefined C-<tab> = defined
Commentaires
- Cela ' est un mystère pour moi. 🙁 Il ' est aussi
x-alternatives-map
etkey-translation-map
etinput-decode-map
mais je peux ' trouver où backtab vient de… - Je pense avoir découvert où elles sont définies. Il semble quelles sont codées en dur dans le
keyboard.c
fichier source . Il ny a donc aucun moyen de les effacer complètement.
Réponse
Je peux peut-être répondre à une partie de vos questions. Dautres peuvent probablement vous aider davantage ici.
<backtab>
sappelle une « touche de fonction », mais elle peut être liée à une commande dans nimporte quel keymap. (Oubliez function-key-map
dans ce contexte.)
Vanilla Emacs (emacs -Q
, pas de fichier init) lie certaines touches de fonction dans divers keymaps. Et les bibliothèques que vous chargez peuvent le faire aussi.
Si vous voulez vraiment supprimer les liaisons de touches de fonction, je vous suggère de travailler à partir des modes qui sont courants à un moment donné, dans nimporte quel contexte donné. Utilisez C-h k
pour savoir à quoi une telle clé est liée. Déterminez à quel keymap elle est liée (généralement un mode keymap), puis dissociez-la de cette map (dans votre fichier init , sur le crochet de mode, par exemple). Rincez et répétez.
Vous pouvez voir les clés qui sont actuellement liées dans un keymap donné en utilisant C-h M-k
(describe-keymap
) suivi dune variable liée à un keymap (ou suivi dun keymap réel, sil ny a pas de variable).Vous avez besoin de la bibliothèque help-fns+.el
si vous souhaitez utiliser describe-keymap
.
Quelques touches de fonction (comme backtab
et f1
, ou plutôt <backtab>
et <f1>
( mais je préfère la notation nue ) sont assez standard. Dautres sont spécifiques à Emacs. Vous pouvez considérez une touche de fonction comme un nom logique pour quelque chose qui peut avoir différentes implémentations physiques. backtab
est généralement essentiellement S-TAB
, par exemple. est ce qui se cache derrière lindication « translation » que vous voyez parfois dans *Help*
pour C-h k
.
( Mais je me demande pourquoi, à part pour en savoir plus sur les touches et les keymaps (ce qui est une bonne chose), vous entreprenez cet exercice de suppression des raccourcis clavier. Le plus typique est simplement de lier une clé différente à la commande dont vous naimez pas la liaison e. Quoi quil en soit, je nai pas besoin de comprendre pourquoi.)
keyboard.c
fichier source . Il ny a donc aucun moyen de les effacer complètement.