Comment distinguer Ci de TAB?

20

Normalement, pour des raisons historiques, emacs traite le TABcode de C-itouche 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>et C-i; tabet Ctrl+ id'autre part sont les touches physiques du clavier.

Cependant, pour le moment, emacs traite le TABet C-icomme 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-mapsn'est pas modifiée. Le modifier pour l'utiliser au deletelieu de delqré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.
  • Utiliser le input-decode-mappour mapper Ctrl+ ià un code de contrôle post-ASCII est presque ce que je recherche. Sauf que cela ne fonctionne pas correctement avec la kbdmacro, 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 \tlitté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>et TABdevrait mapper une fixation alors que le Ctrl+ icomme keycode C-idevrait 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é?

elemakil
la source
2
Notez que TABet C-i(les codes, pas les clés) sont un seul et même par définition de TAB.
Stefan
@Stefan C'est pourquoi j'ai ajouté le truc Note . Je vais modifier le message et le mettre là-dedans.
elemakil
Copie possible de Comment lier Ci comme différent de TAB?
Gilles 'SO- arrête d'être méchant'
OMI, cette question n'est pas un doublon, car elle veut déplacer toutes les liaisons de touches définies sur TAB (même celles des packages externes), pour utiliser <tab> à la place. Alors que l'autre question demandait comment les différencier dans votre propre code.
Malabarba
Ma suggestion serait de conseiller kbdde traduire TAB en [tab]. Cela ne fonctionnera tout simplement pas pour les parties préchargées d'Emacs.
Malabarba

Réponses:

21

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.

Stefan
la source
Vous vous demandez quel type de claviers utilisez-vous? Avec les claviers QWERT typiques, la distinction est juste apparente, et ne pas pouvoir distinguer ces touches est une telle douleur ...
Ivan Huang