พฤติกรรมนี้มาจากคุณสมบัติ "หน้าจอทางเลือก" ที่รวมอยู่ในเทอร์มินัล (ฮาร์ดแวร์) และเทอร์มินัลอีมูเลเตอร์ส่วนใหญ่ (ซอฟต์แวร์) สิ่งที่เกิดขึ้นคือบางโปรแกรมที่ทราบว่าเทอร์มินัลสลับไปที่ 'หน้าจอ' เพื่อทำงานและสลับกลับไปที่หน้าจอปกติเมื่อพวกเขาถูกไล่ออก (เลิก, หยุดทำงาน, ฯลฯ ) ซึ่งจะเป็นการลบล้างผลลัพธ์สุดท้ายของโปรแกรมดังกล่าวอย่างมีประสิทธิภาพ
การค้นหาเว็บสำหรับ“ terminfo ป้องกัน altscreen” จัดทำหน้าเว็บที่กล่าวถึง 'ปัญหา' ของหน้าจออื่นและการแก้ปัญหาหลายอย่าง
เมื่ออธิบายถึงหน้าที่เชื่อมโยงแล้วบางโปรแกรมสามารถกำหนดค่าให้หลีกเลี่ยงการใช้หน้าจอทางเลือกได้ -X
ตัวเลือกสำหรับการน้อยเป็นวิธีทางอ้อมของการทำเช่นนี้ เป็นกลุ่มสามารถกำหนดค่าในทำนองเดียวกันโดยการยกเลิกการตั้งค่าt_ti
และt_te
ตัวแปร
โซลูชันที่มีขอบเขตที่กว้างขึ้นคือการแก้ไขรายการterminfoสำหรับเทอร์มินัลของคุณเพื่อที่จะไม่รวมลำดับการควบคุมหน้าจออื่น รายการ terminfo สร้างฐานข้อมูลที่บอกโปรแกรมว่าลำดับการควบคุมใดที่จะส่งไปยังเทอร์มินัลเพื่อสร้างเอฟเฟกต์บางอย่าง (การย้ายเคอร์เซอร์การล้างหน้าจอการลบส่วนหนึ่งของบรรทัดปัจจุบัน ฯลฯ ) ด้วยการแก้ไขรายการ terminfo ที่เทอร์มินัลของคุณใช้คุณสามารถจัดการ 'ละเลยที่จะบอก' โปรแกรมที่ใช้ terminfo ทั้งหมดที่มีลำดับการควบคุม“ หน้าจอสำรอง” อยู่
จากรายการลำดับการควบคุมสำหรับxtermเราจะเห็นได้ว่าลำดับการควบคุมที่สนใจ (สำหรับเทอร์มินัลอีมูเลเตอร์xterm )
- เปิดใช้งานหน้าจอทางเลือก:
ESC [ ? 47 h
(เช่นเดียวกันกับ 1047 และ 1049) และ
- กู้คืนหน้าจอปกติ:
ESC [ ? 47 l
(เช่นเดียวกันกับ 1047 และ 1,049)
รหัสเหล่านี้มีแนวโน้มมากที่สุดที่มีอยู่ในตัวแปรที่ terminfo และsmcup
rmcup
วิธีที่รวดเร็วและสกปรกในการปรับตัวแปรเหล่านี้สำหรับ TERM ปัจจุบันของคุณอาจมีลักษณะเช่นนี้:
infocmp | sed -e 's/[sr]mcup=[^,]*,//' > /tmp/noaltscreen-terminfo
tic -o ~/.terminfo/ /tmp/noaltscreen-terminfo
วิธีนี้ค่อนข้างหยาบและจะไม่สามารถใช้ได้กับเทอร์มินัลทั้งหมด แต่ก็อาจใช้ได้กับเทอร์มินัลอีมูเลเตอร์xterm ที่เหมือนกันเกือบทั้งหมด เป็นการดีที่คุณควรตรวจสอบค่าในsmcup
และrmcup
ตัวแปรของรายการ terminfo สำหรับเทอร์มินัลของคุณและแก้ไขอย่างระมัดระวังเพื่อป้องกันพฤติกรรมที่ไม่พึงประสงค์ หน้าอภิปราย / โซลูชันที่เชื่อมโยงข้างต้นมีไฟล์ terminfo“ เตรียมไว้ล่วงหน้า” ที่คุณอาจใช้แทนการแฮ็คของคุณเอง (แต่ความสนุกในนั้นคืออะไร)