more
我不喜欢HP-UX 上的输出,因此我less
将其用作寻呼机:
PAGER=less
它的输出很好,但是,在 Linux 上,当我使用man
然后退出时,我会返回到 shell,并且显示看起来就像我离开它时的样子,但是在 HP-UX 上,当我返回到 shell 时,会出现是提示符之前留下的部分行,很像以下命令生成的内容:
echo -e "text \c"
看这个:
在 HP-UX 上:
user@hpux2:~$ man ls Riformattazione in corso. Attendere...user@hpux2:~$
(意大利语消息的意思是“正在重新格式化,请稍候”)
在 Linux 上:
user@linux:~$ man ls user@linux:~$
如何解决这个问题呢?
答案1
提到的功能是 xterm 的备用屏幕它是在 X.V10R4(1986 年 12 月)中引入的。虽然支持该功能,但直到 X11R6(大约十年)才将其添加到终端描述中。
HPUX 的终端描述恰好xterm
与 X11R5 的描述相同,但有一些补充(主要是功能键 1-12)。同样,程序支持该功能(功能键)已有一段时间,但未添加到终端描述中。
以下是infocmp
HPUX 的报告:
# Reconstructed via infocmp from file: /usr/share/lib/terminfo/x/xterm
xterm|vs100|xterm terminal emulator,
am, km, xenl,
cols#80, lines#65,
bel=^G, blink=@, bold=\E[1m, civis=\E[?25I,
clear=\E[H\E[2J, cnorm=\E[?25h, cr=\r,
csr=\E[%i%p1%d;%p2%dr, cub=\E[%p1%dD, cub1=\b,
cud=\E[%p1%dB, cud1=\E[B, cuf=\E[%p1%dC, cuf1=\E[C,
cup=\E[%i%p1%d;%p2%dH, cuu=\E[%p1%dA, cuu1=\E[A,
cvvis=\E[?25h, dch=\E[%p1%dP, dch1=\E[P, dl=\E[%p1%dM,
dl1=\E[M, ed=\E[J, el=\E[K, home=\E[1;1H, ht=\t,
hts=\EH, ich=\E[%p1%d@, ich1=\E[@, il=\E[%p1%dL,
il1=\E[L, ind=\n, kbs=\177, kcub1=\EOD, kcud1=\EOB,
kcuf1=\EOC, kcuu1=\EOA, kf1=\EOP, kf10=\E[21~,
kf11=\E[23~, kf12=\E[24~, kf2=\EOQ, kf3=\EOR,
kf4=\EOS, kf5=\E[15~, kf6=\E[17~, kf7=\E[18~,
kf8=\E[19~, kf9=\E[20~, knp=\E[6~, kpp=\E[5~, rc=\E8,
rev=\E[7m, ri=\EM, rmkx=\E[?1l, rmso=\E[m,
rs1=\E>\E[1;3;4;5;6l\E[?7h\E[m\E[r\E[2J\E[H, rs2=@,
sc=\E7,
sgr=\E[%?%p1%t;7%;%?%p2%t;4%;%?%p3%t;7%;%?%p4%t;5%;%?%p6%t;1%;m,
sgr0=\E[m, smkx=\E[?1h, smso=\E[7m, tbc=\E[3g,
以下是指向的链接X11R6文件,以及X11R3(在 X11R5 中保持不变)。 X11R6 终端描述中的备用屏幕功能是由这条线提供:
smcup=\E7\E[?47h, rmcup=\E[2J\E[?47l\E8,
有了 ncurses(Linux 等),你就有了很久以后的终端描述其中列出了所有适用的功能。
对于 HPUX,您可以通过使用 tic 编译添加了该功能的终端描述来解决该问题。如果您拥有 HPUX 计算机的 root 访问权限,那就很简单:
infocmp >foo
vi foo (adding the `smcup` and `rmcup` line)
sudo tic foo
environment variable to your own terminfo directory, and running
否则,您可以通过设置 TERMINFO tic` 编译成来解决这个问题那目录。就像是
TERMINFO=$HOME/myterm; export TERMINFO
mkdir -p $TERMINFO/x
tic foo
(您还需要TERMINFO
在 shell 中进行设置以进行后续会话)。
答案2
屏幕交换是通过终端控制代码完成的。此类代码记录在 下terminfo(5)
。屏幕保存/恢复中涉及的两个通常是smcup
和rmcup
。第一个打开终端的特殊光标寻址模式(sm =“设置模式”),第二个将其关闭。通常,这两个将保存屏幕并恢复它。
如果屏幕恢复不起作用,则这些条目可能不适合您的终端类型。您可以使用该命令打印当前 terminfo 条目的内容infocmp
。您需要查看这些条目 (smcup
和rmcup
) 并将转义序列与终端手册进行比较,以确定它们的作用。您的终端很可能只是轻微地与 terminfo 条目所期望的不同。