Memutar ulang "hapus prompt" di mutt

9

Secara default, saat memasukkan informasi pada command prompt mutt, Anda dapat menghapus prompt dengan Ctrlg, seperti yang dijelaskan dalam manual :

^ G n / a batalkan

Saya telah mencoba untuk mengikat fungsi ini Escape. Sayangnya, aborttidak tercantum dalam fungsi yang tersedia, baik di manual , atau di sumbernya .

Saya sudah mencoba menggunakan ini di .muttrc:

bind editor <esc> batalkan

tapi ada kesalahan:

Kesalahan pada /home/jason/.mutt/muttrc, baris 143: batalkan: tidak ada fungsi seperti itu di peta

Saya telah mencoba menggunakan peta yang berbeda, seperti ( generic) dan bereksperimen dengan fungsi fiktif lainnya, seperti clear, tetapi tidak berhasil.

Bagaimana saya mengikat Escapeuntuk menghapus baris prompt?

jasonwryan
sumber
1
Binding escape bukan ide yang baik karena karakter escape (dikirim setelah menekan escape) juga merupakan awalan untuk urutan escape yang dikirim oleh semua tombol fungsi seperti panah, del, F1 ...
Stéphane Chazelas
Itu poin bagus yang belum saya pertimbangkan. Mengujinya, Escape perlu dikirim dua kali untuk mengirim literal ^[sehingga mungkin bukan showstopper (toh saya tidak menggunakan ikatan apa pun yang mengandalkannya).
jasonwryan
Esc, Escakan mengirim dua karakter ESC. Anda juga dapat menekan Escsekali dan menunggu sekitar satu detik (batas waktu default menunggu sisa urutan pelarian).
Stéphane Chazelas
Iya. Pertama, saya harus mencari cara untuk mengikatnya :)
jasonwryan

Jawaban:

5

Tidak mungkin dengan binding utama. Ctrl-Ghardcoded di mutt pada tingkat yang lebih rendah daripada pemrosesan makro atau keybinding (lihat mutt_getch()di kode sumber mutt, pada inti dari semua input pengguna di mutt yang mengembalikan kesalahan setelah ^G).

macro editor \e '^G'

juga tidak akan bekerja.

Yang dapat Anda lakukan adalah mengonfigurasi terminal Anda untuk dikirim ^Gsetelah menekanEscape

Dengan xterm:

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

Jika Anda menggunakan screen, Anda juga bisa melakukannya

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

sebelum memanggil mutt dan mengembalikannya setelah itu (sayangnya, sepertinya Anda tidak dapat memiliki binding jendela kunci per layar di layar). Juga, itu akan menjadi masalah jika editor Anda untuk pesan email vi.

Stéphane Chazelas
sumber
Terpilih: karena menjawab pertanyaan (mis., Itu tidak mungkin). Bisakah Anda jelaskan pada "hardcoded ... at a lower level". Dan meskipun solusinya cerdik, itu tidak benar-benar dapat dilakukan karena saya menggunakan Escape di banyak program terminal lainnya - karenanya keinginan untuk mengikatnya di sini.
jasonwryan
Saya telah mengedit jawaban saya dengan lebih detail. Saya terkejut Anda memiliki Esc terikat pada program lain karena biasanya tidak dalam aplikasi yang saya tahu karena alasan yang disebutkan dalam komentar di atas.
Stéphane Chazelas
2

Sepertinya ide yang sangat buruk bagi saya untuk mengikat ControlGjuga. Saya datang ke sini mencari solusi mutt, tetapi karena sepertinya tidak ada, saya akan memberikan jawaban dari apa yang saya lakukan untuk siapa saja yang kebetulan menemukan ini. Ini tidak optimal tetapi tidak akan memengaruhi program lain:

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

atau

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

Menggunakan sesuatu seperti xdotool atau xsendkey untuk kontrol palsu + g bekerja dan tidak mengacaukan jalan keluar di tempat lain. Ada penundaan visual bagi saya untuk keluar dari editor baris, tetapi pengikatan indeks akan segera bekerja dan penundaan visual akan hilang segera setelah Anda menggunakan pengikatan indeks. Entri pertama diperlukan agar mutt tidak hanya mengetikkan "...." dan membuatnya menjadi header atau istilah pencarian atau sesuatu.

noctuid
sumber
0

Solusi ini sangat buruk sehingga penulis lebih memilih untuk mengedit kode sumber Mutt untuk menyingkirkan ^ G

Peringatan: Solusi ini tampaknya tidak sesuai dengan OSX, Emacs dan aplikasi lain yang menggunakan Ctrl+G

Setelah hari pertama saya di Mutt, saya hampir tidak sengaja menggunakan ^ G di Vim ... Kemudian saya mencoba sesuatu yang sepertinya berfungsi di sini, di i3 window manager dan xfce-terminal .

Menambahkan baris ini ke ~/.i3/config:

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

Harus digunakan "\[Escape]\[Control]\[g]"karena hanya "\[Control]\[g]"membuatnya berhenti bekerja di Vim.

Jika Anda tidak menggunakan i3, saya pikir Anda dapat menggunakan xbindkeys untuk dijalankan xvkbd -xsendevent -text "\[Escape]\[Control]\[g]"saat Escditekan.

Ini bukan solusi yang indah ... Ini dapat membuat Esckunci Anda tidak dapat digunakan dalam beberapa program, tetapi setidaknya di sini tampaknya ok.

EDIT:

Saya melihat sekarang bahwa bagian Ctrl+ Gmembuat Vim menunjukkan posisi dalam file. Tidak ada yang terlalu dramatis, untuk saat ini.

Tautan ini tampaknya memiliki solusi yang lebih baik, tetapi untuk urxvt : http://www.unixli.com/q/answers-urxvt-map-esc-key-to-key- berikutnyaence - 83211.html

some one
sumber