การ Rebinding“ clear prompt” เป็น mutt


9

โดยค่าเริ่มต้นเมื่อป้อนข้อมูลที่พร้อมท์คำสั่งmuttคุณสามารถล้างข้อมูลพร้อมกับCtrlgตามที่อธิบายไว้ในคู่มือ :

^ G n / a ยกเลิก

Escapeผมได้พยายามที่จะผูกฟังก์ชันนี้เพื่อ แต่น่าเสียดายที่abortไม่ได้อยู่ในฟังก์ชั่นที่มีอยู่ทั้งในคู่มือหรือในแหล่งที่มา

ฉันได้ลองใช้สิ่งนี้ใน.muttrc:

ผูกเอดิเตอร์ <esc> ยกเลิก

แต่มันเกิดข้อผิดพลาด:

ข้อผิดพลาดใน /home/jason/.mutt/muttrc บรรทัด 143: ยกเลิก: ไม่มีฟังก์ชันดังกล่าวในแผนที่

ฉันได้ลองใช้แผนที่อื่นเช่น ( generic) และทดลองฟังก์ชั่นอื่น ๆ ที่เป็นตำนานเช่นclearเพื่อไม่เกิดประโยชน์

ฉันจะผูกมัดEscapeเพื่อล้างเส้นพรอมต์ได้อย่างไร


1
การหนีจากการผูกไม่ใช่ความคิดที่ดีเนื่องจากตัวหนี (ส่งเมื่อกดหลบหนี) เป็นคำนำหน้าสำหรับลำดับการหลบหลีกที่ส่งโดยปุ่มฟังก์ชั่นทั้งหมดเช่นลูกศรเดล F1 ...
Stéphane Chazelas

นั่นเป็นจุดที่ดีที่ฉันไม่ได้พิจารณา การทดสอบ Escape ต้องส่งสองครั้งเพื่อส่งตัวอักษร^[ดังนั้นมันอาจไม่ใช่ showstopper (ฉันไม่ได้ใช้การผูกใด ๆ ที่พึ่งพามันอยู่ดี)
jasonwryan

Esc, Escจะส่งตัวละครสองตัว ESC นอกจากนี้คุณยังสามารถกดEscหนึ่งครั้งและรอประมาณหนึ่งวินาที (การหมดเวลาเริ่มต้นรอให้ส่วนที่เหลือของลำดับการหลบหนี)
Stéphane Chazelas

ใช่. ครั้งแรกที่ฉันต้องทำงานออกวิธีการผูกมัน :)
jasonwryan

คำตอบ:


5

ไม่สามารถทำได้ด้วยการเชื่อมโยงคีย์ Ctrl-Gถูกฮาร์ดโค้ดใน mutt ที่ระดับต่ำกว่าการประมวลผลแมโครหรือการโยงคีย์ (ดูmutt_getch()ในซอร์สโค้ดของ mutt ที่แกนหลักของอินพุตทั้งหมดของผู้ใช้ใน mutt ที่ส่งคืนข้อผิดพลาดเมื่อ^G)

macro editor \e '^G'

จะไม่ทำงานเช่นกัน

สิ่งที่คุณสามารถทำได้คือกำหนดค่าเทอร์มินัลของคุณเพื่อส่ง^Gเมื่อกดEscape

ด้วย xterm:

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

หากคุณกำลังใช้screenงานคุณสามารถทำได้

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

ก่อนที่จะเรียก mutt และคืนค่าในภายหลัง (น่าเสียดายดูเหมือนว่าคุณไม่สามารถมีการเชื่อมโยงคีย์หน้าต่างหน้าจอต่อหน้าจอ) และจะเป็นปัญหาหากตัวแก้ไขข้อความอีเมลของคุณเป็น vi


เพิ่มขึ้น: เนื่องจากตอบคำถาม (เช่นไม่สามารถทำได้) คุณช่วยอธิบายเกี่ยวกับ "hardcoded ... ที่ระดับต่ำกว่า" ได้ไหม และในขณะที่วิธีแก้ปัญหานั้นฉลาด แต่ก็ไม่สามารถทำได้จริง ๆ เพราะฉันใช้ Escape ในโปรแกรมเทอร์มินัลอื่น ๆ - ดังนั้นความปรารถนาที่จะผูกมันไว้ที่นี่
jasonwryan

ฉันแก้ไขคำตอบของฉันพร้อมรายละเอียดเพิ่มเติมแล้ว ฉันประหลาดใจที่คุณมี Esc ที่ผูกพันในโปรแกรมอื่น ๆ เนื่องจากโดยปกติแล้วมันจะไม่ได้อยู่ในแอปพลิเคชันที่ฉันรู้เพราะเหตุผลที่กล่าวถึงในความคิดเห็นด้านบน
Stéphane Chazelas

2

ดูเหมือนว่าเป็นความคิดที่ไม่ดีจริงๆกับผมที่จะหลบหนีผูกไว้กับControlGยัง ฉันมาที่นี่เพื่อหาวิธีแก้ปัญหา mutt แต่เนื่องจากดูเหมือนว่าไม่มีฉันจะให้คำตอบจากสิ่งที่ฉันทำเพื่อใครก็ตามที่บังเอิญเจอสิ่งนี้ มันไม่เหมาะสม แต่จะไม่ส่งผลกระทบต่อโปรแกรมอื่น ๆ :

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

หรือ

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

การใช้บางอย่างเช่น xdotool หรือ xsendkey เพื่อการควบคุมปลอม + g ทำงานได้และไม่สับสนกับการหลบหนีจากที่อื่น มีความล่าช้าในการมองเห็นสำหรับฉันที่จะออกจากตัวแก้ไขบรรทัด แต่การโยงดัชนีจะทำงานได้ทันทีและความล่าช้าในการมองเห็นจะหายไปทันทีที่คุณใช้การเชื่อมดัชนี การป้อนครั้งแรกเป็นสิ่งที่จำเป็นเพื่อให้ mutt ไม่เพียงแค่พิมพ์ "... " และทำให้เป็นส่วนหัวหรือคำค้นหาหรือบางสิ่งบางอย่าง


0

วิธีการแก้ปัญหานี้แย่มากที่ผู้เขียนต้องการแก้ไขซอร์สโค้ดของมุทท์เพื่อกำจัด ^ G

คำเตือน: วิธีนี้ดูเหมือนจะไม่เข้ากันกับ OSX, Emacs และแอปพลิเคชันอื่น ๆ ที่ใช้Ctrl+G

หลังจากวันแรกของฉันที่โง่ผมก็เกือบจะใช้ ^ G ในกลุ่มโดยไม่ได้ตั้งใจ ... แล้วฉันพยายามบางสิ่งบางอย่างที่ดูเหมือนว่าจะทำงานที่นี่ในจัดการหน้าต่าง i3และXfce ขั้ว

เพิ่มบรรทัดนี้ไปที่~/.i3/config:

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

ต้องใช้"\[Escape]\[Control]\[g]"เพราะ"\[Control]\[g]"ทำให้หยุดทำงานเป็นกลุ่มเท่านั้น

หากคุณไม่ได้ใช้ i3 ฉันคิดว่าคุณสามารถใช้xbindkeysเพื่อทำงานxvkbd -xsendevent -text "\[Escape]\[Control]\[g]"เมื่อEscกด

มันไม่ใช่โซลูชันที่สวยงาม ... มันสามารถทำให้Escคีย์ของคุณใช้ไม่ได้ในบางโปรแกรม แต่อย่างน้อยที่นี่ดูเหมือนว่าใช้ได้

แก้ไข:

ฉันเห็นแล้วว่าส่วนCtrl+ Gทำให้ Vim แสดงตำแหน่งในไฟล์ ไม่มีอะไรน่าตื่นเต้นเกินไปสำหรับตอนนี้

ลิงก์นี้ดูเหมือนจะมีทางออกที่ดีกว่า แต่สำหรับurxvt : http://www.unixli.com/q/answers-urxvt-map-esc-key-to-key-sequence-83211.html

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.