Notes
この環境が今の形になっている理由。
1 本につき 1 つ、理解するまでに時間がかかった問題と、それに対して今どう対処しているかを扱います。ここに置いているのは、答えが設定・スクリプト・CI にまたがっていて、そのどれもが説明の置き場所として適切でないためです。
所要時間や個数はすべて 1 台のマシンで測っています。何がその環境固有かは測定に使っているマシンにまとめてあります。
PATH の予算
Windows の PATH は 8191 文字が上限で、その大半を mise が使う。使い切ると、インストール済みのコマンドが「存在しない」と言われる。
shim をやめて symlink で起動する
mise の shim はコマンド 1 つにプロセスを 3 個使い、しかもツールが終わるまで端末との間に挟まったままになる。プロセス生成のたびに検査が入る環境では 15 ms のツールが 127 ms になり、bat と zi はプロンプトを返さなくなっていた。
アイコン 1 個で以降の桁が全部ずれる
Neovim が計算する文字幅は Unicode の East Asian Width から来る。端末が実際に描く幅はフォントから来る。Nerd Font はその 2 つがずれる位置にグリフを置くので、setcellwidths で font 側の答えを教える。
レジスタは 1 つ、外の実装は 5 つ
`+` に yank したものがどこへ行くかは、WSL か Windows か Wayland か X11 かで別々のコマンドが決める。同じツールに、コピーとペーストで逆の改行変換を頼む必要もある。
可視なのに描かれないウィンドウを見つける
GlazeWM は非アクティブなワークスペースを DWM の cloak で隠す。クラッシュやモニターの脱着で cloak だけが残ると、可視で、画面内に矩形を持ち、どのワークスペースにも属さないウィンドウができる。
生成しなければならない設定
GlazeWM は 1 ファイルしか読まず include も無い。一部を公開リポジトリから外すには、ウィンドウマネージャが見る前にファイルを組み立てるしかない。
切れるマウスと、絞り込みを間違えた話
着脱イベントがログに 1 件も無いことで、ケーブル・ポート・コネクタは候補から消えた。残るのは無線リンクと電源ポリシーの 2 つ。同じ日に Windows Update が入っていたので後者を選んだが、原因は前者だった。
不変条件は 1 か所、走らせ方は 2 通り
設定は正しいのに Neovim が固まる、という壊れ方がある。原因がリポジトリではなくマシンの状態にあるので、lint では出ない。検査本体を 1 モジュールに置いて、:checkhealth と headless CI の両方から呼んでいる。