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


8

我不喜欢moreHP-UX上的输出,因此我将其less用作寻呼机:

PAGER=less

它的输出很好,但是,在Linux上,当我使用man然后退出时,我返回到外壳,并且显示的外观与我离开它的方式相同,但是在HP-UX上,当我返回到外壳时,在那里是在提示符前保留的部分行,非常类似于以下命令产生的内容:

echo -e "text \c"

看这个:

  • 在HP-UX上:

    user@hpux2:~$ man ls
    Riformattazione in corso. Attendere...user@hpux2:~$
    

(意大利语中的消息表示“正在重新格式化,请稍候”)

  • 在Linux上:

    user@linux:~$ man ls
    user@linux:~$
    

如何解决这个问题呢?


您是否放弃给予q或使用CTRL+C。我有一台HPUX机器,如果我给q或,它似乎会返回到新行(类似于linux)CTRL+CEDITOR=vi我的环境变量中有变量。
胡尔2015年

当然,q,我有EDITOR = vim,我也尝试EDITOR = vi,但没有任何变化
elbarna 2015年

Answers:


1

屏幕切换是通过终端控制代码完成的。此类代码记录在下terminfo(5)。屏幕保存/还原中涉及的两个通常是smcuprmcup。第一个打开终端的特殊光标寻址模式(sm =“ set mode”),第二个关闭它。通常,这两个将保存屏幕并还原它。

如果无法进行屏幕还原,则这些条目可能与您的终端类型不正确。您可以使用infocmp命令来打印当前terminfo条目的内容。您需要查看这些条目(smcuprmcup),并将转义序列与终端手册进行比较,以确定它们的作用。可能是您的终端与terminfo条目所期望的终端略有不同。


hpux xterm可能存在一些错误,使用dtterm作为终端对人也可以正常工作
elbarna 2015年

那是可能的。有时,终端仿真器会声称“如此兼容”,但忽略了一切。然后,当系统将终端类型定义为“某某某物”时,显示会混乱。也可能是HP的xterm具有用于TERM的特殊值,并且没有正确设置(可能是配置文件更改了它?)。
Azhrei 2015年

2

提到的功能是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

否则,您可以通过将TERMINFO environment variable to your own terminfo directory, and runningtic` 设置为编译到目录中来解决此问题。就像是

TERMINFO=$HOME/myterm; export TERMINFO
mkdir -p $TERMINFO/x
tic foo

(您还需要TERMINFO在shell中设置后续会话)。

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.