詩と創作・思索のひろば

ドキドキギュンギュンダイアリーです!!!

Fork me on GitHub

ターミナルの作業中ディレクトリにOSの「ファイルを開く」からもアクセスしたい

作業中のリポジトリのファイルをブラウザやデスクトップアプリ経由でアップロードしたり触ったりするとき、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。こんな感じに使えます。

youtu.be

はてなで一緒に働きませんか?