ターミナル cmux を Alfred から一発で開くための File Action ワークフローを作って公開した。Finder で選んだフォルダを、そのまま cmux の新しいワークスペースとして開ける。地味だが毎日効く。
何ができる
- Finder(または Alfred のファイルナビ)でフォルダを選択 → File Action「Open in cmux」を実行
- 選んだフォルダが cwd になった状態で cmux のワークスペースが開く
- 複数フォルダを選べば、それぞれ別ワークスペースで開く
インストール
- GitHub の 最新リリースから
Open-in-cmux.alfredworkflowをダウンロード - ダブルクリックして Alfred にインポート(Alfred Powerpack が必要)
- cmux が
/Applications/cmux.appにインストールされていること
使い方は、Finder でフォルダを選んで Alfred の File Actions(デフォルト ⌥⌘\)を呼び出し、「Open in cmux」を選ぶだけ。
ハマったところ:CLI は Alfred から弾かれる
最初は cmux 同梱の CLI(cmux <path>)を呼べばいいと思っていた。ところが Alfred から実行すると毎回これで落ちる。
Error: Failed to write to socket (Broken pipe, errno 32)
cmux CLI は Unix ドメインソケット経由でアプリ本体と通信する。Alfred から起動したプロセスは「責任プロセス」が Alfred になるため、cmux 側のソケットの peer チェックで弾かれる。ターミナルから同じコマンドを叩くと通るのに、Alfred のプロセス文脈だと通らない(環境変数や PATH の問題ではないし、--password でも直らない)。
解決はシンプルで、CLI をやめて open を使う。
for p in "$@"; do open -a cmux "$p"; done
open -a cmux "<path>" は LaunchServices 経由でアプリの openFile エントリを叩く。これは cmux が標準で持つ macOS サービス「New cmux Workspace Here」(NSMessage openTab)と同じ仕組み。ソケットを使わないので Alfred の文脈でも問題なく動く。
まとめ
cmux ユーザーで Alfred を使っているなら地味に便利だと思う。コードもワークフローも MIT で公開してあるので自由にどうぞ。


コメント