Терминалы OS X не переходят в прокрутку
У меня есть проблема, которая возникает при использовании терминала Mac OS X (TERM=xterm): иногда он попадает в состояние, когда строки, которые прокручиваются сверху, не добавляются в буфер обратной прокрутки. Я не пользуюсь screen
или похожие; это простая оболочка bash внутри вкладки Terminal.
Это не происходит сразу после открытия новой вкладки. Я считаю, что это побочный эффект того, что я запустил на вкладке проблемы. Я предполагаю, что это как-то связано с эмуляцией xterm, возможно, областью прокрутки.
Что не сработало:
- Мягкий и жесткий сброс через меню Shell
- Бег
reset
во вкладке
Есть ли надежный способ сброса терминала и / или состояния xterm?
Может ли кто-нибудь объяснить, что происходит, даже если единственное исправление - закрыть вкладку и открыть новую?
1 ответ
Это означает, что терминал использует буфер альтернативного экрана. Существует главный экран, который прокручивается в журнал прокрутки, и альтернативный экран, который не делает. "Полноэкранные" или "ориентированные на экран" программы, такие как top, less, emacs, vim и screen переключают терминал на альтернативный экран по умолчанию.
Каждый экран имеет свое собственное содержимое и состояние. Наличие альтернативного экрана позволяет программам захватывать весь экран, а затем восстанавливать предыдущее содержимое при выходе, переключаясь обратно на главный экран.
Начиная с Mac OS X Lion 10.7, в Terminal есть пункт меню, который вы можете использовать для ручного переключения экранов:
Вид> Показать / Скрыть альтернативный экран
Это предусмотрено в первую очередь для того, чтобы вы могли просматривать или копировать текст с альтернативного экрана после выхода из программы "на весь экран". Xterm имеет аналогичную команду.
Вы также можете использовать его, чтобы вручную заставить программу использовать определенный экран, например, для контроля того, попадает ли вывод в журнал обратной прокрутки. Однако, если вы в настоящее время используете программу, которая явно переключается на альтернативный экран, вы можете запутать ее или получить неожиданные результаты, если перетянете ее на главный экран во время работы программы, поэтому используйте это с осторожностью.
В зависимости от программы, он может иметь аргумент командной строки или некоторые другие средства, чтобы настроить его для использования вместо основного экрана. например, less -X
,
Некоторые записи terminfo специально предназначены для подавления использования альтернативного экрана, например, xterm1
, TERM=xterm1 emacs
запустит Emacs на главном экране. Я не рекомендую использовать xterm1
навсегда, потому что он отключает ряд других полезных функций по сравнению с по умолчанию xterm-256color
на льва.
Вы также можете переключать экраны, используя tput
Команда для выдачи escape-последовательностей внутри оболочки или скрипта. tput smcup
переключается на альтернативный экран и tput rmcup
переключается обратно на главный экран.
Чтобы увидеть, какая программа запущена в данный момент, посмотрите имя программы, отображаемое в окне терминала или заголовке вкладки, или посмотрите окно инспектора ("Оболочка"> "Показать инспектор"). Последний процесс в списке в Инспекторе (обычно) - текущая программа, использующая экран. Это то, что вам нужно настроить, чтобы вместо этого использовать главный экран.