จะรีเซ็ตเทอร์มินัลอีมูเลเตอร์จาก tmux ได้อย่างไร?


1

ฉันต้องการ "ล้าง" บานหน้าต่าง tmux อย่างสมบูรณ์ เมื่อฉันทำสิ่งที่ชอบ

bind-key C send-keys "clear && tmux clear-history" \; send-keys "Enter" 

แนะนำใน https://stackoverflow.com/questions/10543684/how-can-i-clear-scrollback-buffer-in-tmuxฉันสามารถล้างบัฟเฟอร์เลื่อนและรับหน้าจอที่สะอาด

อย่างไรก็ตามเมื่อฉันทำ Shift + PageUp และ Shift + PageDown ฉันสามารถดูผลลัพธ์ก่อนหน้าจากเทอร์มินัลอีมูเลเตอร์ (ไม่ใช่ tmux) โดยปกติคุณสามารถทำresetคำสั่งเพื่อล้างประวัติการเลื่อนของเทอร์มินัลอีมูเลเตอร์

เป็นไปได้resetหรือไม่ที่ Terminal Emulator จาก tmux พร้อมกับ scrollback ด้านบนชัดเจน?

วิธีแก้ไขปัญหาสองข้อแนะนำคือ:

1) เพื่อรักษาUrxvt.saveLines: 0หรือเริ่มUrxvt -sl 0- นี่เป็นตรรกะเพราะคุณไม่ต้องการเลื่อนของ Terminal Emulator ถ้าคุณอยู่ใน tmux

2) ถอด, รีเซ็ตและแนบ tmux อีกครั้ง - ดูเหมือนว่าจะยุ่งยาก


คำตอบ:


1

สิ่งที่คุณต้องการคือprintf "\033c" > $client_ttyที่$client_ttyเป็น TTY ว่าลูกค้า tmux ทำงานอยู่ใน \033cเป็นลำดับ escape สำหรับคำสั่ง ANSI reset

คุณสามารถแสดงรายการลูกค้าทั้งหมดที่เชื่อมต่อกับทาง TTY tmux list-clientsของพวกเขาด้วย จำกัด ให้เซสชั่นที่เฉพาะเจาะจงกับ-t $session_nameและการแสดงผลเพียง TTY -F '#{client_tty}'กับ ดังนั้นหากต้องการรีเซ็ตไคลเอ็นต์ tmux ที่เชื่อมต่อทั้งหมดคุณต้องการสิ่งต่อไปนี้:

for client_tty in $(tmux list-clients -F '#{client_tty}'); do
    printf "\033c" > $client_tty
done

คุณจะต้องออกtmux refreshลูกค้าทั้งหมดที่คุณตั้งค่าวิธีนี้เพื่อเรียกคืน tmux เป็นสถานะปกติ


ฉันไม่เข้าใจในตอนนี้!
Nishant

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