Терминалы 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 переключается обратно на главный экран.

Чтобы увидеть, какая программа запущена в данный момент, посмотрите имя программы, отображаемое в окне терминала или заголовке вкладки, или посмотрите окно инспектора ("Оболочка"> "Показать инспектор"). Последний процесс в списке в Инспекторе (обычно) - текущая программа, использующая экран. Это то, что вам нужно настроить, чтобы вместо этого использовать главный экран.

Другие вопросы по тегам