#10.15 Catalina での注意事項
10.15 からは /usr/share/man もリードオンリーとなり、日本語 manpage を /usr/share/man/ja_JP.UTF-8 に置けなくなりました(なお、/etc/man.conf は問題なく編集可能でした)。
よって、日本語 manpage は /usr/local/share/man/ja_JP.UTF-8 にインストールするのが良さそうです。
場合によっては manpath の mapping も適宜修正する必要があるかもしれません。
man.conf の mapping セクション
#
# If people ask for "man foo" and have "/dir/bin/foo" in their PATH
# and the docs are found in "/dir/man", then no mapping is required.
#
# The below mappings are superfluous when the right hand side is
# in the mandatory manpath already, but will keep man from statting
# lots of other nearby files and directories.
#
MANPATH_MAP /bin /usr/share/man
MANPATH_MAP /sbin /usr/share/man
MANPATH_MAP /usr/bin /usr/share/man
MANPATH_MAP /usr/sbin /usr/share/man
MANPATH_MAP /usr/local/bin /usr/local/share/man
MANPATH_MAP /usr/local/sbin /usr/local/share/man
MANPATH_MAP /usr/X11/bin /usr/X11/man
MANPATH_MAP /usr/bin/X11 /usr/X11/man
MANPATH_MAP /usr/bin/mh /usr/share/man
参考とした文献
macOS 10.15 CatalinaでファイルシステムがRead-Onlyになる仕様はオプトアウトなしで、完全に無効にすることは不可能。 | AAPL Ch.
https://applech2.com/archives/20190610-read-only-system-volume-apfs-refresh.html
あっさり目に結論
$ brew install nkf
$ brew install groff
した上で、
JNROFF /usr/local/bin/nkf -w | GROFF_NO_SGR=true /usr/local/bin/groff -Dutf8 -Tutf8 -mandoc -mja -E
例えば上記の内容で JNROFF
の指定に関する記述を書き換えます。記入先は /etc/man.conf
でも良いですし、/etc/man.conf
から(コピペで) $HOME/.man/man.conf
1 を作って alias man='man -C $HOME/.man/man.conf'
を $HOME/.profile
や $HOME/.bashrc
に書き込んであげる等しても良いでしょう。
nkf の強力な文字コード自動認識により、ソースが euc でも sjis でも utf8 でも関係なく読めるようになります。
スクリーンショット
man.conf サンプル
Color エスケープシーケンス利用版。文字を色分けしたい場合はターミナルエミュレータ2の側で対応可。変更点は NROFF と JNROFF と PAGER の 3 箇所。PAGER については環境変数として指定することで動的に上書き出来る。
Color エスケープシーケンスを使わない場合はページャー3の側で色分けを指定可。
#
# Generated automatically from man.conf.in by the
# configure script.
#
# man.conf from man-1.6c
#
# For more information about this file, see the man pages man(1)
# and man.conf(5).
#
# This file is read by man to configure the default manpath (also used
# when MANPATH contains an empty substring), to find out where the cat
# pages corresponding to given man pages should be stored,
# and to map each PATH element to a manpath element.
# It may also record the pathname of the man binary. [This is unused.]
# The format is:
#
# MANBIN pathname
# MANPATH manpath_element [corresponding_catdir]
# MANPATH_MAP path_element manpath_element
#
# If no catdir is given, it is assumed to be equal to the mandir
# (so that this dir has both man1 etc. and cat1 etc. subdirs).
# This is the traditional Unix setup.
# Certain versions of the FSSTND recommend putting formatted versions
# of /usr/.../man/manx/page.x into /var/catman/.../catx/page.x.
# The keyword FSSTND will cause this behaviour.
# Certain versions of the FHS recommend putting formatted versions of
# /usr/.../share/man/[locale/]manx/page.x into
# /var/cache/man/.../[locale/]catx/page.x.
# The keyword FHS will cause this behaviour (and overrides FSSTND).
# Explicitly given catdirs override.
#
# FSSTND
FHS
#
# This file is also read by man in order to find how to call nroff, less, etc.,
# and to determine the correspondence between extensions and decompressors.
#
# MANBIN /usr/local/bin/man
#
# Every automatically generated MANPATH includes these fields
#
MANPATH /usr/share/man
MANPATH /usr/local/share/man
MANPATH /usr/X11/man
#
# Uncomment if you want to include one of these by default
#
# MANPATH /opt/*/man
# MANPATH /usr/lib/*/man
# MANPATH /usr/share/*/man
# MANPATH /usr/kerberos/man
#
# Set up PATH to MANPATH mapping
#
# If people ask for "man foo" and have "/dir/bin/foo" in their PATH
# and the docs are found in "/dir/man", then no mapping is required.
#
# The below mappings are superfluous when the right hand side is
# in the mandatory manpath already, but will keep man from statting
# lots of other nearby files and directories.
#
MANPATH_MAP /bin /usr/share/man
MANPATH_MAP /sbin /usr/share/man
MANPATH_MAP /usr/bin /usr/share/man
MANPATH_MAP /usr/sbin /usr/share/man
MANPATH_MAP /usr/local/bin /usr/local/share/man
MANPATH_MAP /usr/local/sbin /usr/local/share/man
MANPATH_MAP /usr/X11/bin /usr/X11/man
MANPATH_MAP /usr/bin/X11 /usr/X11/man
MANPATH_MAP /usr/bin/mh /usr/share/man
#
# NOAUTOPATH keeps man from automatically adding directories that look like
# manual page directories to the path.
#
#NOAUTOPATH
#
# NOCACHE keeps man from creating cache pages ("cat pages")
# (generally one enables/disable cat page creation by creating/deleting
# the directory they would live in - man never does mkdir)
#
#NOCACHE
#
# Useful paths - note that COL should not be defined when
# NROFF is defined as "groff -Tascii" or "groff -Tlatin1";
# not only is it superfluous, but it actually damages the output.
# For use with utf-8, NROFF should be "nroff -mandoc" without -T option.
# (Maybe - but today I need -Tlatin1 to prevent double conversion to utf8.)
#
# If you have a new troff (version 1.18.1?) and its colored output
# causes problems, add the -c option to TROFF, NROFF, JNROFF.
#
TROFF /usr/bin/groff -Tps -mandoc -c
#NROFF /usr/bin/groff -Wall -mtty-char -Tascii -mandoc -c
NROFF /usr/local/bin/groff -Wall -mtty-char -Tascii -mandoc
#JNROFF /usr/bin/groff -Tnippon -mandocj -c
JNROFF /usr/local/bin/nkf -w | /usr/local/bin/groff -Dutf8 -Tutf8 -mandoc -mja -E
#JNROFF /usr/local/bin/nkf -w | GROFF_NO_SGR=true /usr/local/bin/groff -Dutf8 -Tutf8 -mandoc -mja -E
EQN /usr/bin/eqn -Tps
NEQN /usr/bin/eqn -Tascii
JNEQN /usr/bin/eqn -Tnippon
TBL /usr/bin/tbl
# COL /usr/bin/col
REFER /usr/bin/refer
PIC /usr/bin/pic
VGRIND
GRAP
#PAGER /usr/bin/less -is
PAGER /usr/bin/less -isR
#PAGER /usr/local/bin/lv -c
#PAGER /usr/local/bin/most -s
BROWSER /usr/bin/less -is
HTMLPAGER /bin/cat
CAT /bin/cat
#
# The command "man -a xyzzy" will show all man pages for xyzzy.
# When CMP is defined man will try to avoid showing the same
# text twice. (But compressed pages compare unequal.)
#
CMP /usr/bin/cmp -s
#
# Compress cat pages
#
COMPRESS /usr/bin/bzip2
COMPRESS_EXT .bz2
#
# Default manual sections (and order) to search if -S is not specified
# and the MANSECT environment variable is not set.
#
MANSECT 1:1p:8:2:3:3p:4:5:6:7:9:0p:tcl:n:l:p:o
#
# Default options to use when man is invoked without options
# This is mainly for the benefit of those that think -a should be the default
# Note that some systems have /usr/man/allman, causing pages to be shown twice.
#
#MANDEFOPTIONS -a
#
# Decompress with given decompressor when input file has given extension
# The command given must act as a filter.
#
.gz /usr/bin/gunzip -c
.bz2 /usr/bin/bzip2 -c -d
.z
.Z /usr/bin/zcat
.F
.Y
こってり系の説明
環境
機種名: Mac mini
機種ID: Macmini7,1
プロセッサ名: Intel Core i5
プロセッサ速度: 1.4 GHz
プロセッサの個数: 1
コアの総数: 2
二次キャッシュ(コア単位): 256 KB
三次キャッシュ: 3 MB
ハイパー・スレッディング・テクノロジ: 有効
メモリ: 4 GB
🍎 macOS Mojave 10.14.5 🍏
出典・参考文献
Unixシェル#主なUNIXシェルの設定ファイル - Wikipedia
https://ja.wikipedia.org/wiki/Unixシェル#主なUnixシェルの設定ファイル
FreeBSDで日本語マニュアル - PC日記
http://www.wizard-limit.net/mt/pc/archives/005138.html
第18回「温故知新」:玩式草子─ソフトウェアとたわむれる日々|gihyo.jp … 技術評論社
https://gihyo.jp/lifestyle/serial/01/ganshiki-soushi/0018
サポートページ:Software Design 2018年8月号:|gihyo.jp … 技術評論社
https://gihyo.jp/magazine/SD/archive/2018/201808/support
man page をHTML(PDF)にして持ち歩く - それマグで!
http://takuya-1st.hatenablog.jp/entry/2014/03/13/051804
homebrew - Qiita
https://qiita.com/tsunemiso/items/9d8cd616ae72572c77d9
日本語版のmanページをMacで開く(groffアップデート) - Qiita
https://qiita.com/yu-ichiro/items/ea9c672e2d7488416db9
manコマンドの表示を日本語化した話 - Qiita
https://qiita.com/fuwamaki/items/fbe7483444261e2425fe
nkfのmanページ文字化けをなんとかする - Qiita
https://qiita.com/Takeru/items/1694653253a9bf038b47
日本語のmanページをプレビューする - Qiita
https://qiita.com/miminashi/items/3f5855871fd431017354
Macのopenコマンドでファイルを開く - Qiita
https://qiita.com/aokiplayer/items/74c7adc3d951a6fbd41f
今回は各出典内・参考文献内の記述を色々と組み合わせ、混ぜ合わせ、繋ぎ合わせてみました。
Homebrew
公式サイト
https://brew.sh/index_ja
公式サイトのワンライナーをコピペ実行。
最近のヤツは Xcode 関連のインストールについても案内してくれるようです。
ワンライナーで一発という性質上、偽サイトに気をつける必要があるかも。
とても便利。
日本語 manpage
GNU 系と BSD 系でオプションが異なるコマンドに注意
参考:jmanを使わずにMacのmanを日本語化する方法 | Macとかの雑記帳
http://tukaikta.blog135.fc2.com/blog-entry-224.html
例えば stat コマンドなどはオプションが随分違います。
GNU の stat
http://linuxjm.osdn.jp/html/GNU_coreutils/man1/stat.1.html
FreeBSD の stat
https://www.freebsd.org/cgi/man.cgi?query=stat&apropos=0&sektion=0&manpath=FreeBSD+12.0-RELEASE+and+Ports&arch=default&format=html
他にも例えば標準採用のCコンパイラなんかにも違いが有ったような。
説明が合わないコマンドは LANG=C man コマンド名
等で英語のページを参照する、該当の日本語 manpage はインストールしない(例えば GNU Coreutils 系を除外)といった工夫が必要かもしれません。もしくはシステムを FreeBSD とのデュアルブートにして、日本語 manpage の参照先をそちらにリンクしてしまっても面白いかも。
なお、Web 上では以下のサイトで FreeBSD の日本語 manpage が参照出来るようです。
FreeBSDドキュメント jman(0) FreeBSDドキュメントJMan
https://kaworu.jpn.org/doc/FreeBSD/jman.php
JM Project
https://linuxjm.osdn.jp
https://linuxjm.osdn.jp/download.html
https://linuxjm.osdn.jp/README.html
https://linuxjm.osdn.jp/INSTALL.html
Xcode関係が入っていれば、アーカイブ展開先のディレクトリで
$ make config
$ sudo make install
で行けるはず。
/usr/share/man/ja_JP.UTF-8
にインストールする場合、make config
の段階のディレクトリの所有権指定で group に wheel を設定する必要がありました(owner が root で group も root だとインストールが弾かれる)。
wheel の語源について
sudo - Where did the "wheel" group get its name? - Unix & Linux Stack Exchange
https://unix.stackexchange.com/questions/1262/where-did-the-wheel-group-get-its-name
[Linux] なぜ sudo する権限のあるグループが「 wheel 」という名前なのか « Codaholic
http://codaholic.org/?p=1757
wheel グループって何さ?
Wheel (computing) - Wikipedia
https://en.wikipedia.org/wiki/Wheel_(computing)
Linuxのユーザーとグループって何だろう? (2/2):“応用力”をつけるためのLinux再入門(10) - @IT
https://www.atmarkit.co.jp/ait/articles/1706/02/news014_2.html
JNROFF
これは /etc/man.conf で日本語 manpage の呼び出しに使われる nroff コマンドを指定するセクションです。
nkf -w
Network Kanji Filter
https://ja.osdn.net/projects/nkf/
nkf のオプションで、BOM 無しの UTF-8 出力を命じています。
-w -w8[0] -w16[BL][0]
Unicode を出力する。
-w -w80
UTF8 コードを出力する。 (BOM 無し)
-w8 UTF8 コードを出力する。
-w16 -w16B0
UTF16 コードを出力する。 (Big Endian / BOM 無し)
-w16B
UTF16 コードを出力する。 (Big Endian / BOM 有り)
-w16L
UTF16 コードを出力する。 (Little Endian / BOM 有り)
-w16L0
UTF16 コードを出力する。 (Little Endian / BOM 無し)
BOM / バイトオーダーマーク
https://ja.wikipedia.org/wiki/バイトオーダーマーク
|(パイプ)
pipe - パイプと FIFO の概要
https://ja.wikipedia.org/wiki/パイプ_(コンピュータ)
パイプです。前のコマンドの標準入力を次のコマンドの標準出力に流します。
GROFF_NO_SGR=true
https://linux.die.net/man/1/grotty より。
GROFF_NO_SGR
If set, the old drawing scheme for bold and underline (using the backspace character) is active. Colors are disabled.
この環境変数を指定することで、エスケープシーケンスによる表現力の高い文字の修飾機能が抑制されるようです。
詳しくはこちら。
第18回 「温故知新」:玩式草子─ソフトウェアとたわむれる日々|gihyo.jp … 技術評論社
これを指定しない場合、日本語 man ページを正しく表示する為に、ページャーについて
less -isR
less -isr
あるいは lv なら例えば
lv -c
といったオプションが必要となります。
less の R オプションと r オプションについても上記「玩式草子─ソフトウェアとたわむれる日々」に詳細な言及があります。
以下は JMProject の less のページより引用
-i または --ignore-case
大文字小文字の区別をせず、大文字と小文字は同一とみなして検索をする。 このオプションは、検索パターンに大文字が含まれていた場合には無視される。 つまり、検索パターンに大文字が含まれていた場合、 大文字小文字の区別をした検索をする。
-s または --squeeze-blank-lines
連続した空白行を、1 行の空白行にまとめる。 nroff の出力を閲覧するときに役立つ。
-r または --raw-control-chars
「そのままの」制御文字を表示させるようにする。 デフォルトでは、制御文字をキャレット表記を使って表示する。 例えば、control-A (8 進数 001) は "^A" と表示される。 警告: -r オプションが指定されると、 less は (制御文字のタイプにどのように画面が反応するかに依存しているために) 画面の実際の状況の経過を追うことができない。 よって多くの場合、長い行が誤った位置で分割されてしまうといった問題が生じる。
-R または --RAW-CONTROL-CHARS
-r と似ているが、可能な場合には画面表示を正しく維持しようとする。 このオプションが有効なのは、入力が通常のテキストの場合である。 入力には ANSI の「カラー」エスケープシーケンスが含まれていてもよい。 このシーケンスは
ESC [ ... m
のような形式で、"..." は "m" 以外の 0 個以上の文字である。 画面の状況を保つため、 全ての制御文字と ANSI カラーシーケンスは カーソルを移動させないと仮定している。 less に "m" 以外の文字を ANSI カラーエスケープシーケンスの終了文字として認識させることもできる。 そのためには、認識させたい終了文字のリストを 環境変数 LESSANSIENDCHARS に設定すればよい。
以下は lv の公式サイトの記載より引用(文字化けする場合はテキストエンコーディングを ISO 2022-JP に変更して閲覧)
-c
文字の属性を指定するANSIエスケープシーケンスを通す.
-d
正規表現でサーチする際に, 大文字/小文字を区別しない.
-f
正規表現ではなく固定文字列でサーチを行なう.
こぼれ話
/etc/man.conf には
# If you have a new troff (version 1.18.1?) and its colored output
# causes problems, add the -c option to TROFF, NROFF, JNROFF.
とありますが、groff 1.22.4 のオプションに -c を付けてもエスケープシーケンスだらけな表示は変わらず、-c の代わりに環境変数 GROFF_NO_SGR=true を用いると望む動作となりました。
PAGER="less -is" GROFF_NO_SGR=true man bash
groff -Dutf8 -Tutf8 -mandoc -mja
GNU troff (Groff) — a GNU project
https://www.gnu.org/software/groff/
mac に標準で付いてくる groff(バージョン1.19.2)については
/usr/share/groff/1.19.2
以下に -T で指定するデバイスや -m で指定する文書整形に関係するマクロが配置されています。このディレクトリの font 以下が -T で呼ぶやつで、tmac 以下が -m で呼ぶやつ(多分)。
mac 標準の groff(Ver 1.19.2)で日本語 manpage を呼び出そうとすると以下のエラー。
/usr/bin/groff: can't find `DESC' file
/usr/bin/groff:fatal error: invalid device `nippon'
エラーの通り、/usr/share/groff/1.19.2/font 内に nippon が見当たりません。
homebrew で導入出来る groff(1.22.4)については
/usr/local/Cellar/groff/1.22.4/share/groff/1.22.4/
に諸々あります。
-D?
groff 1.22.4 ではプリプロセッサとして preconv が利用出来ます。
(他の内容物は /usr/local/Cellar/groff/1.22.4/bin/
以下参照)
この preconv に入力のエンコーディングを指定するのが -D オプション。
mac の groff バージョン 1.19.2 にはまだ存在しない機能です。
groff 1.22.4 の manpage より
-D arg Set default input encoding used by preconv to arg. Implies -k.
-k Preprocess with preconv. This is run before any other preprocessor. Please refer to preconv's manual page for its behaviour if no -K (or -D) option is specified.
-K arg Set input encoding used by preconv to arg. Implies -k.
※ -K と -D の違いがわからん。環境変数 GROFF_ENCODING の扱いに差があるとかかな?
preconv
manpage より
NAME
preconv - convert encoding of input files to something GNU troff understands
preconv の manpage でオンラインで読めるもの
http://man7.org/linux/man-pages/man1/preconv.1.html
以下は manpage 記載の preconv のエンコーディング探索アルゴリズム
preconv tries to find the input encoding with the following
algorithm.
1. If the input encoding has been explicitly specified with
option -e, use it.
2. Otherwise, check whether the input starts with a Byte Order
Mark (BOM, see below). If found, use it.
3. Otherwise, check whether there is a known coding tag (see
below) in either the first or second input line. If found,
use it.
4 Finally, if the uchardet library (an encoding detector library
available on most major distributions) is available on the
system, use it to try to detect the encoding of the file.
5. If everything fails, use a default encoding as given with
option -D, by the current locale, or ‘latin1’ if the locale is
set to ‘C’, ‘POSIX’, or empty (in that order).
Note that the groff program supports a GROFF_ENCODING environment
variable which is eventually expanded to option -k.
-T や -m
上述の preconv のオンライン manpage と同じサイトに新しめの manpage が公開されています。
groff の manpage(-T で呼び出されるデバイスとポストプロセッサの説明も含みます)
http://man7.org/linux/man-pages/man1/groff.1.html
-m で呼び出すマクロについての manpage
http://man7.org/linux/man-pages/man5/groff_tmac.5.html
ja は Language-specific Packages の一つと思われますが、新しい機能のためか言及がありません。
-E
troff のエラー出力の抑制
出典:
サポートページ:Software Design 2018年8月号:|gihyo.jp … 技術評論社
https://gihyo.jp/magazine/SD/archive/2018/201808/support
以下は JMProject の groff のページ及び JMProject の troff のページより引用
-E
エラーメッセージを一切出力しません。
et cetera
preconv -k
-Dutf8 の代わりに -k でプリプロセッサに preconv を指定してみる。
文字コードは自動判別でも大丈夫でした。
例)groff -k -Tutf8 -mandoc -mja -E
nkf -w8
nkf に BOM を生成させると自動判別失敗の不安は無くなるかも。
JNROFF /usr/local/bin/nkf -w8 | GROFF_NO_SGR=true /usr/local/bin/groff -k -Tutf8 -mandoc -mja -E
エスケープシーケンスと manpage のカラー表示
端末エミュレータ側で対応する
ANSI の「カラー」エスケープシーケンスを有効にしている場合、端末エミュレータのフォントカラーの指定で manpage を色分け出来ます。
ターミナル
設定画面
iTerm2
設定画面
「Basic Colors」セクションで色分けを指定します。
iTerm2 の方が色分け可能な項目が多い印象。
ページャー側で対応する
troff による「カラー」エスケープシーケンスを無効にし、ページャーに色分け作業を分担させます。
参考文献:
【シェル芸奥義】tputを使ってみる【エスケープシークエンス】 - Qiita
https://qiita.com/onokatio/items/5d282b72ac5565ae4569
manをもっと便利に使おう!(ビルトインコマンドに対応 + 色付きで表示) - Qiita
https://qiita.com/ssh0/items/f148f0125faad5217160
コンソールのカラー出力 - ArchWiki
https://wiki.archlinux.jp/index.php/コンソールのカラー出力
less - Colors in Man Pages - Unix & Linux Stack Exchange
https://unix.stackexchange.com/questions/119/colors-in-man-pages
terminal - List of ANSI color escape sequences - Stack Overflow
https://stackoverflow.com/questions/4842424/list-of-ansi-color-escape-sequences
2 Easy Ways To Get Color Man Pages In Linux | 2daygeek.com
https://www.2daygeek.com/2-easy-ways-to-get-color-man-pages-in-linux-using-less-most-command/
less
例えば以下のような内容を $HOME/Documents/Man_Page などの名前で保存し、専用のプロファイルを作成して起動時に source するようにします。
export GROFF_NO_SGR=true
export PAGER="less -is"
export LESS_TERMCAP_mb=$(tput bold) # begin blinking
export LESS_TERMCAP_md=$(tput bold; tput setaf 14) # begin bold
export LESS_TERMCAP_me=$(tput sgr0) # end mode
export LESS_TERMCAP_se=$(tput sgr0) # end standout-mode
export LESS_TERMCAP_so=$(tput bold; tput setaf 11) # begin standout-mode
export LESS_TERMCAP_ue=$(tput rmul; tput sgr0) # end underline
export LESS_TERMCAP_us=$(tput smul; tput setaf 41) # begin underline
※ 上記はmanをもっと便利に使おう!(ビルトインコマンドに対応 + 色付きで表示)内の記述を元に一部改変し作成。
tput setaf 数値
terminfo の manpage より引用
http://man7.org/linux/man-pages/man5/terminfo.5.html
Variable String | Capname | TCap Code | Description |
---|---|---|---|
set_a_foreground | setaf | AF | Set foreground color to #1, using ANSI escape |
※ こちらの節は【シェル芸奥義】tputを使ってみる【エスケープシークエンス】を参考に作成。
most
The MOST pager
http://www.jedsoft.org/most/index.html
カラーの値を変更するには ~/.mostrc または /etc/most.conf (システム全体に変更が適用されます) を編集する必要があります (ファイルが存在しない場合は作成してください)。~/.mostrc の例:
% Color settings
color normal lightgray black
color status yellow blue
color underline yellow black
color overstrike brightblue black
また、以下のような内容を $HOME/Documents/GROFF_NO_SGR などの名前で保存し、専用のプロファイルを作成して起動時に source するようにします。
export GROFF_NO_SGR=true
w3mman
W3M Homepage
http://w3m.sourceforge.net
Debian(Tatsuya Kinoshita)版
https://github.com/tats/w3m
man.conf のページャーセクションに記述する上記二例と異なり、こちらは w3m を用いる man の置き換えコマンドです。w3mman コマンド名
で通常の man コマンドのように manpage を閲覧可能である他、 w3mman 単体で manpage ブラウザとして起動出来ます。テキストベースの web ブラウザでブラウジングする感覚で manpage を閲覧出来、他のコマンドへの言及をリンクとして辿ることも可能です。端末の背景及び太字や通常の文字の色については端末エミュレータ側の設定に、リンクのカラーは w3m における設定に準じるようです。
インストール
$ brew install w3m
w3mman の環境変数の設定
例えば $HOME/.man/man.conf で JNROFF を設定してある場合は
export W3MMAN_MAN="man -C $HOME/.man/man.conf"
を $HOME/.bashrc
辺りに記入しておきます。
また、以下のような内容を $HOME/Documents/GROFF_NO_SGR などの名前で保存し、専用のプロファイルを作成して起動時に source するようにします。
export GROFF_NO_SGR=true
w3mの基本的なキーバインド
http://w3m.sourceforge.net/MANUAL.ja.html#Key:orig
※ 文字化けする場合はエンコーディングで EUC を指定して下さい。
w3m のマニュアル
http://w3m.sourceforge.net/MANUAL.ja.html
※ 文字化けする場合はエンコーディングで EUC を指定して下さい。
w3mman のマニュアル
日本語 manpage を html に
groff で nkf のマニュアルページを html に変換
cat は manpage が .gz 圧縮なら gzcat 等、適宜読み替えてください。
HTML 出力
$ cat $(man nkf -w) | /usr/local/bin/nkf -w | /usr/local/bin/groff -Dutf8 -Thtml -mandoc -mja > $HOME/Documents/nkf.html
$ open $HOME/Documents/nkf.html
open コマンドは便利ですね。
インデントが深くなり過ぎる場合は -mja を外します。
また、PDF への変換は Safari の「PDFとして書き出す…」で行います。
w3m 付属の manpage 検索・閲覧コマンド w3mman で nkf のマニュアルページを html に変換
準備
w3m のインストール
$ brew install w3m
w3mman の環境変数の設定
例えば $HOME/.man/man.conf で JNROFF を設定してある場合は
export W3MMAN_MAN="man -C $HOME/.man/man.conf"
を $HOME/.bashrc
辺りに記入しておきます。
HTML 出力
$ GROFF_NO_SGR=true W3MMAN_W3M="w3m -dump_source" w3mman nkf > $HOME/Documents/nkf.html
$ open $HOME/Documents/nkf.html
環境変数 GROFF_NO_SGR=true で Color エスケープシーケンスを抑制。
環境変数 W3MMAN_W3M で w3m にダンプオプションを指定。
文字化けする場合は文字コードを UTF-8 に設定。もしくは、<meta charset="utf-8"/>を head 開始タグの直後に書き加えると良さそう。
出典:
HTMLで文字エンコーディングを指定する
https://www.w3.org/International/questions/qa-html-encoding-declarations.ja
以下、失敗中
groff の引数を -Tps や -Tpdf と置き換えるだけでは日本語を含む man ページは ps や pdf に上手く変換出来ませんでした。フォント指定に失敗しているのかな? pdfroff を使っても上手く行かず。
unicode - How do I convert a troff manpage with UTF-8 characters (czech to be precise) to PDF - Unix & Linux Stack Exchange
↑こちらはチェコ語の文字の話だけど、dviを経由するといいよとアドバイスがあるので、brew cask install mactex
(mactex-no-gui でも良さそう)で MacTeX をインストール。そのままでは dvips が見つからないとエラーを吐くのでターミナルを開き直し、groff から -Tdvi で dvi 出力して dvipdf で pdf を生成するも、日本語が欠けてしまう点は変わらずでした。