Термінальні лінії OS X не переходять до прокрутки


12

У мене є проблема, що з'являється під час використання терміналу Mac OS X (TERM = xterm): іноді він переходить у стан, коли лінії, що прокручуються вгорі, не додаються до буфера прокрутки. Я не використовую screenчи подібне; це звичайна оболонка bash на вкладці Terminal.

Це не робиться відразу після відкриття нової вкладки. Я вважаю, що це побічний ефект від чогось, що я натрапив на вкладку проблеми. Я гадаю, що це має щось спільне з емуляцією xterm, можливо, областю прокрутки.

Що не спрацювало:

  • М'яке та жорстке скидання через меню Shell
  • Запуск resetу вкладці

Чи є надійний спосіб скинути термінал та / або стан xterm?

Хтось може надати пояснення того, що відбувається, навіть якщо єдиним виправленням є закриття вкладки та відкриття нової?


Яку версію Mac OS X ви працюєте? Чи є у вас буфер на чомусь меншому, ніж "необмежений", а рядки, які вам не вистачають, - це просто найдавніші рядки, які випали із заднього кінця буфера?
Spiff

Mac OS X 10.6.2, а буфер - 10 000 рядків, проте втрачені рядки - це ті, що прокручуються лише з екрана. Якщо я розміщую сторінку на одному екрані, цих рядків там немає, а адже рядки прокручуються вгорі, остання сторінка прокрутки ніколи не змінюється.
Стів Мадсен

Відповіді:


19

Це означає, що термінал використовує альтернативний буфер екрану. Існує головний екран, який прокручується до журналу прокрутки, та альтернативний екран, який цього не робить. "Повноекранні" або "орієнтовані на екран" програми, такі як верхня, менша, emacs, vim та екран перемикають термінал на альтернативний екран за замовчуванням.

Кожен екран має власний вміст та стан. Замінний екран дозволяє програмам зайняти весь дисплей, а потім відновити попередній вміст при виході, повернувшись на головний екран.

Як і в Mac OS X Lion 10.7, у терміналі є пункт меню, який ви можете використовувати для переключення екранів вручну:

Перегляд> Показати / приховати альтернативний екран

Це передбачено насамперед для того, щоб ви могли переглядати або копіювати текст із альтернативного екрану після виходу програми "повний екран". Xterm має аналогічну команду.

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

Залежно від програми, у неї може бути аргумент командного рядка або якийсь інший спосіб, щоб налаштувати його на використання головного екрану. наприклад, less -X.

Деякі записи Terminfo спеціально розроблені для придушення з допомогою альтернативного екрану, наприклад, xterm1. TERM=xterm1 emacsзапустить Emacs на головному екрані. Я не рекомендую користуватися xterm1постійно, оскільки це відключає ряд інших корисних функцій порівняно з типовими xterm-256colorдля Lion.

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

Щоб побачити, яка програма зараз працює, подивіться назву програми, що відображається у вікні терміналу або вкладці вкладки, або подивіться на вікно інспектора ( Оболонка> Показати інспектора ). Останній процес у списку Інспектора - це (як правило) поточна програма, що використовує екран. Це те, що вам потрібно налаштувати для використання головного екрану.


1
Це звучить як дуже перспективна відповідь. Чи є розумним поясненням, що програма могла б вийти ненормально, залишаючи альтернативний екран активним?
Стів Мадсен

Якщо ви знову опинилися в оболонці після запуску програми "на весь екран", так, це є можливою, хоча більшість популярних програм, як і ті, які я перераховував, надійно стосуються прибирання після себе. Якщо програма "повний екран" виходить з ладу, вона може залишити термінал на альтернативному екрані. Однак ви сказали, що ви спробували Shell> Send Hard Reset , що включає перемикання назад на головний екран. Якщо це повториться, ви можете спробувати скористатися цією командою для переключення назад:tput rmcup
Chris Page

Інша можливість полягає в тому, що програма покинула термінал з "областю прокрутки". Існують коди, які повідомляють терміналу прокручувати лише піддіапазон ліній під час прокрутки. Програми використовують це для відображення рядків стану, наприклад, які не прокручуються з екрана. Якщо область прокрутки не містить верхнього рядка, текст не прокручується до журналу прокрутки. Знову ж таки, ви сказали, що ви спробували жорсткий перезавантаження, який повинен також зрозуміти.
Кріс Пейдж

2
У моєму випадку, здається, що трапилось те, що мій sshсеанс на віддаленій машині не вдався (вичерпано?), Поки я був vi, мабуть, покинув термінал на альтернативному екрані (бо viніколи не давали шансу очистити). Після цього будь-який новий sshсеанс у тому ж терміналі демонструватиме проблему, описану ОП, поки я не вирішив проблему, вибравши пункт меню « Вид»> «Приховати альтернативний екран ».
Гефест

Дякуємо, Перегляд> Показати / приховати альтернативний екран допоміг. У ньому є комбінація клавіш, яку я, мабуть, несвідомо потрапив і не знав, що сталося або як скасувати
aexl
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.