如何在终端中配置屏幕恢复?

如何在终端中配置屏幕恢复?

根据终端/环境,以下顺序具有不同的效果:

$ ls
1
2
$ man ls
enter q

我要么在当前提示符上方看到最后显示的手册页屏幕,要么恢复 ls 输出和先前的 shell 输出。例如,当使用vim然后暂停它以在外壳上执行某些操作时,会观察到相同的效果。

在 Fedora 19 上 - screen 的默认值似乎是 no-restore,gnome-terminal/xterm 默认情况下使用 do-restore。

在 Solaris 上,它似乎取决于所使用的终端/terminfo db。

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

答案1

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

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

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

最后两个命令也可以在 gnome-terminal 中使用(也可能在其他终端中使用)。

man//vi等启动时发生的事情less基本上是他们发送一个抽象的清屏命令。在退出(或挂起)时,它们发送一个抽象的恢复屏幕命令。命令如何转换为具体的终端控制序列在术语信息数据库。

禁用交替屏幕切换

对所有终端都适用的是调整本地 terminfo 条目,即删除抽象清除/恢复屏幕命令的映射。

您可以这样做 - 对于当前$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 格式不兼容,您还可以像上一段一样导出/导入条目。

我尝试过使用 terminfo-db 来自西格文安装并直接将其复制到 Solaris 10 系统即可。

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

忽略控制序列

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

对于 xterm 来说是X资源,例如

XTerm*titeInhibit: true

程序特定配置

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

$ LESS=X less foo

配置less为不清除/恢复屏幕。

因为vim你可以包括类似的东西

set t_ti= t_te=

在你身上~/.vimrc

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

相关内容