Erneutes Binden von "Clear Prompt" in Mutt

9

Wenn Sie Informationen an der Eingabeaufforderung eingeben mutt, können Sie die Eingabeaufforderung standardmäßig mit löschen Ctrlg, wie im Handbuch beschrieben :

^ G n / a Abbruch

Ich habe versucht, diese Funktion zu binden Escape. Leider abortist in den verfügbaren Funktionen weder im Handbuch noch in der Quelle aufgeführt .

Ich habe versucht, dies in meinem zu verwenden .muttrc:

Bindungseditor <esc> abbrechen

aber es wirft einen Fehler:

Fehler in /home/jason/.mutt/muttrc, Zeile 143: Abbruch: Keine solche Funktion in der Karte

Ich habe versucht, eine andere Karte wie ( generic) zu verwenden, und mit anderen fiktiven Funktionen wie vergeblich experimentiert clear.

Wie würde ich binden Escape, um die Eingabeaufforderungszeile zu löschen?

Jasonwryan
quelle
1
Das Binden von Escape ist keine gute Idee, da das Escape-Zeichen (das beim Drücken von Escape gesendet wird) auch das Präfix für Escape-Sequenzen ist, die von allen Funktionstasten wie Pfeile, Del, F1 ... gesendet werden
Stéphane Chazelas
Das ist ein guter Punkt, den ich nicht berücksichtigt hatte. Beim Testen muss Escape zweimal gesendet werden, um ein Literal zu senden, ^[damit es möglicherweise kein Showstopper ist (ich verwende sowieso keine Bindungen, die darauf angewiesen sind).
Jasonwryan
Esc, EscWürde zwei ESC - Zeichen senden. Sie können auch Esceinmal drücken und etwa eine Sekunde warten (das Standardzeitlimit wartet auf den Rest einer Escape-Sequenz).
Stéphane Chazelas
Ja. Zuerst muss ich herausfinden, wie man es bindet :)
Jasonwryan

Antworten:

5

Mit Tastenkombinationen ist das nicht möglich. Ctrl-Gist in mutt auf einer niedrigeren Ebene als der Makro- oder Schlüsselbindungsverarbeitung fest codiert (siehe mutt_getch()im Quellcode von mutt im Kern aller Benutzereingaben in mutt, bei denen ein Fehler zurückgegeben wird ^G).

macro editor \e '^G'

würde auch nicht funktionieren.

Sie können Ihr Terminal so konfigurieren, dass es ^Gbeim Drücken gesendet wirdEscape

Mit xterm:

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

Wenn Sie verwenden screen, können Sie dies auch tun

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

bevor Sie mutt aufrufen und anschließend wiederherstellen (leider scheint es nicht möglich zu sein, dass Sie pro Bildschirm Fensterbindungen im Bildschirm haben können). Es wird auch ein Problem sein, wenn Ihr Editor für E-Mail-Nachrichten vi ist.

Stéphane Chazelas
quelle
Upvoted: weil es die Frage beantwortet (dh es ist nicht möglich). Könnten Sie bitte näher auf die "fest codierte ... auf einer niedrigeren Ebene" eingehen. Und obwohl die Problemumgehung genial ist, ist sie nicht wirklich praktikabel, da ich Escape in vielen anderen Terminalprogrammen verwende - daher der Wunsch, sie hier zu binden.
Jasonwryan
Ich habe meine Antwort mit weiteren Details bearbeitet. Ich bin überrascht, dass Sie Esc in anderen Programmen gebunden haben, da dies normalerweise nicht in Anwendungen der Fall ist, die ich aus dem in den obigen Kommentaren genannten Grund kenne.
Stéphane Chazelas
2

Es scheint mir eine wirklich schlechte Idee zu sein, auch die Flucht zu binden ControlG. Ich bin hierher gekommen, um nach einer Mutt-Lösung zu suchen, aber da es anscheinend keine gibt, werde ich eine Antwort von dem geben, was ich für jeden tue, der zufällig darüber stolpert. Es ist nicht optimal, wirkt sich jedoch nicht auf andere Programme aus:

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

oder

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

Die Verwendung von xdotool oder xsendkey zum Fälschen von control + g funktioniert und bringt die Flucht nicht überall durcheinander. Es gibt eine visuelle Verzögerung für mich, um den Zeileneditor zu verlassen, aber Indexbindungen funktionieren sofort und die visuelle Verzögerung verschwindet, sobald Sie eine Indexbindung verwenden. Die erste Eingabe ist notwendig, damit mutt nicht einfach "...." eingibt und daraus einen Header oder Suchbegriff oder so macht.

noctuid
quelle
0

Diese Lösung ist so schlecht, dass der Autor es vorgezogen hat, den Quellcode von Mutt zu bearbeiten, um ^ G loszuwerden

Warnung: Diese Lösung scheint nicht mit OSX, Emacs und anderen Anwendungen kompatibel zu sein, die Ctrl+ verwendenG

Nach meinem ersten Tag bei Mutt habe ich versehentlich fast ^ G in Vim verwendet ... Dann habe ich etwas ausprobiert, das hier zu funktionieren scheint, in i3 Window Manager und xfce-terminal .

Diese Zeile wurde hinzugefügt zu ~/.i3/config:

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

Musste verwenden, "\[Escape]\[Control]\[g]"weil es nur dazu führte, "\[Control]\[g]"dass es in Vim nicht mehr funktionierte.

Wenn Sie i3 nicht verwenden, können Sie xbindkeys verwenden, um auszuführen, xvkbd -xsendevent -text "\[Escape]\[Control]\[g]"wenn Escgedrückt wird.

Es ist keine schöne Lösung ... Es kann Ihren EscSchlüssel in einigen Programmen unbrauchbar machen , aber zumindest hier scheint es in Ordnung zu sein.

BEARBEITEN:

Ich sehe jetzt, dass der Ctrl+ GTeil Vim dazu bringt, die Position in der Datei anzuzeigen. Im Moment nichts zu dramatisch.

Dieser Link scheint eine bessere Lösung zu haben, aber für urxvt : http://www.unixli.com/q/answers-urxvt-map-esc-key-to-key-sequence-83211.html

jemand
quelle