Normalement, pour des raisons historiques, emacs traite le TAB
code de C-i
touche et la clé de la même manière, cf. la documentation lisp emacs sur les touches de fonction ou la réponse d'abo-abo à la question "Quelle est la différence entre TAB et?" .
NOTE: Dans ce post, keycodes sont
TAB
,<tab>
etC-i
; tabet Ctrl+ id'autre part sont les touches physiques du clavier.Cependant, pour le moment, emacs traite le
TAB
etC-i
comme la même chose, c'est(equal (kbd "TAB") (kbd "C-i"))
-à- dire ->t
.
Cependant, comme nous ne vivons plus dans le monde de l'informatique, je trouve cela extrêmement ennuyeux. Il y a quelques suggestions sur ce qui peut être fait pour contourner ce problème, par exemple
"Comment puis-je lier une commande à Ci sans changer TAB?"
- La solution de Trey n'a pas fonctionné pour moi, la variable
local-function-key-maps
n'est pas modifiée. Le modifier pour l'utiliser audelete
lieu dedelq
résulter en une variable modifiée mais cela n'apporte pas de résolution ... tabet Ctrl+ isont toujours les mêmes. - La traduction vers l'hyper map semble être une solution de contournement des années 80 ... Je pourrais aussi vouloir utiliser Hyper+ i.
- La solution de Trey n'a pas fonctionné pour moi, la variable
Utiliser le
input-decode-map
pour mapper Ctrl+ ià un code de contrôle post-ASCII est presque ce que je recherche. Sauf que cela ne fonctionne pas correctement avec lakbd
macro, ce qui signifie que l'on doit modifier tous les bits de code source qui lieront Ctrl+ i. Il s'agit sans doute de la meilleure solution étant donné que tout le code source est correctement modifié.L'utilisation de
(kbd "<tab>")
for tabet(kbd "C-i")
(ce qui signifie littéralement(kbd "TAB")
le\t
littéral) pour Ctrl+ i fonctionne, mais vous devez modifier tous les fichiers source qui utilisent le mauvais type de tab[Lire: le code cléTAB
], ce qui est ennuyeux.
Cela a été suggéré par exemple dans un problème de github et sur emacs.sx également .
Aucune de ces solutions ne semble être de vraies solutions, je préfère les considérer comme des solutions de contournement ou des hacks (du bogue existant ).
Y at - il un moyen de sortir là pour forcer emacs à la carte tabà
(kbd "<tab>")
et(kbd "TAB")
en Ctrl+ iest mis en correspondance avec(kbd "C-i")
peu de code acteur de modification de la source emacs?Cette approche devrait être complètement invisible pour l'utilisateur, ce qui signifie que le tabcomme keycodes
<tab>
etTAB
devrait mapper une fixation alors que le Ctrl+ icomme keycodeC-i
devrait la carte à une autre fixation.
Sur une note moins sérieuse: des développeurs emacs ici peuvent-ils commenter si cela sera modifié / corrigé dans le code source d'emacs à un moment donné?
la source
TAB
etC-i
(les codes, pas les clés) sont un seul et même par définition deTAB
.kbd
de traduire TAB en [tab]. Cela ne fonctionnera tout simplement pas pour les parties préchargées d'Emacs.Réponses:
L'avenir est révolu depuis longtemps et l'âge de pierre de l'informatique est sur le point d'arriver. Tous les terminaux de texte que je connais envoient toujours la même séquence d'octets à Emacs C-ique pour TAB, donc le besoin original de les "unifier" est toujours très présent chez nous.
La carte d'entrée-décodage (à la
(define-key input-decode-map "\C-i" [C-i])
) est probablement aussi bonne qu'elle l'est actuellement.En tant qu'ancien mainteneur d'Emacs, j'accueillerais une meilleure solution à ce problème, afin de libérer les clés C-i(et C-met C-[) sous les interfaces graphiques (les rendre probablement "réservées à l'utilisateur"). Mais je ne sais pas comment faire cela sans causer beaucoup de problèmes avec les paquets existants.
la source