如何防止 HP-UX 命令“less”弄乱我的提示符?

如何防止 HP-UX 命令“less”弄乱我的提示符?

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)。同样,程序支持该功能(功能键)已有一段时间,但未添加到终端描述中。

以下是infocmpHPUX 的报告:

#       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)。屏幕保存/恢复中涉及的两个通常是smcuprmcup。第一个打开终端的特殊光标寻址模式(sm =“设置模式”),第二个将其关闭。通常,这两个将保存屏幕并恢复它。

如果屏幕恢复不起作用,则这些条目可能不适合您的终端类型。您可以使用该命令打印当前 terminfo 条目的内容infocmp。您需要查看这些条目 (smcuprmcup) 并将转义序列与终端手册进行比较,以确定它们的作用。您的终端很可能只是轻微地与 terminfo 条目所期望的不同。

相关内容