Nerd Fonts v3が出ていたので、手元のフォントにパッチを適用する話


経緯

先日neovimのプラグインをアップデートしたら、いくつかのアイコンが豆腐になっていることに気づいた。原因を調べたところ、各プラグインでNerd Fontsのアップデートに伴う変更が加わっていた。

Nerd Fontsについて補足を加えておく。Nerd Fonts は開発者にとってはおなじみのアイコンフォントの著名なレポジトリだ。しかし、かねてからそのグリフの当て方に関して議論がなされていた。 というのも、一部のアイコンが本来そのような目的で使うべきでないコードポイント(\U+F500-\U+FD46)に割り当てられていたのである。

Issueのリンク: https://github.com/ryanoasis/nerd-fonts/issues/365

2週間前の5/1、上記の問題点を修正したv3がリリースされる運びとなり、同時にいくつかのアイコンの追加などがされた。

Nerd Fonts v3のアップデートに追随してneovimの各種プラグインもアップデートされていったが、クライアントにインストールされたNerd Fontsは以前のバージョンのまま。当然対応していないアイコンは豆腐のままなので、修正していこうという話。

前提

自分の使っているフォントはCicaという日本語等幅フォントを元に、独自にパッチを当てたフォントだ。

以前Nerd Fontsのリポジトリに同梱されたfont-patcherでパッチを当てているので、先述のコードポイント(\U+F500~\U+FD46)がグリフで置き換えられてしまっている。今回はその修正も行う。

手順

nerd-fontsのクローン

git clone https://github.com/ryanoasis/nerd-fonts

因みにめちゃくちゃ時間がかかるので、お茶でも飲んで待とう。

fontforgeのインストール

Ubuntuの場合

sudo apt install fontforge

font-patcher実行

font-pachernerd-fontsリポジトリのルートにポン置きされている。

fontforge -script font-patcher --complete {ターゲットのフォント}

--completeですべてのアイコンを適用する

\U+F500~\U+FD46の修正

以前適用してしまったグリフを元に戻す作業。

やることは単純。fontforgeから左のパッチ先(Nerd Fonts v3パッチ済み)と右のパッチ元(オリジナルのフォント)のフォントを開いて、\U+F500~\U+FD46の範囲をコピーするだけ。

別々にフォントファイルを開くと、セッションが異なりコピーができない。 そのため、いずれかのフォントを開いたら上のタブから「ファイル」→「開く」を選択してもう片方のフォントを開く必要がある。

完成したフォントは忘れずシステムにインストールする。

ついでにexa→lsdへの移行

lsの代替フォントとしてexaを利用していたのだが、これもNerd Fontsに依存していた。

exaはしばらく2021年からしばらく更新が滞って1おり、Nerd Fonts v3対応もされなそうだったので、これを機に別のツールに移行することにした。

exaではxmlのフォントのあとにスペースが出力されたり、v2特有の不満点があった。

ということでlsdをインストールすることにした。

字面が危ないけど、lsd=LSDeluxeの略だそうで、決して使ってもトリップしたりしない。

インストールはcargo install lsdで行う。

lsdの出力。xmlのアイコンの不具合が直っている。

おわりに

↑test用に使っていた拡張子

みなさんもNerd Fonts v3で日常を彩りましょう。