Назад | Перейти на главную страницу

Строки терминала OS X не переходят в режим прокрутки

У меня проблема, которая возникает при использовании терминала Mac OS X (TERM = xterm): иногда он попадает в состояние, когда строки, которые прокручиваются сверху, не добавляются в буфер прокрутки. Я не использую screen или похожие; это простая оболочка bash внутри вкладки Терминал.

Это происходит не сразу после открытия новой вкладки. Я считаю, что это побочный эффект того, что я использовал на вкладке с проблемами. Я предполагаю, что это как-то связано с эмуляцией xterm, возможно, с областью прокрутки.

Что не сработало:

Есть ли надежный способ сбросить терминал и / или состояние xterm?

Может ли кто-нибудь объяснить, что происходит, даже если единственное решение - закрыть вкладку и открыть новую?

Это означает, что терминал использует альтернативный экранный буфер. Есть главный экран, который прокручивается в журнал обратной прокрутки, и альтернативный экран, который этого не делает. «Полноэкранные» или «ориентированные на экран» программы, такие как top, less, emacs, vim и screen, по умолчанию переключают терминал на альтернативный экран.

Каждый экран имеет собственное содержимое и состояние. Наличие альтернативного экрана позволяет программам занимать весь экран, а затем восстанавливать предыдущее содержимое при выходе, переключаясь обратно на главный экран.

Начиная с Mac OS X Lion 10.7, в Терминале есть пункт меню, который можно использовать для переключения экранов вручную:

Просмотр> Показать / скрыть альтернативный экран

Это сделано в первую очередь для того, чтобы вы могли просматривать или копировать текст с альтернативного экрана после выхода из полноэкранной программы. В Xterm есть похожая команда.

Вы также можете использовать его, чтобы вручную заставить программу использовать определенный экран, например, чтобы контролировать, попадает ли вывод в журнал прокрутки. Однако, если в настоящее время вы используете программу, которая явно переключается на альтернативный экран, вы можете запутать ее или получить неожиданные результаты, если принудительно переключите ее на главный экран во время работы программы, поэтому используйте это с осторожностью.

В зависимости от программы он может иметь аргумент командной строки или другие средства для настройки использования вместо этого главного экрана. например., less -X.

Некоторые записи terminfo специально предназначены для подавления использования альтернативного экрана, например, xterm1. TERM=xterm1 emacs запустит Emacs на главном экране. Я не рекомендую использовать xterm1 навсегда, потому что он отключает ряд других полезных функций по сравнению с настройкой по умолчанию. xterm-256color на Lion.

Вы также можете переключать экраны с помощью tput команда для выдачи управляющих последовательностей из оболочки или сценария. tput smcup переключается на альтернативный экран и tput rmcup переключается обратно на главный экран.

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