Экранирующие последовательности \e[B
и \e[A
перемещают курсор вниз и вверх соответственно, ограничивая область просмотра. Экранирующие последовательности \eD
(называемые "индекс") и \eM
("обратный индекс") также перемещаются вниз и вверх, но также при необходимости прокручивают область просмотра. (Обратите внимание на отсутствие символа [
в последних.)
Я рекомендую вам напечатать пару "индексных" символов, за которыми следует такое же количество "курсора вверх" (или "обратного индекса"). Например:
echo -ne '\eD\eD\eD\e[A\e[A\e[A'
перемещает курсор вниз на 3 строки, прокручивая весь видовой экран, если необходимо, а затем перемещает его обратно вверх. Эффективно он гарантирует, что в нижней части экрана есть как минимум 3 пустые строки.
Вы можете подключить его к своему $PS1
(первичное приглашение оболочки), просто убедитесь, что оно заключено между \[
и \]
чтобы оболочка знала, что эти символы не перемещают курсор по горизонтали, например:
PS1='\[\eD\eD\eD\e[A\e[A\e[A\]prompt$ '
Вы также можете распечатать его из $PROMPT_COMMAND
В этом случае, если я правильно помню, его нужно заключить в байт 0x01
(^A
) и 0x02
(^B
).
Примечание. Сочетания клавиш \e[3A
и \e[3B
перемещают курсор вверх / вниз на 3 строки (и, очевидно, вы можете заменить 3 на любое число). Последовательности "индекс" и "обратный индекс" не имеют таких ярлыков.
Я бы оставил это на ваше усмотрение, чтобы программно выяснить предпочитаемое вами количество строк на основе высоты терминала.