Содержание сессии уже было перезаписано, когда вы в первую очередь запустили программы TUI. Вы можете видеть, что это так.
Когда запускается программа TUI, которая использует ncurses
и тому подобное для представления своего текстового пользовательского интерфейса, она очищает экран. В этот момент все, что на экране, было перезаписано.
То, что вам не хватает, и то, что вы не знаете названия, это идея терминалов, которые имеют альтернативный экранный буфер. Когда запускается такая программа TUI, как эта, она выдает управляющую последовательность, чтобы переключиться на альтернативный экранный буфер терминала, если таковой имеется. Вся его продукция затем отправляется в этот буфер. Когда программа завершает работу или приостанавливает свою работу, она выдает управляющую последовательность, чтобы восстановить основной экранный буфер, который остался нетронутым, в то время как программа TUI отображала свой интерфейс пользователя в альтернативном буфере.
Для терминалов, у которых нет альтернативных экранных буферов, не нужно создавать escape-последовательности, а полноэкранный пользовательский интерфейс перезаписывает то, что было ранее на терминале.
Программы ищут эти escape-последовательности в базах данных terminfo
или termcap
. В мире terminfo
возможности терминала называются smcup
и rmcup
. В мире termcap
их называют ti
и te
. Как документально подтверждено, они не упоминают о буферах экрана.
Вместо этого они говорят о входе и выходе из "режима адресации курсора". Идея состоит в том, что программа TUI, которая представляет такой полноэкранный интерфейс, работает в режиме адресации курсора, когда программе действительно не нужен терминал для прокрутки; в то время как программа TUI, которая просто выводит строки прокрутки текста, не является. Таким образом, каждый переключается в и из этого режима. (В реальном мире все не так ясно. Например: современные оболочки, такие как Z Shell, перемещают курсор для редактирования строк, завершения меню и $RPROMPT
; но не переключайтесь на альтернативный экранный буфер, не располагайте полноценным полноэкранным пользовательским интерфейсом и не используйте прокрутку.)
Таким образом, возможности обычно делают больше, чем просто переключение буферов. smcup
также содержит escape-последовательность для сохранения текущей позиции курсора и rmcup
escape-последовательности для ее восстановления, если терминал имеет такие escape-последовательности.
Ваша проблема - одна из двух вещей:
- В базе данных
termcap
в вашей системе FreeBSD нет записей te
и ti
для вашего конкретного типа терминала, поскольку эта запись неполная.
- Во-первых, вы не используете правильный тип терминала для эмулятора терминала.
Тип терминала берется из вашей переменной среды TERM
на стороне сервера. Его значение обозначает запись в базе данных termcap
. Поэтому убедитесь, что ваша переменная среды TERM
называет запись в /etc/termcap
с возможностями, соответствующими возможностям вашего (локального) эмулятора терминала. Если нет записи, соответствующей вашему эмулятору терминала, которая содержит ti
и te
, вам нужно просто добавить такую запись.