根据终端/环境,以下顺序具有不同的效果:
$ 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 man
anxterm
并退出 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
。
我还没有找到如何配置顶部行为的选项 - 默认情况下它不发送恢复屏幕。