วิธีกำหนดค่าการกู้คืนหน้าจอในเทอร์มินัล


10

ขึ้นอยู่กับเทอร์มินัล / สภาพแวดล้อมต่อไปนี้มีผลกระทบที่แตกต่างกัน:

$ ls
1
2
$ man ls
enter q

ฉันเห็นหน้าจอ man-page ที่แสดงล่าสุดเหนือพรอมต์ปัจจุบันหรือเอาต์พุต ls และเอาต์พุตเชลล์ก่อนหน้าถูกเรียกคืน พบว่ามีผลเหมือนกันเช่นเมื่อใช้vimแล้วระงับการทำบางสิ่งบางอย่างบนเปลือก

บน Fedora 19 - หน้าจอเริ่มต้นดูเหมือนว่าจะไม่คืนค่า gnome-terminal / xterm ใช้ do-restore ตามค่าเริ่มต้น

บน Solaris มันขึ้นอยู่กับ terminal / terminfo db ที่ใช้ดูเหมือนว่า

ฉันต้องการกำหนดค่าพฤติกรรมการคืนค่าอย่างสม่ำเสมอระหว่างระบบ / เทอร์มินัลที่แตกต่างกัน


หากคุณใช้หน้าจอ GNU เสมอคุณจะมีพฤติกรรมที่สอดคล้องกัน
จอร์แดน

คำตอบ:


16

ดูเหมือนว่าคุณสมบัตินี้จะเรียกว่า 'หน้าจอทางเลือก' หรือสลับไปมาระหว่างหน้าจอปกติและหน้าจอทางเลือก

คุณสามารถสำรวจโดยใช้ xterm ตัวอย่างเช่นพิมพ์man manในxtermและคนออก ตอนนี้คุณสามารถสลับไปยังหน้าจออื่นผ่านCtrl+ Mouse2 (คลิกกลาง) -> 'แสดงหน้าจอทางเลือก' หรือคุณสามารถป้อนลำดับการควบคุม xtermโดยตรงเช่น:

$ echo -e '\033[?47h' # alternate screen
$ echo -e '\033[?47l' # normal screen

คำสั่งสองคำสั่งสุดท้ายยังใช้งานได้ใน gnome-terminal (อาจเป็นคำสั่งอื่นเช่นกัน)

เกิดอะไรขึ้นเมื่อman/ vi/ lessฯลฯ เริ่มต้นโดยทั่วไปพวกเขาส่งคำสั่งที่ชัดเจนหน้าจอที่เป็นนามธรรม เมื่อออก (หรือหยุดชั่วคราว) พวกเขาจะส่งคำสั่งเรียกคืนหน้าจอที่เป็นนามธรรม วิธีที่คำสั่งแปลเป็นลำดับการควบคุมเทอร์มินัลที่เป็นรูปธรรมถูกกำหนดไว้ในฐานข้อมูลterminfo

ปิดใช้งานการสลับหน้าจอทางเลือก

สิ่งที่ควรใช้กับเทอร์มินัลทั้งหมดคือการปรับรายการ terminfo ภายในเครื่องเช่นการลบการแม็พคำสั่ง abstract clear / restore screen

คุณสามารถทำได้เช่นนี้ - สำหรับ$TERMรายการปัจจุบัน(สำหรับ gnome-terminal ใน Fedora 19 เป็นต้น):

$ echo $TERM
xterm-256color
$ infocmp -1 > xterm-256color
$ sed 's/^\(xterm-256color\)|/\1-na|/ ; /smcup\|rmcup/d ' \
    xterm-256color > xterm-256color-na
$ diff -u xterm-256color* 
--- xterm-256color  2013-08-04 16:33:52.041393461 +0200
+++ xterm-256color-na   2013-08-04 16:36:56.829930520 +0200
@@ -1,5 +1,5 @@
 #  Reconstructed via infocmp from file: /usr/share/terminfo/x/xterm-256color
-xterm-256color|xterm with 256 colors,
+xterm-256color-na|xterm with 256 colors,
    am,
    bce,
    ccc,
@@ -155,7 +155,6 @@
    rin=\E[%p1%dT,
    rmacs=\E(B,
    rmam=\E[?7l,
-   rmcup=\E[?1049l,
    rmir=\E[4l,
    rmkx=\E[?1l\E>,
    rmm=\E[?1034l,
@@ -170,7 +169,6 @@
    sgr0=\E(B\E[m,
    smacs=\E(0,
    smam=\E[?7h,
-   smcup=\E[?1049h,
    smir=\E[4h,
    smkx=\E[?1h\E=,
    smm=\E[?1034h,
$ tic xterm-256color-na # loads the file to $HOME/.terminfo
$ find ~/.terminfo -type f
$ HOME/.terminfo/x/xterm-256color-na

ตอนนี้คุณสามารถทดสอบผ่าน:

$ TERM=xterm-256color-na man man # and then hit q

คุณสามารถทำซ้ำขั้นตอนข้างต้นสำหรับเทอร์มินัลอื่นถ้าคุณใช้หลาย ๆ อัน หากทุกอย่างทำงานได้ตามที่คาดไว้คุณสามารถตั้งค่าTERMผ่านเปลือก rc-file ของคุณ

คุณยังสามารถระบุชื่อเทอร์มินัลเป็นพารามิเตอร์infocmpโดยตรงเช่น:

$ infocmp -1 screen > screen

เปิดใช้งานการสลับหน้าจอทางเลือก

ขั้วบางคนสนับสนุนคุณสมบัติการสลับหน้าจออื่น (เช่นหน้าจอ ) แต่ปิดการใช้งานในการเริ่มต้น

เพื่อให้screenคุณสามารถเปิดใช้งานผ่าน~/.screenrc:

$ cat ~/.screenrc
altscreen

หากคุณเข้าสู่ระบบจากระยะไกลผ่านทาง ssh to - say - ระบบ Solaris บางทีระบบฐานข้อมูล terminfo ที่กำหนดค่าจากระยะไกลนั้นเป็นฐานข้อมูลประวัติศาสตร์ที่มีความเสียหายหรือมีค่าเริ่มต้นที่ผิดปกติ / เฉพาะ Solaris ที่ไม่ตรงกับเทอร์มินัล คุณเรียกใช้ ssh

ดังนั้นจึงเป็นตัวเลือกเพียงคัดลอกฐานข้อมูล terminfo โลคัลจาก / usr / share / info (บนไคลเอ็นต์) ไปยังhost:~/.terminfo(บนเซิร์ฟเวอร์)

ในกรณีที่รูปแบบ terminfo รวบรวมไม่เข้ากันคุณสามารถส่งออก / นำเข้ารายการเช่นในวรรคก่อนหน้า

ฉันได้ลองด้วย terminfo-db จากการติดตั้งCygwinและคัดลอกโดยตรงไปยังระบบ Solaris 10

ในกรณีที่คุณต้องการแบ่งปัน db terminfo ทางเลือกระหว่างผู้ใช้คุณระบุเส้นทางของมันผ่านTERMINFOตัวแปรสภาพแวดล้อม

ไม่สนใจลำดับการควบคุม

เทอร์มินัลบางตัวรองรับการปิดใช้งานลำดับการควบคุมสำหรับการสลับหน้าจอทางเลือก ตัวอย่างเช่น xterm มีตัวเลือก gnome-terminal ไม่มี

สำหรับ xterm เป็นX-ressourceเช่น

XTerm*titeInhibit: true

การกำหนดค่าเฉพาะของโปรแกรม

บางโปรแกรมมีไฟล์การกำหนดค่าเพื่อกำหนดค่าการควบคุมลำดับ / คำสั่ง terminfo ที่พวกเขาส่ง ตัวอย่างเช่น

$ LESS=X less foo

กำหนดค่าlessเพื่อไม่ล้าง / เรียกคืนหน้าจอ

สำหรับvimคุณสามารถรวมสิ่งที่ชอบ

set t_ti= t_te=

~/.vimrcในตัวคุณ

ฉันไม่พบตัวเลือกในการกำหนดค่าพฤติกรรมดังกล่าวสำหรับด้านบน - โดยค่าเริ่มต้นจะไม่ส่งหน้าจอการคืนค่า


cmd sed จริงลบสายทั้งที่มีหรือsmcup rmcupในกรณีของฉันมีสิ่งของอื่น ๆ มาในบรรทัดเดียวกันกับพวกเขา เนื้อหาอื่น ๆ เหล่านั้นก็ถูกลบเช่นกัน ดังนั้นบางทีสิ่งที่s/[sr]mcup=[^,]*,//'ดีกว่า
Mingliang
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.