แถบสถานะ tmux เกิดความเสียหายหลังจากทำการส่งไบนารี่ไฟล์วิธีการรีเซ็ต


94

ฉันเผลอเทอร์มินัล tmux ของฉันหลังจากที่ได้catรับไฟล์ไบนารี ตอนนี้ฉันtmuxสับสน การแยกออกและการติดใหม่ไม่ได้ช่วยอะไรและไม่ได้วาดใหม่ (Cb r) การทำงานresetจะวาดเฉพาะบานหน้าต่างที่ใช้งานอยู่เท่านั้นไม่ใช่การพักผ่อน การทำงานssty saneทั้งในและนอกtmuxไม่ช่วยอะไรเลย

tmux เลอะ

ภายในแต่ละบานหน้าต่างฉันมีข้อเสนอแนะปกติจากสิ่งที่ฉันพิมพ์ (การโทรเริ่มต้นresetทันทีหลังจากที่เทอร์มินัลได้รับการแก้ไขปัญหานี้) แต่ฉันไม่สามารถแก้ไขแถบสถานะได้

ในgnome-terminalทุกการอัพเดทของแถบสถานะจะนำไปสู่แถบสถานะที่จะเติบโต (ดูภาพหน้าจอด้านบน) ตัวอย่างเช่นสิ่งนี้เกิดขึ้นเมื่อฉันเรียกใช้แอปพลิเคชันใหม่เมื่อฉันสลับบานหน้าต่างหรือเมื่อฉันปรับขนาดบานหน้าต่าง การบังคับให้วาดใหม่ (โดยC-b r, โดยการเรียกใช้resetหรือผ่านเมนู gnome-terminal) ลดขนาดแถบสถานะกลับไปเป็นบรรทัดเดียว แต่กลับยังคงเสียหาย

ในxtermแถบสถานะจะยังคงอยู่ภายในหนึ่งบรรทัด แต่มันยังคงเสียหายตามภาพ

ฉันใช้ tmux 1.5

  • ฉันจะแก้ไขtmux-terminal ได้อย่างไร

รายงานข้อผิดพลาดนี้จากปี 2008 ดูเหมือนจะอธิบายปัญหาเดียวกัน แต่ถูกทำเครื่องหมายว่าแก้ไขแล้ว ฉันไม่ทราบว่าเป็นเวอร์ชันใดที่ได้รับการแก้ไข แต่ tmux 1.5 ควรมีการแก้ไขตั้งแต่ปี 2008


เพิ่งมีปัญหานี้และ "ชัดเจน" เหมาะกับฉัน
user149818

1
ในกรณีที่บางคนพบปัญหาเดียวกันหลังจากทำตามข้างต้นทั้งหมดแถบสถานะ tmux ของฉันยังคงสับสนอยู่ การตั้งค่าสถานะของตัวเลือกหน้าต่างจะถูกซ่อมแซม

2
ข้อเสนอแนะข้างต้นแก้ไขสำหรับฉันด้วย คำสั่งที่ต้องทำคือ: Control+ b+ :จากนั้นset -g status-right "#H"ให้ตั้งค่าสถานะที่ถูกต้องเป็นชื่อโฮสต์
Mayank

คำตอบ:


85

ลองเปลี่ยนชื่อหน้าต่าง 4

  • สลับไปที่หน้าต่าง 4: Control+b 4
  • เปลี่ยนชื่อหน้าต่าง: Control+ b , Control+ umyNewname

(นั่นคือจุลภาคตรงกลาง)

หรือ: Control+b :rename-window myNewname


1
การเปลี่ยนชื่อหน้าต่างจะใช้งานได้อย่างมีเสน่ห์
exhuma

4
คุณต้องล้างชื่อก่อนพิมพ์ชื่อใหม่ วิธีที่ง่ายที่สุดคือด้วยctrl+uดังนั้นลำดับเต็มคือctrl+b , ctrl+u newname
z0r

1
หวานดี - ใช้ได้byobuกับ ( f8, <newname>)
ali_m

ทำไมถึงControl-uจำเป็น? Control-,เปลี่ยนชื่อแล้วใช่ไหม แม้ว่าฉันสามารถยืนยันได้ว่ามันเป็นสิ่งจำเป็นในกรณีของฉันมันเป็นตัวละครรีเซ็ตบางชนิด?
hbogert

1
Control-u จะลบบรรทัด หากคุณ fatfinger ทุกรหัสผ่านของคุณใน terminal และรู้ว่าคุณสามารถล้างรายการโดยใช้ control-u แทนการกดปุ่ม backspace 20 ครั้ง
Rqomey

55

คุณต้องมีสองชุดคำสั่งเพื่อทำความสะอาด:

ก่อนอื่นให้เรียกใช้สิ่งนี้ในหน้าต่างที่อ่านไม่ออก (ใช้งานได้แม้ในขณะที่คุณอยู่ssh):

stty sane; printf '\033k%s\033\\\033]2;%s\007' "`basename "$SHELL"`" "`uname -n`"; tput reset; tmux refresh

จากนั้นเรียกใช้งานบนคอมพิวเตอร์ที่ทำงานtmux(ทำงานได้ทั้งภายในและภายนอกtmux):

คำสั่งต่อไปนี้มีผลกับทุกtmuxอินสแตนซ์ซึ่งอาจเปลี่ยนสถานะด้านซ้ายของมากกว่าหน้าต่างปัจจุบัน หากคุณไม่ต้องการฟีเจอร์นั้นให้ทิ้งมันไว้

tmux list-windows -a | while IFS=: read -r a b c; do tmux set-window-option -t "$a:$b" automatic-rename on; done

อธิบายรายละเอียด

สิ่งนี้ถูกประกอบขึ้นเพื่อจัดการกับบิตทั้งหมดที่พบในคำตอบและความคิดเห็นอื่น ๆ ดูเหมือนว่าในขณะนี้จะมีเพียงเล็กน้อยที่เหลืออยู่กับคำสั่งที่สอง (ดูใน "บิตที่หายไป" ด้านล่าง)

เพื่อให้เข้าใจถึงวิธีการทำงานนี้ให้เราก่อนฆ่าบรรทัดสถานะของและtmux ttyหลังจากนั้นเราแก้ไขให้ถูกต้องอีกครั้งโดยใช้วิธีที่ควรจะมีอยู่เสมอ (ต่างจากคำสั่งreset)

วิธีทำให้tmuxเทอร์มินัล (ถือว่าUTF-8) ใช้งานไม่ได้

stty -echo; printf '\016\033k%2000s\\\033\033]2;\355\007' $'\302\217'

คำเตือน:หลังจากรันคำสั่งข้างต้นเชลล์จะตาบอดและหูหนวกและดูเหมือนจะพูดพล่ามในภาษาต่างประเทศที่ไม่รู้จัก ดูด้านล่างเกี่ยวกับวิธีการซ่อมแซมนี้

อธิบาย:

  • stty -echo ฆ่าการตอบสนองประเภทอาคารผู้โดยสาร

  • printf '\016'ทำ a SOดังนั้นคุณอยู่ในชุดอักขระสำรอง

  • printf '\033]2;%s\007' 'right status text'กำหนดสถานะที่ถูกต้องในกรณีนี้$'\355'ซึ่งแสดงข้อผิดพลาดในการนำเสนอ

  • printf '\033k%2000s\033\\' $'\302\217' ตั้งชื่อชื่อหน้าต่าง

นี่อาจเป็นการรวมกันที่คุณสามารถเห็นได้บนเทอร์มินัลหลังจากที่คำสั่งแบบโต้ตอบล้มเหลวและตกลงไปในเชลล์ (ด้วย/bin/catคุณไม่สามารถกระตุ้นstty -echoIMHO ได้ แต่คำสั่งแบบโต้ตอบเช่นvimปกติตั้งค่านี้)

ตอนนี้ทำความสะอาดระเบียบนี้

stty sane; printf '\033k%s\033\\\033]2;%s\007' "$(basename "$SHELL")" "$(uname -n)"; tput reset; tmux refresh

หมายเหตุ:หากคุณใช้การคัดลอกและวาง (คุณอาจต้องค้างShiftในขณะที่การวาง) ttyคุณอาจจะไม่เห็นวางของคุณถ้าคุณได้ใช้คำสั่งดังกล่าวจะเลอะกับ ดังนั้นเพียงแค่กดปุ่ม Enter หลังจากสุ่มวาง

อธิบาย:

  • stty sane ตั้งค่าพารามิเตอร์เทอร์มินัล "สติ" ดังนั้นคุณจะได้รับเสียงสะท้อนกลับในขณะที่พิมพ์

  • printf '\033k%s\033\\' "$(basename "$SHELL")"ตั้งชื่อหน้าต่างกลับเป็นปกติ คุณสามารถใช้tmux rename-window "$(basename "$SHELL")"อีกทางหนึ่งได้ แต่tmux rename-windowจะ จำกัด เฉพาะtmuxตำแหน่งที่ escape sequence ทำงานอยู่เสมอ

  • printf '\033]2;%s\007' "$(uname -n)"รีเซ็ตสถานะขวาเพื่อแสดงเป็นค่าเริ่มต้น (โปรดทราบว่าคุณไม่ควรใช้tmux set status-right "something"เพราะเพียงแค่แสดงผลpane titleที่ได้รับความเสียหายดังนั้นstatus-rightเพียงแค่แสดงข้อผิดพลาดการนำเสนอบางอย่างนอกจากนี้โปรดทราบว่าฉันไม่พบtmuxคำสั่งเพื่อตั้งชื่อบานหน้าต่างโดยตรง)

  • tput reset รีเซ็ตเทอร์มินัลในกรณีที่สิ่งนี้เกิดความสับสน

  • tmux refresh รีเฟรชหน้าจอเพื่อกำจัดขยะอื่น ๆ ที่อาจปรากฏขึ้น

ไม่มีบิต

การprintf '\033k%s\033\\' "$(basename "$SHELL")"สูญเสียความสามารถมาตรฐานของtmuxการแสดงคำสั่งปัจจุบันในพื้นที่สถานะด้านซ้าย หลังจากprintf '\033k%s\033\\' "something"ถูกประหารความสามารถนี้จะหายไปและฉันไม่พบวิธีที่ดี แต่จะนำมันกลับมาเหมือนเดิมได้อย่างไร

แต่ดังที่ระบุไว้ในความคิดเห็นด้านล่างคุณสามารถเปิดใช้งานคุณสมบัติที่คล้ายกันtmuxแทนโดยใช้tmuxการตั้งค่าต่อไปนี้:

set-window-option automatic-rename on
  • ทำสิ่งนี้ในtmuxบรรทัดคำสั่งซึ่งสามารถเข้าถึงได้ในหน้าต่างปัจจุบันด้วย "Escape" :(โดยที่ "Escape" เป็นtmuxคีย์คำสั่งของคุณ) จากนั้นป้อนคำสั่ง

  • หรือ excute tmux set-window-option automatic-rename onใน terminal ปัจจุบันของคุณ แต่นี้ล้มเหลวในกรณีที่คุณไม่ได้โดยตรงในระดับเปลือกที่เหมาะสมตัวอย่างเช่นมันไม่ทำงานภายในหรือsudossh

  • หรือเปิดหน้าต่างอื่นในtmuxเซสชันปัจจุบันและดำเนินการคำสั่งต่อไปนี้:

    for a in `tmux list-windows | sed 's/:.*//'; do tmux set-window-option -t "$a" automatic-rename on; done`
  • หรือเปิดเชลล์อื่นไปยังคอมพิวเตอร์ที่ใช้งานtmuxและรันคำสั่งต่อไปนี้ (นี่อยู่นอก tmux):

    tmux list-windows -a | while IFS=: read -r a b c; do tmux set-window-option -t "$a:$b" automatic-rename on; done

PS: ขอบคุณทุกคนที่ช่วยกันแก้ปัญหานี้


2
โปรดทราบแทน uname -n มีอันตรายในบริบทเนื่องจากคุณอาจเปลี่ยนชื่อโฮสต์ของคุณเป็นรุ่นพี่ Linux / Unix ที่ไม่มีตัวเลือก grok hostname -shostnameroot-shostname
Tino

การไม่รีเซ็ตชื่อบานหน้าต่างทำให้ฉันเสียใจด้วย นั่นคือสาเหตุที่ฉันอยู่ที่นี่ตั้งแต่แรก ขอขอบคุณที่เป็นคนเดียวในหน้าเว็บที่อย่างน้อยก็ยอมรับว่ามีข้อบกพร่อง!
EvanED

2
พิจารณาด้วย "tmux setw Automatic-rename" หลังจากแก้ไขชื่อหน้าต่าง
EB

stty saneส่วนช่วยให้ฉันเมื่อขั้วของฉันถูกเมาขึ้นและไม่ได้แสดงอะไร ขอขอบคุณ!
johnny

ถ้าคุณต้องการ "บิตหายไป" set-window-option automatic-renameคือคำสั่งที่ทำงานอยู่ในปัจจุบันที่ปรากฏในพื้นที่แสดงสถานะทางซ้ายคุณสามารถใช้คำสั่ง
David Foerster

26

ปัญหาเฉพาะที่คุณเห็นเกี่ยวข้องกับชื่อ / ชื่อเรื่องของหน้าต่าง 4 การรวมกันของการยาวเกินไป (ชัด) และมีอักขระที่แปลกซึ่งทำให้ tmux วัดว่าสั้นลง (ดังนั้นจึงไม่สามารถ จำกัด แถบสถานะได้อย่างถูกต้อง ความกว้างของหน้าจอ) ฉันไม่แน่ใจว่าจะรีเซ็ตมันได้อย่างไร (ในขณะที่ฉันติดตามชื่อของกระบวนการพื้นหน้า) คุณอาจต้องปิดหน้าต่าง


4
ค่าเริ่มต้นในการเปลี่ยนชื่อหน้าต่างคือ^b - ,
Rob

8
กรณีแป้นพิมพ์ลัดในการแสดงความคิดเห็น @ ร็อบคุณสับสนมันCtrl- แล้วb ,
Doug Paul

โปรดทราบว่าเมื่อคุณเปลี่ยนชื่อหน้าต่างเขตข้อมูลจะถูกเติมไว้ล่วงหน้าด้วยชื่อหน้าต่างปัจจุบัน (และเคอร์เซอร์ของคุณจะอยู่ที่ท้ายชื่อนั้น) เนื่องจากชื่อหน้าต่างของฉันเป็นลำดับขยะยาวฉันต้องกดค้างไว้Backspaceหนึ่งนาทีเพื่อล้างชื่อปัจจุบัน สำหรับฉันในที่สุดความเห็นย้อนกลับทำให้ชัดเจนว่าชื่อเก่าทั้งหมดได้ถูกลบไปแล้ว
Doug Paul

นอกจากนี้คุณยังสามารถใช้Ctrl-b :เปลี่ยนชื่อหน้าต่าง <ชื่อไปที่นี่>; สิ่งนี้ใช้ระบบคำสั่ง tmux แทนแป้นพิมพ์ลัดสำหรับคำสั่งนั้น
Abbafei


5
tmux set-option -g status off && tmux set-option -g status on 

แก้ไขสิ่งนี้ให้ฉันเมื่อมีสิ่งอื่นนอกเหนือจากชื่อหน้าต่างเสียหายและฉันไม่สามารถทราบได้ว่ามันคืออะไร


2

tmuxอาจเป็นเพียงส่วนหนึ่งของปัญหา คุณอาจต้องเรียกใช้stty saneที่บรรทัดคำสั่ง สิ่งนี้จะรีเซ็ตไดรเวอร์ TTY ในเคอร์เนลเป็นค่าเริ่มต้นบางชุดซึ่งโดยปกติจะอนุญาตให้คุณดำเนินการต่อ หากไดรเวอร์ TTY เกิดความผิดพลาดมากพอคุณอาจต้องพิมพ์stty sane"blind" นั่นคือโดยไม่มีข้อเสนอแนะบนหน้าจอ


stty saneไม่ได้แก้ปัญหาเช่นกัน ฉันมีข้อเสนอแนะบนหน้าจอภายในแต่ละtmuxบานหน้าต่างฉันสามารถพิมพ์และมีข้อเสนอแนะตามปกติ แต่ทันทีที่ tmux จำเป็นต้องวาดบางสิ่ง (เช่นการเรียกใช้แอปพลิเคชันใหม่สลับหรือปรับขนาดบานหน้าต่าง) แถบสถานะจะย้ายเข้าไปในบานหน้าต่าง ...
gerrit


-3

เพื่อแก้ไขปัญหาสำหรับฉัน:

ฉันเพิ่งฆ่าบานหน้าต่างปัญหาและสร้างหน้าต่างและบานหน้าต่างใหม่

ในบานหน้าต่างด้านปัญหาCTRL+ AXและ+CTRLAC


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