作業中のリポジトリのファイルをブラウザやデスクトップアプリ経由でアップロードしたり触ったりするとき、OSのファイルを開くダイアログからだとそこにたどりつくのが手間。macOSならopen -R でファイルを選択しつつFinderを起動できるので、これをするときもあるのだけど、ダイアログを先に開いてしまっていたり、そもそもファイルのドラッグ&ドロップに対応していない場合はどうしようもなかったりする(ダイアログにドロップするって技はある)。
ようは「今ターミナルで開いてるディレクトリにOSの『ファイルを開く』ダイアログからもアクセスしたい」という話。fuseを使うかFileProvider Extensionを使うといいのかな……とか考えてたけど、とりあえずプロトタイプとしてシェルスクリプトを書いたところ、これでいいやとなった。
最近ターミナルにWezTermを使いはじめたので、wezterm cli list で作業ディレクトリをリストアップできる。tmuxでも同じようなことはできるが、WezTerm便利。
あとはこの結果を加工して、~/cwds 以下に作業ディレクトリへのsymlinkを張るコマンドを書いた。ディレクトリ名の被りは勇気を持って無視。
#!/bin/bash
set -e
rm -f ~/cwds/*
dirs=$(wezterm cli list --format json \
| jq -r '.[] | .cwd' \
| perl -nle 's<^file://><> and print' \
| sort \
| uniq)
for dir in $dirs; do
if [ -d "$dir" ]; then
ln -sf "$dir" ~/cwds/
fi
done
これを update-cwds などというファイルにしてパスを通して、zshのフックに登録。たぶんこんな感じでは? zshは雰囲気で使っている。
function chpwd() { if command update-cwds 2>/dev/null; then update-cwds fi }
そして~/cwdsをFinderのサイドバーに追加すればOK。こんな感じに使えます。
