Команда «меньше» Cygwin заставляет bash забыть историю экранных буферов - PullRequest
1 голос
/ 23 июля 2011

У меня возникают некоторые проблемы с моим терминалом Cygwin, когда я запускаю 'less'.'less' отлично работает, но когда я выхожу из него, вся история экранного буфера терминала теряется.Любые предложения?

Я использую Cygwin на WinXP.

Ответы [ 3 ]

2 голосов
/ 31 декабря 2013

Это не имеет ничего общего с Bash. Стирается текст, отображаемый вашим эмулятором терминала.

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

Это выполняется путем печати строк, определенных записями smcup и rmcup terminfo .

Они зависят от значения переменной среды $TERM.

Если эти строки не напечатаны , или если они настроены на что-то, что не сохраняет и не восстанавливает состояние вашего терминала, тогда less заменит все содержимое вашего экрана содержимым файла, который вы хотите просмотреть, а затем не восстанавливать его.

Использование опции -X для less (в соответствии с предложением принятого вами ответа говорит less not для печати строк smcup и rmcup - - который я ожидал бы вызвать проблему, которую вы пытаетесь решить.

Если вы хотите сохранить и восстановить состояние вашего терминала (что означает, что вывод, полученный с помощью less, исчезнет, ​​когда вы выйдете), вам нужно убедиться, что переменная окружения $TERM установлена ​​на что-то с правильным smcup и rmcup настроек. Я считаю, что установка xterm обычно работает.

Если вы амбициозны, вы можете создать свою собственную запись terminfo и использовать команду tic, чтобы «скомпилировать» ее в двоичный формат, используемый системой.

Ответ Давида Ференци предлагает другую возможную причину проблемы; это не то, с чем я когда-либо сталкивался.

(Мнения сильно отличаются от того, является ли сохранение и восстановление состояния терминала хорошей вещью. Эта запись в блоге была написана кем-то, кто сильно ее не любит. Лично мне это нравится; если я хочу запустить полноэкранную команду и держите ее вывод видимым, пока я занимаюсь чем-то другим, я просто запускаю ее в другом окне.)

(Оригинального плаката не было на сайте около 2,5 лет, поэтому мы не должны ожидать каких-либо отзывов, но эти ответы, вероятно, будут полезны для других.)

1 голос
/ 31 декабря 2013

У меня была такая же проблема на моем новом ноутбуке.Я давно использую Cygwin на 64-битной Windows 7 и никогда не сталкивался с этой проблемой.Но в новой новой системе (также 64-битной Windows 7) тот же Cygwin с той же конфигурацией очищал экранный буфер всякий раз, когда я выходил из LESS, MAN, VIM и т. Д. И это меня очень беспокоило.Поскольку я использую Cygwin внутри эмулятора терминала ConEmu, я заподозрил ConEmu.После долгих часов сравнения всего, что может быть причиной (переменные среды, конфигурации, версии программного обеспечения и т. Д.), Я поговорил с автором ConEmu (и он был действительно великолепен, образцовая поддержка свободного программного обеспечения!).И мы наконец нашли причину.

Единственная разница (или одна из немногих) заключалась в размере дисплея.Старый ноутбук имеет разрешение экрана 1366 x 768 пикселей, а новый - 1920 x 1080. И я использую весь экран для окна терминала.Это действительно странно, но если высота окна терминала превышает 62 строки, экранный буфер очищается после выхода из LESS, VIM и т. Д. Не имеет значения, выполняется ли Cygwin внутри ConEMu или обычного cmd.exe. Уменьшение размера окна терминала решило проблему. Высота окна в 62 строки кажется мне подходящей.Кроме того, при некоторых больших значениях высоты процесс LESS иногда зависал.

Кажется, что это проблема Cygwin.

Вся история, которую вы можете прочитать здесь .

Может, это кому-нибудь поможет.Мне понадобилось очень много времени, чтобы решить это.Хотя решение (точнее обходной путь) чертовски глупо:)

1 голос
/ 23 июля 2011

Попробуйте запустить как less -X или задайте для переменной среды LESS значение -X.

...