ป้องกันหน้าจอ gnu จากการปรับขนาดจอแสดงผล


21

ทุกครั้งที่ฉันเริ่มหน้าจอ (หน้าจอ -A) หรือพยายามเชื่อมต่อกับเซสชันหน้าจอที่กำลังทำงานอยู่ (หน้าจอ -Ax) เทอร์มินัลของฉันถูกปรับขนาดเป็น 80 คอลัมน์ ฉันต้องการป้องกันหน้าจอจากการปรับขนาดเทอร์มินัลของฉัน

ฉันใช้ iTerm กับ Snow Leopard และเซสชันหน้าจอของฉันอยู่บนเครื่อง centos (ฉันใช้ทุบตีเป็นเปลือกของฉัน)

คำตอบ:


31

ลองเพิ่มสิ่งนี้ (จาก/etc/screenrc) ลงใน~/.screenrc:

# Change the xterm initialization string from is2=\E[!p\E[?3;4l\E[4l\E>
# (This fixes the "Aborted because of window size change" konsole symptoms found
#  in bug #134198)
termcapinfo xterm* 'is=\E[r\E[m\E[2J\E[H\E[?7h\E[?1;4;6l'

คุณอาจจำเป็นต้องเปลี่ยน "xterm" $TERMเพื่อให้ตรงกับของคุณ

termcapinfoบรรทัดชุดis(สตริง ininitialization) สำหรับสถานีใด ๆ ที่มีชื่อขึ้นต้นด้วย "xterm" เพื่อลำดับของรหัสการหลบหนี \Eแสดงescapeและรหัสมีดังนี้:

\E[r       - set scrolling region to default (full size of window)
\E[m       - reset all resources (keyboard) to their initial values
\E[2J      - Erase in Display (ED). 2 -> Erase All.
\E[H       - set cursor position to default (1, 1)
\E[?7h     - DEC Private Mode Set. 7 -> Wraparound Mode
\E[?1;4;6l - DEC Private Mode Reset. 1 -> Normal Cursor Keys; 4  -> Jump (Fast) Scroll; 6 -> Normal Cursor Mode

บรรทัดที่ถูกแทนที่มีรหัสเหล่านี้:

\E[!p      - Soft terminal reset
\E[?3;4l   - DEC Private Mode Reset. 3 -> 80 Column Mode; 4 -> Jump (Fast) Scroll
\E[4l      - Reset Mode. 4 -> Replace Mode
\E>        - Normal keypad

(ที่มา: ลำดับการควบคุม XTerm )


ขอบคุณ! เพิ่มคำตอบนี้ไปที่serverfault.com/questions/158508/…
Joshua D'Alton

คุณต้องการถอดรหัสบรรทัด termcapinfo หรือไม่
Huckle

2
@Huckle: ฉันเพิ่มคำอธิบายของรหัสการหลบหนี
หยุดชั่วคราวจนกว่าจะมีการแจ้งให้ทราบต่อไป

1

คำอธิบาย (และรายการเทียบเท่าที่แนะนำ) สำหรับสตริงการเริ่มต้น xterm นั้นไม่ถูกต้องสมบูรณ์

เริ่มต้นด้วยสตริงจากคำอธิบายเทอร์มินัลของ xterm:

is2=\E[!p\E[?3;4l\E[4l\E>

เรามี

CSI ! p   Soft terminal reset (DECSTR).
CSI ? Pm l
      DEC Private Mode Reset (DECRST).
...
        Ps = 3  -> 80 Column Mode (DECCOLM).
        Ps = 4  -> Jump (Fast) Scroll (DECSCLM).
CSI Pm l  Reset Mode (RM).
...
        Ps = 4  -> Replace Mode (IRM).
ESC >     Normal Keypad (DECKPNM).

แต่DECSTRรีเซ็ตหลายสิ่งที่ไม่พบในการแทนที่:

  • รูปร่างเคอร์เซอร์และลักษณะที่ปรากฏ
  • ชุดตัวละคร
  • โหมดแป้นพิมพ์อื่น ๆ ที่เกี่ยวข้องกับการประยุกต์ / โหมดปกติ ( DECCKM, KAM, DECKPAM)
  • การขึ้นบรรทัดใหม่ (และการย้อนกลับแบบย้อนกลับ)
  • โหมดกำเนิด

นอกจากนี้มันไม่ได้ล้างหน้าจอ

เหตุผลในการใช้DECSTR( ตั้งแต่ปี 1997 ) คือการรักษาขนาดของtermcapให้เล็กพอที่จะพอดีกับขีด จำกัด 1024 ไบต์ของ termcap

การตั้งค่าสำหรับscreenมาจากแพ็คเกจ Debian; รายงานข้อผิดพลาดที่กล่าวถึงในความคิดเห็นคือDebian # 134198 - หน้าจอ: มีปัญหาการจำลองแบบแปลก ๆ ที่เห็นได้ชัดที่สุดกับ irssi และ konsoleจากปี 2002 screenไม่รู้จักลำดับนั้นและโดยบังเอิญ KDE konsole ไม่ได้ใช้ลำดับดังที่เห็น ในKDE # 134892ขณะที่ในเวลาเดียวกันของรัฐในการพัฒนาKDE # 145977ว่าพวกเขาต้องการที่จะไม่ใช้ที่แตกต่างกันคุ้มค่ากว่าTERM xtermเนื่องจากผู้ใช้บางคนอาจต้องการคำอธิบายเทอร์มินัลซึ่งตรงกับความสามารถของ konsole นั่นคือ ncurses เป็นkonsoleเช่น

is2=\E[m\E[?7h\E[4l\E>\E7\E[r\E[?1;3;4;6l\E8

กับ

is2=\E[r\E[m\E[2J\E[H\E[?7h\E[?1;4;6l

การลบหน้าจอลวงตาปลอมส่วนที่เกี่ยวข้องของการปรับแต่งหน้าจอคือ

is2=\E[r\E[m\E[?7h\E[?1;4;6l

ดังนั้นสิ่งที่ถูกปล่อยออกมาเป็น (นอกเหนือจาก)DECCOLM\E[4l

\E7และ\E8ในสตริงเริ่มต้นบันทึก / เรียกคืนตำแหน่งเคอร์เซอร์เมื่อปรับอัตรากำไรขั้นเลื่อน เช่นเดียวกับโหมดแทรกผู้ใช้บางคนจะสังเกตเห็นว่าไม่มีคุณสมบัติ

จุดประสงค์ของการปรับแต่งคือการระงับการDECCOLMสลับ (80/132 คอลัมน์) และการทำงานจากการตัดทอนและปรับแต่งแบบเก่าของหน้าจออาจไม่ทำงานรวมทั้งการปรับจากคำอธิบายเทอร์มินัลที่เขียนขึ้นสำหรับเทอร์มินัล

อ่านเพิ่มเติม:

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