Comment lier C- [pour de vrai (sérieusement pour de vrai cette fois)

11

Existe-t-il un moyen de se lier C-[à quelque chose et que toutes les M-liaisons (méta) ne soient pas gâchées?

Ce n'est pas la première fois que cette question se pose. Malheureusement, la seule solution proposée dans le fil précédent est a) spécifique à Linux, b) nécessite un outil externe (à nouveau spécifique à Linux) qui n'a rien à voir avec Emacs. Dans la même veine, j'aurais pu utiliser quelque chose comme Karabiner sur un OS X pour voler la C-[séquence avant qu'Emacs ne l'obtienne, mais c'est maladroit et cher.

Étant donné que c'est Emacs qui insiste pour traduire C-[vers ESC, C-ivers TABet probablement vers d'autres, j'aimerais beaucoup rompre ces relations et récupérer de précieuses séquences clés. Récemment , je courais pleine vitesse sur ce problème et blâmée calme innocents smartparens le mode.

Une solution possible qui a impliqué function-key-mapet a key-translation-mapété discutée ici, mais hélas, elle ne fonctionne plus ou n'a pas fonctionné en premier lieu (ou je fais quelque chose de mal). Je pense que cela allait dans la bonne direction.

zeRusski
la source
3
Emacs n'insiste pas "pour traduire C-[en ESC". Les deux sont la même chose . De même, C-iet TABsont des noms différents pour le même code de contrôle ASCII.
Drew
2
@Drew Il n'est pas le moins du monde évident que les combinaisons de touches avec contrôle doivent correspondre aux codes de contrôle ASCII (dont il n'y en a que 32) dans une application GUI. (Ou, diable, même dans xterm, qui a un mode modifyOtherKeys pour envoyer des séquences d'échappement uniques dans de nombreux cas, bien que je n'en sois pas sûr en particulier)
Random832
3
@ Random832: Vous avez raison de distinguer les clés des caractères . Il est quelque peu logique et simple pour un éditeur de mapper la séquence de touches C-[ (appuyez Ctrlet appuyez [) sur le caractère deC-[ contrôle (alias le personnage), mais non, cela n'est pas obligatoire pour quelqu'un qui conçoit un éditeur. Et oui, Emacs fait ça. et sont le même caractère, mais les touches + et n'ont pas besoin d'être mappées à des caractères particuliers. ESCC-[ESCCtrl[Esc
Drew

Réponses:

8

Adapté de ma propre configuration :

(define-key input-decode-map [?\C-\[] (kbd "<C-[>"))
(global-set-key (kbd "<C-[>") 'butterfly)

Cela ne fonctionnera évidemment que dans l'interface graphique.

edit: Notez que le input-decode-mapterminal est local, ce qui signifie que sa modification ne fonctionnera pas si vous utilisez emacsclient, mais le fera si vous utilisez emacs. J'ai résolu le problème dans ma configuration en l'enveloppant dans une commande opérant sur un cadre et en l'ajoutant au after-make-frame-functionscrochet.

wasamasa
la source
merci cela semble légitime! Je me demande s'il y a un moyen d'empêcher Emacs de traiter Meta et ESC comme la même chose? Je me demande aussi si je bousille simplement une terminologie Emacs et ne pense pas directement ici
zeRusski
1
C'est une question différente, veuillez en ouvrir une nouvelle pour cela.
wasamasa
intéressant d'avoir <C-i>et <C-[>lié à TABet ESCdans la carte globale comme vous le suggérez dans votre configuration, flat out plante mon Emacs chaque fois que je les frappe:
zeRusski
1
Eh bien, étant donné que vous êtes le gars qui a remis un bug pour le crash de la barre lors de la saisie de la lettre "j" , je blâme votre build Emacs d'être crash et je vous suggère d'essayer un autre pour OS X.
wasamasa
croyez-moi, j'ai essayé plusieurs versions. Ce sera un autre mystère avec lequel je devrai vivre. Je vais gérer -) merci pour la solution
zeRusski