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