Как предотвратить, чтобы команда HP-UX «меньше» не испортила мою подсказку?

8

Мне не нравится вывод moreна HP-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:~$
    

Как решить эту проблему?

elbarna
источник
Вы бросили, давая qили используя CTRL+C. У меня есть машина HPUX, и, кажется, я вернусь к новой строке (по аналогии с Linux), если я дам qили CTRL+C. У меня есть EDITOR=viв моей среде переменные.
Рахул
Конечно, у меня есть РЕДАКТОР = vim, я также пробую РЕДАКТОР = vi, но ничего не изменится
elbarna

Ответы:

1

Смена экрана осуществляется с помощью управляющего кода терминала. Такие коды документированы под terminfo(5). Двумя участвующими в сохранении / восстановлении экрана обычно являются smcupи rmcup. Первый включает специальный режим адресации курсора терминала (sm = "set mode"), а второй отключает его. Как правило, эти двое сохранят экран и восстановят его.

Если восстановление экрана не работает, возможно, эти записи неверны для вашего типа терминала. Вы можете распечатать содержимое текущей записи terminfo, используя infocmpкоманду. Вам нужно будет просмотреть эти записи ( smcupи rmcup) и сравнить escape-последовательности с руководством по терминалу, чтобы определить, что они делают. Вероятность того, что ваш терминал немного отличается от ожидаемой входом terminfo.

Azhrei
источник
Вероятно, есть какая-то ошибка в hpux xterm, при которой dtterm в качестве терминала работает нормально и для человека
elbarna
Это возможность. Иногда эмулятор терминала будет утверждать, что он «такой-то-такой-совместимый», но ничего не стоит. Когда система затем определяет тип терминала как «такой-то и такой-то», дисплей портится. Может также случиться так, что у xterm HP есть специальное значение, которое будет использоваться для TERM, и оно не устанавливается должным образом (возможно, профиль меняет его?).
Ажрей
2

Упомянутая особенность - альтернативный экран xterm, который был представлен в X.V10R4 (декабрь 1986). Хотя эта функция была поддержана, она не была добавлена ​​в описание терминала до 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 для составления описания терминала с добавленной функцией. Если у вас есть root-доступ на компьютере HPUX, это просто:

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установить в вашей оболочке для последующих сессий).

Томас Дики
источник