manページは素晴らしい、問題はmanリーダーだ
(whynothugo.nl)- manページが「相互リンクがない」あるいは「ターミナルウィンドウを狭めてもテキストが再整形されない」と批判されることは多いが、実際には manフォーマット自体がリンク機能と再整形機能をサポートしている
- 問題は manページを読むツール(
manコマンドやlessなど) がこれらの機能を適切に実装していないことにある
manページのフォーマット構造
- man文書は主に2つのフォーマットで書かれている:
- mdoc(7): 現代的で意味ベースのマークアップフォーマット
- man(7): 1979〜1989年に使われていた旧式フォーマット
- 例(mdoc構文の一部):
.Sh NAME .Nm openrc .Nd stops and starts services for the specified runlevel .Sh SYNOPSIS .Sh、.Nm、.Ndはそれぞれセクション見出し、コマンド名、説明を意味する- 直接編集するには、mdocマクロ一覧を参照する必要がある
参照(リンク)機能も組み込まれている
- mdocフォーマットには次のようなリンクマクロが含まれている:
.Xr: 他のmanページを参照するクロスリファレンス.Sx: 同じページ内の別セクションへの参照- HTMLに変換すると実際のリンクとしてレンダリングされ、ブラウザでクリックできる
.Shセクション見出しはアンカーとして扱われ、.Sxリンクのリンク先になれる- しかし、ターミナルで
manコマンドから表示すると、このリンク機能は動作しない
結論: 問題はmanフォーマットではなくビューアにある
- 現在の
manコマンドはページをlessにパイプして表示しているため、この方式ではリンクを処理できない - 解決策は次のとおり:
- manフォーマットを理解し、リンクをサポートする新しいページビューアが必要
- ターミナル幅の変更時に テキストの自動再整形(reflow) 機能もあわせて実装すればさらによい
背景情報
- mdoc(7) は1990年代の4.4BSDで導入されたフォーマット
- man(7) は1979年〜1989年の間に使われていた古典的フォーマットで、現在はほとんど使われていない
6件のコメント
Slackボットの通知で1行目だけ見てすぐ共感してクリックしました。私もリーダーが問題だという指摘に100%同意します。
…でも、現代人は
manはおろかターミナルも使わないみたいなんですよね。rtfmはロマンの時代の遺物になってしまいましたね。私は mac では次のように定義しておいて、
pman lsのように使って PDF で見ています。すごく役立つヒントですね……ありがとうございます
すごい、本当にありがとうございます
わあ、これは本当に共感します。
manはちゃんと読めば本当に素晴らしいのですが、うまく読むのがとても難しいんですよね..Hacker Newsの意見