Ponowne łączenie „wyczyść monit” w mutt


9

Domyślnie, wprowadzając informacje w wierszu polecenia w mutt, możesz wyczyścić monit za pomocą Ctrlg, jak opisano w instrukcji :

^ G n / d przerwać

Próbowałem powiązać tę funkcję Escape. Niestety abortnie jest wymieniony w dostępnych funkcjach, ani w instrukcji , ani w źródle .

Próbowałem użyć tego w moim .muttrc:

edytor powiązań <esc> przerwał

ale generuje błąd:

Błąd w /home/jason/.mutt/muttrc, wiersz 143: przerwanie: brak takiej funkcji na mapie

Próbowałem użyć innej mapy, na przykład ( generic), i eksperymentowałem z innymi fikcyjnymi funkcjami, na przykład clearbezskutecznie.

Jak powiązać, Escapeaby wyczyścić wiersz zachęty?


1
Wiązanie ucieczki nie jest dobrym pomysłem, ponieważ znak ucieczki (wysyłany po naciśnięciu klawisza Escape) jest także prefiksem sekwencji ucieczki wysyłanych przez wszystkie klawisze funkcyjne, takie jak strzałki, del, F1 ...
— Stéphane Chazelas

To dobry punkt, którego nie wziąłem pod uwagę. Testując, Escape musi zostać wysłany dwa razy, aby wysłać literał, ^[więc może nie być showstopperem (i tak nie używam żadnych powiązań, które na nim polegają).
— jasonwryan

Esc, Escwyśle ​​dwa znaki ESC. Możesz także nacisnąć Escraz i poczekać około jednej sekundy (domyślny limit czasu oczekiwania na resztę sekwencji ucieczki).
— Stéphane Chazelas,

Tak. Najpierw muszę wymyślić, jak to powiązać :)
— jasonwryan,

Odpowiedzi:


5

Nie jest to możliwe z powiązaniami klawiszy. Ctrl-Gjest zakodowany na stałe w mutcie na poziomie niższym niż przetwarzanie makr lub kluczowanie (patrz mutt_getch()w kodzie źródłowym mutta, w rdzeniu wszystkich danych wejściowych użytkownika w mutcie, które zwracają błąd po ^G).

macro editor \e '^G'

też by nie działał.

Co możesz zrobić, to skonfigurować terminal do wysyłania ^Gpo naciśnięciuEscape

Z Xterm:

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

Jeśli używasz screen, możesz to zrobić

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

przed wywołaniem mutta i przywróceniem go później (niestety nie wydaje się, aby można było przypisać do niego przypisania klawiszy na ekranie okna). Będzie to również problem, jeśli edytorem wiadomości e-mail jest vi.


Upvoted: ponieważ odpowiada na pytanie (tzn. Nie jest możliwe). Czy mógłbyś rozwinąć „zakodowane ... na niższym poziomie”. I chociaż obejście jest genialne, nie jest tak naprawdę wykonalne, ponieważ używam Escape w wielu innych programach terminalowych - stąd chęć powiązania go tutaj.
— jasonwryan

Zredagowałem swoją odpowiedź, podając więcej szczegółów. Dziwi mnie, że Esc jest związany z innymi programami, ponieważ zwykle nie ma go w aplikacjach, które znam z powodów wymienionych w komentarzach powyżej.
— Stéphane Chazelas,

2

Wydaje mi się, że naprawdę złym pomysłem jest powiązanie ucieczki ControlG. Przybyłem tutaj, szukając kundla, ale ponieważ wydaje się, że nie ma takiego, dam odpowiedź z tego, co robię dla każdego, kto natknie się na to. Nie jest optymalny, ale nie wpłynie na żadne inne programy:

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

lub

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

Używanie czegoś takiego jak xdotool lub xsendkey do fałszywego control + g działa i nie psuje ucieczki wszędzie indziej. Jest dla mnie wizualne opóźnienie wyjścia z edytora linii, ale powiązania indeksu będą działać natychmiast, a wizualne opóźnienie zniknie, gdy tylko użyjesz powiązania indeksu. Pierwsze wejście jest konieczne, aby mutt nie wpisał po prostu „....” i przekształcił go w nagłówek, wyszukiwane hasło lub coś w tym rodzaju.


0

To rozwiązanie jest tak złe, że autor wolał edytować kod źródłowy Mutt, aby pozbyć się ^ G

Ostrzeżenie: To rozwiązanie wydaje się niezgodne z OSX, Emacsem i innymi aplikacjami używającymi Ctrl+G

Po pierwszym dniu w Mutt prawie przez pomyłkę prawie użyłem ^ G w Vimie ... Potem spróbowałem czegoś, co wydaje się działać tutaj, w menedżerze okien i3 i terminalu xfce .

Dodano tę linię do ~/.i3/config:

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

Musiałem użyć, "\[Escape]\[Control]\[g]"ponieważ tylko "\[Control]\[g]"przestał działać w Vimie.

Jeśli nie używasz i3, myślę, że możesz użyć xbindkeys do uruchomienia xvkbd -xsendevent -text "\[Escape]\[Control]\[g]"po Escnaciśnięciu.

To nie jest piękne rozwiązanie ... Może sprawić, że twój Escklucz będzie bezużyteczny w niektórych programach, ale przynajmniej tutaj wydaje się być w porządku.

EDYTOWAĆ:

Widzę teraz, że część Ctrl+ Gsprawia, że ​​Vim pokazuje pozycję w pliku. Na razie nic dramatycznego.

Ten link wydaje się mieć lepsze rozwiązanie, ale dla urxvt : http://www.unixli.com/q/answers-urxvt-map-esc-key-to-key-sequence-83211.html

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.