Динамическое переформатирование справочных страниц по изменениям размеров терминала


14

Один из моих общих рабочих процессов заключается в открытии страницы руководства в терминале, а затем в другом терминале для проверки. Страница man отформатирована до начальных размеров первого терминала. Когда я теперь изменяю размеры своих окон (или мой WM делает это для меня автоматически), появляется либо пробел справа от предварительно отформатированной страницы, либо перенос строк. В этот момент я обычно q(uit) и !!(снова запускаю), который теряет мою позицию на странице.

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

Я пытался просматривать страницы справочника, искать в Интернете, задавать вопросы по IRC - и все такое - но ничего не смог придумать.

  • Могу ли я инициировать переформатирование изнутри или снаружи утилиты man?

  • Существует ли версия утилиты man, которая динамически изменяет размер страницы?

  • Есть ли способ настроить некоторую часть процесса форматирования / отображения, чтобы он обновлялся SIGWINCH?


manфактически использует lessкак пейджер; Вы можете нажать hна странице lessсправки, чтобы получить экран справки. Я не уверен, почему он не меняет размер страницы
руководства

3
Проблема заключается в том, manчто вывод выводится в ширину термина. То, что вам нужно, это пейджер, который может пометить, где вы находитесь в документе, повторно выполнить man (о котором он на самом деле не имеет представления, так как он передан в него) и вернуться к закладке. Кроме того, новая команда man, которая включает в себя пейджер.
Ник

Ответы:


11

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

Вам нужно, чтобы пейджер мог переформатировать. Как сказал @Robin Green, это HTML.

Если вы хотите использовать HTML, но все еще работаете в терминале, вы можете указать man(1)вывод в HTML и вызвать браузер в текстовом режиме, чтобы отобразить его.

man -Hlynx man

Это отобразит man(1)man-страницу в браузере текстового режима Lynx. Lynx напрямую не реагирует на изменения размера окна, но вы можете нажать ctrl-R, и lynx повторно отобразит страницу для нового размера окна.

Есть два других браузера в текстовом режиме, о которых я знаю: ссылки и ссылки. Вы можете поэкспериментировать с теми и Lynx и определить, какие из них дают вам наилучший опыт для просмотра страниц man. Возможно, вы захотите использовать пользовательскую конфигурацию только для справочных страниц и вызвать скрипт, который вызывает браузер с этой конкретной конфигурацией.

Вы можете поместить понравившиеся опции man в MANOPTпеременную окружения.

$ export MANOPT=-Hlynx
$ export MANOPT=-Hmanlynx # manlynx invokes lynx with a different configuration.

Вам нужно будет установить groffпакет, manчтобы иметь возможность генерировать HTML.


Ограничение -Hаргумента для человека заключается в том, что он не использует веб-сервер, а просто небольшой файл. Хотя это позволяет избежать проблем с неправильно настроенными межсетевыми экранами, оно не позволяет создавать гиперссылки на другие страницы руководства (которые поддерживают по крайней мере некоторые сторонние сценарии man-> html).
Робин Грин

1
@Robin Green: Вопрос в поддержке man-страниц в окнах терминалов большого размера. В этом контексте не использование веб-сервера не является ограничением. И отсутствие гиперссылок не является ограничением, поскольку отображаемые страницы руководства lessне имеют гиперссылок.
Camh

Это правда, это, безусловно, правильный ответ.
Робин Грин

4

Конвертируйте man-страницы в html на лету, используя подходящий скрипт, такой как manserver , просматривая их в веб-браузере (который, конечно, может быть текстовым веб-браузером, таким как lynx).

Вероятно, именно поэтому никто не решил эту проблему - потому что проблема стала неактуальной с развитием сценариев man-> html.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.