LINUX.ORG.RU
ФорумTalks

qman — man page viewer здорового человека

 , qman,


0

3

Откопал ссылку на такую штуку в Арчевики. Простая программа, реализующая для man pages в терминале то, что еще 35 лет назад было в справочных системах под DOS-ом, + большее.

  • Страницы оглавлений, отображающие все маны, установленные в системе, сгруппированные по категориям
  • Интерактивный инкрементальный apropos и whatis (search as you type)
  • Инкрементальный поиск по странице
  • Активные гиперссылки на другие маны
  • Активные гиперссылки на http(s) и email адреса.

Навигация вверх-вниз по странице сделана максимально удобным образом:

  • Если в направлении листания на экране есть следующая ссылка, фокус переходит к ней.
  • Если в направлении листания на экране следующей ссылки не видно, текст сдвигается на 1 строку.

Программа реализована на Си с минимумом зависимостей.

Зависимости в собранном виде и размер:

vadim@aquila:~$ ldd /usr/bin/qman
	linux-vdso.so.1 (0x00007dbe6007f000)
	libncursesw.so.6 => /usr/lib/libncursesw.so.6 (0x00007dbe5ffa3000)
	libinih.so.0 => /usr/lib/libinih.so.0 (0x00007dbe5ff9e000)
	libc.so.6 => /usr/lib/libc.so.6 (0x00007dbe5fdb2000)
	/lib64/ld-linux-x86-64.so.2 => /usr/lib64/ld-linux-x86-64.so.2 (0x00007dbe60081000)
vadim@aquila:~$ ls -lh /usr/bin/qman
-rwxr-xr-x 1 root root 116K мая 29 11:43 /usr/bin/qman

Сорцы и скриншоты тут: https://github.com/plp13/qman

★★

Последнее исправление: wandrien (всего исправлений: 1)

Угадал автора по заголовку.

firkax ★★★★★
()

Программа реализована на Си с минимумом зависимостей.

Для сборки нужен cog, но в De*an это совсем другой пакет. Нужно установить python3-cogapp. В общем, вот:

diff --git a/src/meson.build b/src/meson.build
index 65eb162..02fdf6e 100644
--- a/src/meson.build
+++ b/src/meson.build
@@ -5,7 +5,7 @@ project('qman', 'c',
 )

 # Configuration subsystem sources (generated from config_def.py using cog)
-cog = find_program('cog')
+cog = find_program('cogapp')
 cog_cmd = [cog, '-d', '-o', '@OUTPUT@', '@INPUT@']
 config_h = custom_target('config.h',
   input: 'config.h.cog',
dataman ★★★★★
()

Как автор зарелизит, тогда и приходи)

greenman ★★★★★
()
Ответ на: комментарий от dataman

Меня больше смущает, что автор src/__pycache__ закоммитил. Ну и зачем вообще вкомпиливать конфиг программы с помощью велосипеда на питоне.

theNamelessOne ★★★★★
()
Последнее исправление: theNamelessOne (всего исправлений: 1)

Не, серьезно, это просто корявая версия GNU info. Оно уже сто лет как есть, просто никто не поддерживает потому что «и так нормально».

cumvillain
()
Ответ на: комментарий от Shadow

Попытка запустить tkman на актуальной версии tcl приводит к этому:

Error in startup script: unknown option "-foreground"
    while executing
"$bitmap configure -foreground $man(textfg) -background {}"
    (procedure "manPrefDefaultsSet" line 30)
    invoked from within
"manPrefDefaultsSet"
    (procedure "manDot" line 7)
    invoked from within
"manDot"
    (procedure "manDescManiCheck" line 4)
    invoked from within
"manDescManiCheck return"
    (procedure "manDescDefaults" line 4)
    invoked from within
"manDescDefaults"
    invoked from within
"if {!$manx(defaults)} manDescDefaults"
    (file "/usr/share/tkman/tkman.tcl" line 10545)

А попытка собрать tcl 8.4 приводит к этому:

/usr/bin/ld: fixstrtod.o: в функции «fixstrtod»:
fixstrtod.c:(.text+0x0): повторное определение «fixstrtod»; strtod.o:strtod.c:(.text+0x0): здесь первое определение
collect2: ошибка: выполнение ld завершилось с кодом возврата 1

Вот почему программы на чистом Си с минимумом зависимостей продолжают рулить и педалить.

wandrien ★★
() автор топика
Ответ на: комментарий от cumvillain

Не, серьезно, это просто корявая версия GNU info.

GNU info — и есть корявая херня.

В отличие от убогой GNU info, данный софт прежде всего эргономичен и не взывает вопроса «почему так всрато?»

wandrien ★★
() автор топика
Ответ на: комментарий от wandrien

info тоже не вызывает. Плюс там нормальный язык для написания и многоглавые документы. Потому что маны сейчас, внезапно, генерят чем ни попадя, какая-никакая семантика есть по сути только в mdocml (но его руками пишут только bsdшники), а группировать маны к одной либе надо эвристикой. Ну такое себе.

cumvillain
()
Последнее исправление: cumvillain (всего исправлений: 1)
Ответ на: комментарий от cumvillain

info тоже не вызывает.

Стрелочками подгонять курсор к каждой ссылке для перехода — это ровно то, как я мечтал проводить зимние вечера. Порой быстрее открыть новый терминал и набрать там man чо надо вместо этого занятия. Зачем нужен свободный курсор в программе, которая не предполагает редактирования текста — непонятно.

Далее, в info не вижу никакого инкрементального поиска.

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

Давайте без wishful thinking. Есть факт: существует дохера документации в формате man pages и постоянно появляется новая. Одни только подробные талмуды по systemd чего стоят. Эти маны нужно чем-то читать. Желательно в терминале. Желательно удобно.

wandrien ★★
() автор топика
Ответ на: комментарий от dataman

дебиан видимо переименовывает, реально он cog. Еще есть старый-старый пакет cog, вот видимо с ним конфликт разрулили.

irton ★★★★★
()
Ответ на: комментарий от wandrien

Стрелочками подгонять курсор к каждой ссылке для перехода — это ровно то, как я мечтал проводить зимние вечера.

Tab?

Rootlexx ★★★★★
()
Ответ на: комментарий от Rootlexx

Tab?

Он будет прыгать на следующую ссылку, наплевав, что до неё может быть еще 3 страницы, которые ты не прочитал.

Я же говорю, всратый UI — всрат.

info — это типичная программа «UI делал программист».

wandrien ★★
() автор топика
Ответ на: комментарий от her_s_gory

Меня уже трисёт от этих закапывальщиков всего подряд. Когда спросишь, что не так, то слышишь только «not cool», «fusty design» и прочий пук-среньк

d ★★★★
()
Ответ на: комментарий от wandrien

Он будет прыгать на следующую ссылку, наплевав, что до неё может быть еще 3 страницы, которые ты не прочитал.

Тогда я не понимаю, в каком случае может понадобиться «стрелочками подгонять курсор к каждой ссылке для перехода», но при этом нельзя воспользоваться Tab. Если вы ещё не прочли эти три страницы, то, наверное, ни к какой ссылке стрелочками вы курсор не двигаете?

P.S. Управление делал не просто программист, а программист — любитель Emacs.

Rootlexx ★★★★★
()
Последнее исправление: Rootlexx (всего исправлений: 1)
Ответ на: комментарий от wandrien

Логично, что где-то оно работает на свежем tcl/tk. Гуглим, находим:

https://aur.archlinux.org/packages/tkman

- качаем https://aur.archlinux.org/tkman.git, там 3 патча, сначала накладываем те, что накладываются, потом вручную добавляем какую-то строчку из патча от OpenBSD.

MANPATH="/usr/share/man:/usr/local/share/man" ./tkman

- и всё заработало!

Что характерно, дурацкие info там же.

Shadow ★★★★★
()
Последнее исправление: Shadow (всего исправлений: 2)
Ответ на: комментарий от wandrien

Фига себе. На убунте 20.04 без проблем. А ты арчевод?

Shadow ★★★★★
()
Ответ на: комментарий от Rootlexx

Тогда я не понимаю, в каком случае может понадобиться «стрелочками подгонять курсор к каждой ссылке для перехода», но при этом нельзя воспользоваться Tab. Если вы ещё не прочли эти три страницы, то, наверное, ни к какой ссылке стрелочками вы курсор не двигаете?

  1. В программе, не предполагающей правку текста, не нужен текстовый курсор. Вообще. Двигать курсор стрелочками в info — это решение несуществующей задачи вместо решения существующей.
  2. То, как он двигается – отдельная песня. Сначала вы двигаете курсор, и ничего не происходит, кроме движения курсора. двигаете, двигаете, двигаете… додвигали до края экрана. И тут экран рывком перескакивает на половину высоты страницы. Что хотел сказать автор?

Вот простое и понятное управление, описанное в ОП:

  • Если в направлении листания на экране есть следующая ссылка, фокус переходит к ней.
  • Если в направлении листания на экране следующей ссылки не видно, текст сдвигается на 1 строку.

Всё. Я не знаю, что тут еще обсуждать. Это очевидно как мычание. Управление, которое:

  • предсказуемое
  • плавное
  • не мельтишит на экране и требует дергать глазами вслед за страницей и заново искать точку фокусировки на странице
  • не выглядит как баг

Зато cumvillain ворвавшись в тред сразу вынес вердикт: «Не, серьезно, это просто корявая версия GNU info.» Аргументов — ноль.

Хотите пользоваться своим любимым info из религиозных побуждений — пользуйтесь. Никто у вас его не отнимает.

wandrien ★★
() автор топика

«Сначала вы двигаете курсор, и ничего не происходит, кроме движения курсора. двигаете, двигаете, двигаете… додвигали до края экрана. И тут экран рывком перескакивает на половину высоты страницы. Что хотел сказать автор?»

Хотя… я знаю, что хотел сказать автор. Автор работал на терминалах середины 80-х.

Но мы сегодня живём в 2024-м году. Пора переписать этот хлам.

wandrien ★★
() автор топика

По названию, я подумал что оно с гуем на Qt.

Хорошая штука. Только в Emacs это уже всё есть.

hateyoufeel ★★★★★
()
Последнее исправление: hateyoufeel (всего исправлений: 1)
Ответ на: комментарий от cumvillain

Не знаю, никогда не видел. Какой пакет скачать, какими опциями запускать? Русские Маны открываются по man тема, если в LANG написано ru_RU. Info открывается исключительно на английском, чяднт?

Aceler ★★★★★
()
Ответ на: комментарий от cumvillain

А. GNU пишет шикарную локализованную справку прямо в program --help, сообщество пишет локализованные ман-страницы по любой теме, а локализованные info никто не написал.

А что мешает? :-)

Aceler ★★★★★
()
Ответ на: комментарий от Aceler

Все просто, GNU info не взлетел. Тем не менее, тулинг у него сильно приятнее, вместо сотни способов сгенерить разношерстные маны есть один нормальный читаемый язык. Короче, как технология оно сильно лучше. Просто не случилось.

cumvillain
()
$ git clone https://aur.archlinux.org/qman-git.git
$ cd qman-git
$ makepkg
==> Making package: qman-git nightly-6 (Wed 29 May 2024 09:04:59 PM MSK)
==> Checking runtime dependencies...
==> Checking buildtime dependencies...
==> Missing dependencies:
  -> meson
  -> pandoc-cli
  -> python-cogapp
==> ERROR: Could not resolve all dependencies.


# pacman -S --asdep meson pandoc-cli python-cogapp
resolving dependencies...
looking for conflicting packages...

Package (230)                                    New Version   Net Change  Download Size

extra/ghc-libs                                   9.2.8-1       123.26 MiB      16.16 MiB
extra/haskell-aeson                              2.1.2.1-46      8.19 MiB       1.05 MiB
...
extra/haskell-zlib                               0.6.3.0-60      0.66 MiB       0.12 MiB
extra/hslua-cli                                  1.4.1-48        0.11 MiB       0.03 MiB
world/lua-lpeg                                   1.1.0-2         0.06 MiB       0.03 MiB
world/numactl                                    2.0.18-1        0.23 MiB               
world/python-tqdm                                4.66.4-1        0.60 MiB       0.12 MiB
world/meson                                      1.4.0-5        12.42 MiB       2.00 MiB
extra/pandoc-cli                                 0.1.1.1-108     0.09 MiB       0.03 MiB
world/python-cogapp                              3.3.0-5         0.44 MiB       0.06 MiB

Total Download Size:    67.64 MiB
Total Installed Size:  486.76 MiB

:: Proceed with installation? [Y/n]

Угадайте, что я ответил?

UPD. Если кто не разглядел, лопата здесь: Package (230). Просто целиком эта простыня в камент не влезла. 230, Карл! Совсем с дуба рухнули. Похоже оно тянет все хаскелевы пакеты, какие только смогло найти в репах.

dimgel ★★★★★
()
Последнее исправление: dimgel (всего исправлений: 3)
Ответ на: комментарий от her_s_gory

Как правило отсутствие «examples» и «how to use» на первой странице.

thunar ★★★★★
()

это для тех кого забанил apropos || man -k ?🤡🤡🤡

etwrq ★★★★★
()
Ответ на: комментарий от wandrien

А попытка собрать tcl 8.4 приводит к этому:

А это излом в GCC, он стал строже со временем. Флажок -fcommon отключает это поведение.

EXL ★★★★★
()
Ответ на: комментарий от dimgel

Похоже оно тянет все хаскелевы пакеты, какие только смогло найти в репах.

Это уже Arch Linux наркомания, когда они добавить все Haskell-пакеты себе в репозиторий, это Pandoc потянул за собой. С другой стороны, непонятно зачем для сборки небольшой консольной утилиты на C требуется Pandoc.

EXL ★★★★★
()

Аффвтор в своём PKGBUILD-е умудрился собрать просто все пункты из списка «как не надо делать». Вот по порядку.

Думаю, что в исходниках там такое же говнище Не, уже не «думаю», подтверждаю, говнище. Но зато «на Си с минимумом зависимостей», дооо.

intelfx ★★★★★
()
Последнее исправление: intelfx (всего исправлений: 1)
Ответ на: комментарий от EXL

Это уже Arch Linux наркомания, когда они добавить все Haskell-пакеты себе в репозиторий

Ты через Промт пишешь на форум?

intelfx ★★★★★
()
Закрыто добавление комментариев для недавно зарегистрированных пользователей (со score < 50)