Je veux faire Control-i
performer indent-region
(essentiellement depuis que Xcode a déjà construit cette mémoire musculaire).
Je me rends compte de cela Control-i
et tab
sont indiscernables dans le sens Ascii, mais ils sont dans le sens du code clé.
J'ai essayé l'évidence:
(global-unset-key (kbd "C-i"))
(global-set-key (kbd "C-i") 'indent-region)
en vain - appuyer sur fait Control-i
toujours ce que fait la tab
touche dans le contexte actuel. Puis-je faire quelque chose pour aider Emacs à traiter le bouton de tabulation différemment Control-i
?
Mise à jour: Je suppose qu'un résultat équivalent serait atteint en étant capable de remapper ce que fait tab
/ Control-i
press lorsqu'une région est sélectionnée.
Réponses:
Je ne pense pas que cela puisse être réalisé à partir d'un terminal, mais en mode GUI, vous pouvez essayer ceci:
Je fais la même chose avec
C-m
pour que ça se distingue deRET
ÉDITER:
Les éléments suivants devraient fonctionner, que vous soyez en mode GUI ou TTY:
Ce n'est pas joli, mais ça semble faire l'affaire. Je me réjouis de tout raffinement ou modification de ce code si nécessaire.
la source
<C-i>
et[C-i]
aurait pu être un identifiant arbitraire, comme<foobar>
et[foobar]
, et cela fonctionnerait toujours; il suffit de ne pas l'appelertab
oubackspace
.emacs
fichier mais les deuxTAB
etC-i
est remappé :-( @nispio(window-system)
est revenunil
au moment où votre a.emacs
été chargé. Cela peut être dû au fait que vous exécutez une instance non graphique d'Emacs ou parce que vous exécutez un démon Emacs.Cadres GUI
Dans les cadres GUI (que ce soit X11, Windows, OSX,…), Emacs lit la Tabclé comme touche de
tab
fonction. Cependant, étant donné que la Tabtouche sur les terminaux envoie traditionnellement le caractère^I
( Control + I), Emacs traduit latab
touche de fonction en caractère Control + I (caractère 9), qui s'affiche commeTAB
. Cette traduction se fait viafunction-key-map
.Une traduction similaire se produit avec certaines autres touches de fonction. ( Backspaceet Deletesont un cas épineux dont je ne parlerai pas en détail ici.)
Si vous souhaitez séparer complètement Tabde Ctrl+ I, supprimez la liaison de
function-key-map
:Cependant, cela n'est pas très utile, car les entrées dans
function-key-map
sont remplacées par des liaisons dans des images clés spécifiques au mode ou dans la carte globale. Donc, si vous souhaitez définir une liaison différente pourtab
, faites-le (dans Elisp, pas de manière interactive, car l'invite de lecture de clé applique lafunction-key-map
traduction afin que vous finissiez par la relierTAB
et nontab
):Tous les modes standard qui modifient l'action de la Tabtouche le font en modifiant la
TAB
touche, qui est un surnom pour leC-i
caractère généré par la combinaison de touches Ctrl+ I. Si vous souhaitez que les liaisons standard s'appliquent àtab
plutôt queC-i
, laissezfunction-key-map
et modifiez les images clés en mode, et redirigez plutôt Ctrl+ Ivers une autre clé.Emacs rapportera désormais Ctrl+ Icomme «
<control-i>
(traduit deTAB
)». Ce n'est pas joli, mais c'est inévitable: la jolie impression du caractère 9TAB
est intégrée au code source d'Emacs.Cadres de bornes
Dans les châssis terminaux, le problème est plus difficile et souvent impossible. Les terminaux ne transmettent pas de clés, ils transmettent des caractères (plus précisément, en fait, ils transmettent des octets). La Tabclé est transmise sous forme de caractère de tabulation - qui est Contrôle + I, identique à ce que génère la combinaison de touches Ctrl+ I. Les touches de fonction qui n'ont pas de caractère correspondant (telles que les touches de curseur) sont transmises en tant que séquences d'échappement, c'est-à-dire que les séquences de caractères commençant par
ESC
= Control + [(c'est pourquoi Emacs définit escapecomme une touche de préfixe -ESC
doit être un préfixe). Voir Comment fonctionnent la saisie au clavier et la sortie du texte? pour plus de fond.Il y a quelques terminaux qui peuvent être configurés pour envoyer différentes séquences de touches pour les touches de fonction, mais pas beaucoup. Les deux libtermkey / libtickit de LeoNerd et le xterm de Thomas Dickey (depuis la version 216) l' appui. Dans Xterm, la fonctionnalité est facultative et activée via la
modifyOtherKeys
ressource. Cependant, je ne connais aucun émulateur de terminal populaire autre que xterm qui le supporte, en particulier les nombreux émulateurs construits sur libvte . Certains émulateurs de terminal vous permettent de le faire manuellement via une correspondance définie par l'utilisateur à partir des clés pour échapper aux séquences.Ce mécanisme permet de distinguer de nombreuses combinaisons de touches, pas seulement tab / Ci, return / Cm et escape / C- [. Voir Problèmes avec les raccourcis clavier lors de l'utilisation du terminal pour une description plus détaillée.
La fonction de base xterm est prise en charge depuis Emacs 24.4. Toutefois , les fondamentaux (en particulier Tab, Return, Escape, Backspace) envoient toujours les caractères de contrôle traditionnels, parce que ce applications attendent. Il existe un mode où Ctrl+ letterenvoie une séquence d'échappement au lieu du caractère de contrôle. Donc, pour distinguer les touches de fonction des Ctrlcombinaisons sur Emacs 24.4, modifiez sa prise en charge pour
modifyOtherKeys
utiliser ce mode en définissant la ressource sur 2 au lieu de 1.la source