Скрипт оболочки для прокрутки всего текста в терминале без его изменения

Скрипт оболочки для прокрутки всего текста в терминале без его изменения

Я пытаюсь использовать скрипт /bin/sh для прокрутки вниз пары строк текста в терминале. Решение с использованием smcup, rmcup в этом случае неприемлемо.

Я попробовал еще несколько вариантов, но все они оказались неудачными (включая исправление отJdeBP):

  • tput cup 0 0; tput ri
  • tput cup 0 0; tput rin 3

Это немного странно, потому что man terminfo определяет:

Чтобы прокрутить текст вниз, программа переходит в верхний левый угол экрана и отправляет строку ri (обратный индекс). Строки ind и ri не определены, если они не находятся в соответствующих углах экрана.

Перед запуском любых тестов необходимо обеспечить возможность прокрутки вывода терминала (попробуйте использовать set, env перед тестами).

Решения для xterm будет достаточно.

Для ускорения и уточнения тестов используйте этот скрипт для запуска:

#!/bin/sh

# create scrollable text
set

# includes correction from JdeBP
# try to scroll text down one line
tput cup 0 0; tput ri

# includes correction from JdeBP
# try to scroll text down 3 lines
tput cup 0 0; tput rin 3

решение1

tput cup 0 0, ri

Неудивительно, что это не удалось. Это несинтаксис командной строки tputпрограммы.

tput чашка 0 0
tput ri

Очень просто.

Примечания для продвинутых пользователей, выполняющих сложные задачи не только в XTerm:

  • На реальных терминалах и их качественных эмуляторах нестандартные верхние и нижние поля и выключенный режим источника влияют на поведение и на то, где должен быть размещен курсор для прокрутки. Это не так просто, как предполагает модель terminfo. См., например, документацию DEC VT4xx/5xx для получения подробной информации о реальных терминалах DEC.
  • В мире DEC SD и SU — это панорамы окон, а не прокрутки буфера. VT525 имеет многооконность, и эти управляющие последовательности перемещают окна вокруг базового буфера.
  • Некоторые некачественные эмуляторы терминала, не полностью поддерживающие 8 бит, некорректно распознают U+0084 и U+008D как IND и RI и принудительно используют 7-битные псевдонимы.

Связанный контент