如何在终端中配置屏幕还原?


10

根据终端/环境,以下顺序会产生不同的影响:

$ ls
1
2
$ man ls
enter q

我看到的是当前提示上方最后显示的手册页屏幕,或者是ls输出和先前的shell输出已恢复。例如,在使用vim然后将其挂起在外壳上执行某些操作时,会观察到相同的效果。

在Fedora 19上-屏幕的默认设置似乎是不恢复,gnome-terminal / xterm默认使用do-restore。

在Solaris上,它取决于所使用的terminal / terminfo数据库。

我想在不同系统/终端之间一致地配置还原行为。


如果始终运行GNU屏幕,您将获得一致的行为。
jordanm

Answers:


16

该功能似乎被称为“备用屏幕”或在正常屏幕和备用屏幕之间切换。

您可以使用xterm探索它。例如,输入man manan xterm和exit man。现在,您可以通过Ctrl+ Mouse2(单击中键)->“显示备用屏幕” 切换到备用屏幕。或者,您可以直接输入xterm控制序列,例如:

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

最后两个命令也可以在gnome-terminal中运行(可能在其他命令中也可以)。

man/ vi/ less等启动时发生的情况基本上是它们发送抽象的清晰屏幕命令。在退出(或暂停)时,他们发送抽象的restore-screen命令。在terminfo数据库中定义了命令如何转换为具体的终端控制序列。

禁用备用屏幕切换

对于所有终端,应该起作用的是调整本地terminfo条目,即删除抽象的clear / restore屏幕命令的映射。

您可以这样操作-对于当前$TERM条目(例如,对于Fedora 19上的gnome-terminal):

$ 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通过shell rc文件进行设置。

您也可以直接将终端名称指定为的参数infocmp,例如:

$ infocmp -1 screen > screen

启用备用屏幕切换

一些终端支持备用屏幕切换功能(例如屏幕),但默认情况下禁用它

对于screen您可以通过您的启用它~/.screenrc

$ cat ~/.screenrc
altscreen

如果您通过ssh远程登录(例如-Solaris系统),则可能是远程配置的系统范围的terminfo数据库有点历史性,已损坏或包含一些与“出血边缘”终端不匹配的特殊/ Solaris缺省设置您运行ssh。

因此,可以选择将本地terminfo数据库从/ usr / share / info(在客户端上)复制到host:~/.terminfo(在服务器上)。

如果编译的terminfo格式不兼容,您也可以像上一段一样导出/导入条目。

我已经尝试从Cygwin安装中使用terminfo-db 并将其直接复制到工作的Solaris 10系统中。

如果要在用户之间共享替代termterm数据库,则可以通过TERMINFO环境变量指定其路径。

忽略控制序列

一些终端支持禁用用于交替屏幕切换的控制顺序。例如,xterm有一个选项,gnome-terminal没有。

对于xterm,它是X资源,例如

XTerm*titeInhibit: true

程序特定的配置

某些程序具有配置文件来配置它们发送的控制序列/ terminfo命令。例如

$ LESS=X less foo

配置less为不清除/还原屏幕。

因为vim你可以包括类似

set t_ti= t_te=

在你里面~/.vimrc

我没有找到如何配置顶部行为的选项-默认情况下,它不发送还原屏幕。


sed cmd实际上删除了包含smcup或的整行rmcup。就我而言,还有其他东西与它们同在。这些其他东西也被删除。所以也许有些s/[sr]mcup=[^,]*,//'更好。
Mingliang
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.