Как запустить другую программу и вывести ее только на указанную c часть терминала - PullRequest
3 голосов
/ 29 марта 2020

Я разрабатываю инструмент для совместного использования терминальной сессии несколькими пользователями.

Поэтому мой инструмент наращивает pty, запускает оболочку и отображает свой ввод / вывод в PTY.
stdin / Затем stdout сопоставляется с pty.

При запуске и изменении размера окна терминала PTY получает системный вызов TIOCGWINSZ с новыми размерами.

Теперь я хотел бы сохранить последнюю строку на моем терминале можно свободно отображать пользовательский интерфейс / строку состояния.
Сокращение количества строк в вызове TIOCGWINSZ на 1 кажется полуработающим.

Для демонстрационных целей я устанавливаю размер в TIOCGWINSZ, чтобы он всегда был быть 80x23
Теперь, когда запускается bash, на самом деле он не ограничен 23 строками, как я надеялся.
При запуске vim сам vim придерживается размера - что приятно.
Но после выхода из vim bash теперь ограничено 80х23?

Работает до тех пор, пока размер терминала не изменяется, после этого bash снова использует полный размер терминала.

См .: https://asciinema.org/a/IXz2e0ni2ASPQcYpvcze8TePK

Что Vim делает там, чтобы ограничить «размер терминала»? Какая-то магическая escape-последовательность?
И так как это, вероятно, хак, - какое было бы правильное решение, особенно если я не только хочу, чтобы в конце была запасная строка, но чтобы весь вывод отображался с заданным значением c смещение с указанным размером c, например, как у панелей tmux?

1 Ответ

1 голос
/ 29 марта 2020

На самом деле, неважно.

Решил этот самый случай, фактически используя некоторый неясный ANSI Escpae-код (DECSTBM), например: echo -en '\ 033 [0; 23r'

...