Làm cách nào để định cấu hình khôi phục màn hình trong thiết bị đầu cuối?


10

Tùy thuộc vào thiết bị đầu cuối / môi trường theo trình tự sau có hiệu ứng khác nhau:

$ ls
1
2
$ man ls
enter q

Hoặc tôi thấy màn hình trang man được hiển thị lần cuối bên trên dấu nhắc hiện tại hoặc đầu ra ls và đầu ra shell trước đó được khôi phục. Hiệu ứng tương tự được quan sát, ví dụ như khi sử dụng vimvà sau đó tạm dừng nó để làm một cái gì đó trên vỏ.

Trên Fedora 19 - mặc định của màn hình dường như là không khôi phục, một gnome-terminal / xterm sử dụng do-restore theo mặc định.

Trên Solaris, nó phụ thuộc vào thiết bị đầu cuối / terminfo db được sử dụng.

Tôi muốn cấu hình hành vi khôi phục một cách nhất quán giữa các hệ thống / thiết bị đầu cuối khác nhau.


Nếu bạn luôn chạy màn hình GNU, bạn sẽ có hành vi nhất quán.
jordanm

Câu trả lời:


16

Tính năng này dường như được gọi là 'màn hình thay thế' hoặc chuyển đổi giữa màn hình bình thường và màn hình thay thế.

Bạn có thể khám phá nó bằng cách sử dụng xterm. Ví dụ gõ man manmột xtermngười đàn ông và thoát. Bây giờ bạn có thể chuyển sang màn hình thay thế thông qua Ctrl+ Mouse2 (nhấp chuột giữa) -> 'Hiển thị màn hình thay thế'. Ngoài ra, bạn có thể nhập trực tiếp các chuỗi điều khiển xterm , ví dụ:

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

Hai lệnh cuối cùng cũng hoạt động trong gnome-terminal (có thể trong các lệnh khác nữa).

Điều gì xảy ra khi man/ vi/ lessvv khởi động về cơ bản là chúng gửi một lệnh màn hình rõ ràng trừu tượng. Khi thoát (hoặc tạm dừng), họ gửi một lệnh màn hình khôi phục trừu tượng. Làm thế nào lệnh dịch sang trình tự điều khiển thiết bị đầu cuối cụ thể được xác định trong cơ sở dữ liệu terminfo .

Vô hiệu hóa chuyển đổi màn hình thay thế

Điều nên làm cho tất cả các thiết bị đầu cuối là điều chỉnh các mục terminfo cục bộ, tức là loại bỏ ánh xạ của các lệnh màn hình xóa / khôi phục trừu tượng.

Bạn có thể làm như thế này - cho $TERMmục hiện tại (ví dụ như cho gnome-terminal trên 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

Bây giờ bạn có thể kiểm tra nó qua:

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

Bạn có thể lặp lại các bước trên cho các thiết bị đầu cuối khác nếu bạn sử dụng nhiều thiết bị đầu cuối. Nếu mọi thứ hoạt động như mong đợi, bạn có thể thiết lập TERMthông qua tệp RC shell của mình.

Bạn cũng có thể trực tiếp chỉ định tên thiết bị đầu cuối làm tham số infocmp, ví dụ:

$ infocmp -1 screen > screen

Cho phép chuyển đổi màn hình thay thế

Một số thiết bị đầu cuối hỗ trợ tính năng chuyển đổi màn hình thay thế (ví dụ: màn hình ), nhưng tắt nó theo mặc định .

Đối với screenbạn có thể kích hoạt nó thông qua ~/.screenrc:

$ cat ~/.screenrc
altscreen

Nếu bạn đăng nhập từ xa qua ssh to - giả sử - một hệ thống Solaris có lẽ cơ sở dữ liệu terminfo toàn hệ thống được cấu hình từ xa là loại lịch sử, bị hỏng hoặc bao gồm một số mặc định khác thường / Solaris không khớp với các thiết bị đầu cuối 'chảy máu cạnh' bạn chạy ssh vào.

Vì vậy, nó là một tùy chọn để chỉ sao chép cơ sở dữ liệu terminfo cục bộ từ / usr / share / thông tin (trên máy khách) sang host:~/.terminfo(trên máy chủ).

Trong trường hợp định dạng terminfo được biên dịch không tương thích, bạn cũng có thể xuất / nhập các mục như trong đoạn trước.

Tôi đã thử với một terminfo-db từ bản cài đặt Cygwin và sao chép nó trực tiếp vào hệ thống Solaris 10 hoạt động.

Trong trường hợp bạn muốn chia sẻ một db terminfo thay thế giữa những người dùng, bạn chỉ định đường dẫn của nó thông qua TERMINFObiến môi trường.

Bỏ qua chuỗi điều khiển

Một số thiết bị đầu cuối hỗ trợ vô hiệu hóa chuỗi điều khiển để chuyển đổi màn hình thay thế. Ví dụ xterm có một tùy chọn, gnome-terminal thì không.

Đối với xterm, đó là X-ressource , vd

XTerm*titeInhibit: true

Cấu hình chương trình cụ thể

Một số chương trình có tệp cấu hình để định cấu hình các lệnh trình tự / terminfo điều khiển mà chúng gửi. Ví dụ

$ LESS=X less foo

cấu hình lessđể không xóa / khôi phục màn hình.

Đối với vimbạn có thể bao gồm một cái gì đó như

set t_ti= t_te=

trong bạn ~/.vimrc.

Tôi chưa tìm thấy tùy chọn cách định cấu hình hành vi đó cho đầu trang - theo mặc định, nó không gửi màn hình khôi phục.


Các cmd sed thực sự xóa toàn bộ dòng chứa smcuphoặc rmcup. Trong trường hợp của tôi, có những thứ khác đến cùng dòng với chúng. Những thứ khác cũng bị xóa. Vì vậy, có lẽ một cái gì đó như s/[sr]mcup=[^,]*,//'là tốt hơn.
Mingliang
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.