Ricollegare "clear prompt" in mutt


9

Per impostazione predefinita, quando si immettono informazioni al prompt dei comandi in mutt, è possibile deselezionare il prompt con Ctrlg, come descritto nel manuale :

^ G n / a interrompere

Ho cercato di associare questa funzione a Escape. Sfortunatamente, abortnon è elencato nelle funzioni disponibili, né nel manuale , né nella fonte .

Ho provato a usare questo nel mio .muttrc:

bind editor <esc> abort

ma genera un errore:

Errore in /home/jason/.mutt/muttrc, riga 143: abort: nessuna di queste funzioni nella mappa

Ho provato a usare una mappa diversa, come ( generic) e ho sperimentato altre funzioni fittizie, come clear, senza alcun risultato.

Come mi legherei Escapeper cancellare la riga di prompt?


1
Binding escape non è una buona idea in quanto il personaggio escape (inviato dopo aver premuto escape) è anche il prefisso per le sequenze di escape inviate da tutti i tasti funzione come frecce, del, F1 ...
Stéphane Chazelas,

Questo è un buon punto che non avevo considerato. Provandolo, Escape deve essere inviato due volte per inviare un valore letterale, ^[quindi potrebbe non essere uno showtopper (non utilizzo alcun vincolo che faccia comunque affidamento su di esso).
Jasonwryan,

Esc, Escinvierebbe due caratteri ESC. Puoi anche premere Escuna volta e attendere circa un secondo (il timeout predefinito in attesa del resto di una sequenza di escape).
Stéphane Chazelas,

Sì. Per prima cosa devo capire come legarlo :)
Jasonwryan,

Risposte:


5

Non è possibile con le associazioni dei tasti. Ctrl-Gè codificato in mutt a un livello inferiore rispetto alla macro o all'elaborazione keybinding (vedi mutt_getch()nel codice sorgente di mutt, al centro di tutto l'input dell'utente in mutt che restituisce un errore ^G).

macro editor \e '^G'

non funzionerebbe neanche.

Quello che puoi fare è configurare il tuo terminale per l'invio ^Gdopo aver premutoEscape

Con xterm:

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

Se stai usando screen, puoi anche farlo

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

prima di chiamare mutt e ripristinarlo in seguito (sfortunatamente, non sembra che si possano avere associazioni di tasti per finestra sullo schermo). Inoltre, sarà un problema se l'editor per i messaggi di posta elettronica è vi.


Votato: perché risponde alla domanda (es. Non è possibile). Potresti per favore approfondire il "hardcoded ... a un livello inferiore". E mentre la soluzione alternativa è geniale, non è realmente praticabile poiché utilizzo Escape in molti altri programmi terminali - da qui il desiderio di vincolarlo qui.
Jasonwryan,

Ho modificato la mia risposta con maggiori dettagli. Sono sorpreso che abbiate Esc associato ad altri programmi poiché di solito non lo è nelle applicazioni che conosco per il motivo menzionato nei commenti sopra.
Stéphane Chazelas,

2

Sembra davvero una cattiva idea per me di fuga si legano a ControlGanche. Sono venuto qui alla ricerca di una soluzione mutt, ma poiché sembra che non ce ne sia, darò una risposta da quello che sto facendo per chiunque capiti di imbattersi in questo. Non è ottimale ma non influirà su nessun altro programma:

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

o

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

Usare qualcosa come xdotool o xsendkey per simulare il controllo + g funziona e non confonde la fuga ovunque. C'è un ritardo visivo per me nell'uscita dall'editor di linea, ma i collegamenti all'indice funzioneranno immediatamente e il ritardo visivo scomparirà non appena si utilizza un collegamento all'indice. Il primo invio è necessario in modo che mutt non scriva semplicemente "...." e lo trasformi in un'intestazione o un termine di ricerca o qualcosa del genere.


0

Questa soluzione è così negativa che l'autore ha preferito modificare il codice sorgente di Mutt per sbarazzarsi di ^ G

Avvertenza: questa soluzione sembra incompatibile con OSX, Emacs e altre applicazioni che usano Ctrl+G

Dopo il mio primo giorno a Mutt, stavo quasi usando ^ G in Vim per errore ... Poi ho provato qualcosa che sembra funzionare qui, in i3 Window Manager e XFCE-Terminal .

Aggiunta questa riga a ~/.i3/config:

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

Ho dovuto usare "\[Escape]\[Control]\[g]"perché ha solo "\[Control]\[g]"smesso di funzionare in Vim.

Se non stai usando i3, penso che puoi usare xbindkey per eseguire xvkbd -xsendevent -text "\[Escape]\[Control]\[g]"quando Escviene premuto.

Non è una bella soluzione ... Può rendere la Escchiave inutilizzabile in alcuni programmi, ma almeno qui sembra ok.

MODIFICARE:

Vedo ora che la parte Ctrl+ Grende Vim mostra la posizione nel file. Niente di troppo drammatico, per ora.

Questo link sembra avere una soluzione migliore, ma per urxvt : http://www.unixli.com/q/answers-urxvt-map-esc-key-to-key-sequence-83211.html

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.