Comment empêcher la commande HP-UX «less» de gâcher mon invite?

8

Je n'aime pas la sortie de moresur HP-UX, donc j'utilise lessplutôt comme pager:

PAGER=less

Sa sortie est agréable, mais sous Linux, lorsque j'utilise manpuis quitte, je reviens au shell, et l'affichage ressemble exactement à ce que je l'ai laissé, mais sur HP-UX, quand je reviens au shell, là est une ligne partielle laissée avant l'invite, un peu comme la commande suivante produit:

echo -e "text \c"

Regarde ça:

  • sur HP-UX:

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

(le message en italien signifie "Reformatage en cours, veuillez patienter")

  • sous Linux:

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

Comment résoudre ce problème?

elbarna
la source
Arrêtez-vous en donnant qou en utilisant CTRL+C. J'ai une machine HPUX et elle semble revenir à la nouvelle ligne (similaire à linux) si je donne qou CTRL+C. J'ai EDITOR=vidans mes variables d'environnement.
rahul
Bien sûr q, j'ai EDITOR = vim, j'essaye aussi EDITOR = vi mais rien ne change
elbarna

Réponses:

1

L'échange d'écran se fait avec un code de contrôle du terminal. Ces codes sont documentés sous terminfo(5). Les deux impliqués dans la sauvegarde / restauration d'écran sont généralement smcupet rmcup. Le premier active un mode d'adressage de curseur spécial du terminal (sm = "set mode") et le second le désactive. En règle générale, ces deux enregistreront l'écran et le restaurer.

Si la restauration d'écran ne fonctionne pas, il est possible que ces entrées soient incorrectes pour votre type de terminal. Vous pouvez imprimer le contenu de l'entrée terminfo actuelle à l'aide de la infocmpcommande. Vous devrez regarder ces entrées ( smcupet rmcup) et comparer les séquences d'échappement avec le manuel de votre terminal pour déterminer ce qu'elles font. Il y a de fortes chances que votre terminal soit légèrement différent de celui attendu par l'entrée terminfo.

Azhrei
la source
Il y a probablement un bug avec hpux xterm, l'utilisation de dtterm comme terminal fonctionne bien aussi pour l'homme
elbarna
Voilà une possibilité. Parfois, un émulateur de terminal prétendra être "tel ou tel compatible" mais laissera de côté les choses. Lorsque le système définit ensuite le type de terminal comme "tel ou tel", l'affichage est gâché. Il se peut également que le xterm de HP ait une valeur spéciale à utiliser pour TERM et qu'il ne soit pas défini correctement (peut-être qu'un profil le modifie?).
Azhrei
2

La fonctionnalité mentionnée est l' écran alternatif de xterm qui a été introduit dans X.V10R4 (décembre 1986). Bien que la fonctionnalité ait été prise en charge, elle n'a pas été ajoutée à la description du terminal avant X11R6 (environ dix ans).

La description du terminal HPUX xtermpour est la même que la description du X11R5, avec quelques ajouts (principalement les touches de fonction 1-12). Encore une fois, la fonction (touches de fonction) était prise en charge par le programme depuis un certain temps, mais n'a pas été ajoutée à la description du terminal.

Voici ce que infocmpsignale 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,

Voici les liens vers le fichier X11R6 et le X11R3 (inchangé via X11R5). La fonction d'écran alternative dans la description du terminal X11R6 est fournie par cette ligne :

smcup=\E7\E[?47h, rmcup=\E[2J\E[?47l\E8,

Avec ncurses (Linux, etc.), vous avez une description du terminal beaucoup plus récente qui répertorie toutes les fonctionnalités applicables.

Pour HPUX, vous pouvez résoudre le problème en utilisant tic pour compiler une description de terminal avec la fonctionnalité ajoutée. Si vous avez un accès root sur la machine HPUX, c'est simple:

infocmp >foo
vi foo (adding the `smcup` and `rmcup` line)
sudo tic foo

Sinon, vous pouvez contourner ce problème en définissant le tic environment variable to your own terminfo directory, and runningTERMINFO à compiler dans ce répertoire. Quelque chose comme

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

(vous auriez également besoin de TERMINFOdéfinir dans votre shell pour les sessions de suivi).

Thomas Dickey
la source