Relier une «invite claire» dans mutt

9

Par défaut, lorsque vous entrez des informations à l'invite de commande dans mutt, vous pouvez effacer l'invite avec Ctrlg, comme décrit dans le manuel :

^ G n / a abandonner

J'ai essayé de lier cette fonction à Escape. Malheureusement, abortn'est pas répertorié dans les fonctions disponibles, ni dans le manuel , ni dans la source .

J'ai essayé d'utiliser ceci dans mon .muttrc:

éditeur de liaison <esc> abandonner

mais cela renvoie une erreur:

Erreur dans /home/jason/.mutt/muttrc, ligne 143: abandon: aucune fonction de ce type sur la carte

J'ai essayé d'utiliser une carte différente, comme ( generic) et expérimenté d'autres fonctions fictives, comme clear, en vain.

Comment lierais-je Escapepour effacer la ligne d'invite?

jasonwryan
la source
1
La liaison d'échappement n'est pas une bonne idée car le caractère d'échappement (envoyé lorsque vous appuyez sur la touche d'échappement) est également le préfixe des séquences d'échappement envoyées par toutes les touches de fonction comme les flèches, del, F1 ...
Stéphane Chazelas
C'est un bon point que je n'avais pas considéré. En le testant, Escape doit être envoyé deux fois pour envoyer un littéral ^[afin qu'il ne soit pas un showstopper (je n'utilise pas de liaisons qui en dépendent de toute façon).
jasonwryan
Esc, Escenverrait deux caractères ESC. Vous pouvez également appuyer Escune fois sur et attendre environ une seconde (le délai d'attente par défaut attend le reste d'une séquence d'échappement).
Stéphane Chazelas
Oui. Je dois d'abord trouver comment le lier :)
jasonwryan

Réponses:

5

Ce n'est pas possible avec les raccourcis clavier. Ctrl-Gest codé en dur dans mutt à un niveau inférieur à celui du traitement des macros ou des raccourcis clavier (voir mutt_getch()dans le code source de mutt, au cœur de toutes les entrées utilisateur dans mutt qui renvoie une erreur ^G).

macro editor \e '^G'

ne fonctionnerait pas non plus.

Ce que vous pouvez faire est de configurer votre terminal pour envoyer ^Gen appuyant surEscape

Avec xterm:

xterm -xrm 'XTerm.VT100.translations: #override <KeyPress> Escape: string(0x7)'

Si vous utilisez screen, vous pouvez également faire

screen -X bindkey $'\e' stuff $'\a'

avant d'appeler mutt et de le restaurer ensuite (malheureusement, il ne semble pas que vous puissiez avoir des raccourcis clavier par écran dans l'écran). En outre, cela va être un problème si votre éditeur de messages électroniques est vi.

Stéphane Chazelas
la source
Surévalué: car il répond à la question (c'est-à-dire que ce n'est pas possible). Pourriez-vous s'il vous plaît élaborer sur le "codé en dur ... à un niveau inférieur". Et bien que la solution de contournement soit ingénieuse, elle n'est pas vraiment praticable car j'utilise Escape dans de nombreux autres programmes terminaux - d'où le désir de le lier ici.
jasonwryan
J'ai édité ma réponse avec plus de détails. Je suis surpris que Esc soit lié dans d'autres programmes car il ne l'est généralement pas dans les applications que je connais pour la raison mentionnée dans les commentaires ci-dessus.
Stéphane Chazelas
2

Cela me semble être une très mauvaise idée de lier l'évasion ControlGaussi. Je suis venu ici à la recherche d'une solution mutt, mais comme il semble qu'il n'y en ait pas, je donnerai une réponse de ce que je fais pour quiconque arrive à tomber dessus. Ce n'est pas optimal mais cela n'affectera aucun autre programme:

macro editor \e "<enter><shell-escape>xdotool key control+g<enter>"

ou

macro editor \e "<enter><shell-escape>xsendkey Control+g<enter>"

Utiliser quelque chose comme xdotool ou xsendkey pour simuler control + g fonctionne et ne gâche pas la fuite partout ailleurs. Il y a un délai visuel pour que je quitte l'éditeur de ligne, mais les liaisons d'index fonctionneront immédiatement et le délai visuel disparaîtra dès que vous utiliserez une liaison d'index. La première entrée est nécessaire pour que mutt ne se contente pas de taper "...." et d'en faire un en-tête ou un terme de recherche ou quelque chose.

nocturne
la source
0

Cette solution est si mauvaise que l'auteur a préféré éditer le code source de Mutt pour se débarrasser de ^ G

Avertissement: cette solution semble incompatible avec OSX, Emacs et d'autres applications qui utilisent Ctrl+G

Après mon premier jour à Mutt, j'utilisais presque ^ G dans Vim par erreur ... Ensuite, j'ai essayé quelque chose qui semble fonctionner ici, dans le gestionnaire de fenêtres i3 et xfce-terminal .

Ajout de cette ligne à ~/.i3/config:

bindsym --release Escape exec --no-startup-id xvkbd -xsendevent -text "\[Escape]\[Control]\[g]"

J'ai dû l'utiliser "\[Escape]\[Control]\[g]"parce que "\[Control]\[g]"ça l'a empêché de fonctionner à Vim.

Si vous n'utilisez pas i3, je pense que vous pouvez utiliser xbindkeys pour exécuter xvkbd -xsendevent -text "\[Escape]\[Control]\[g]"lorsque vous Escappuyez sur.

Ce n'est pas une belle solution ... Cela peut rendre votre Escclé inutilisable dans certains programmes, mais au moins ici ça semble ok.

ÉDITER:

Je vois maintenant que la partie Ctrl+ Gfait que Vim montre la position dans le fichier. Rien de trop dramatique, pour l'instant.

Ce lien semble avoir une meilleure solution, mais pour urxvt : http://www.unixli.com/q/answers-urxvt-map-esc-key-to-key-sequence-83211.html

Quelqu'un
la source