フォルダを cmux で開く Alfred ワークフローを作った

技術

ターミナル cmux を Alfred から一発で開くための File Action ワークフローを作って公開した。Finder で選んだフォルダを、そのまま cmux の新しいワークスペースとして開ける。地味だが毎日効く。

何ができる

  • Finder(または Alfred のファイルナビ)でフォルダを選択 → File Action「Open in cmux」を実行
  • 選んだフォルダが cwd になった状態で cmux のワークスペースが開く
  • 複数フォルダを選べば、それぞれ別ワークスペースで開く

インストール

  1. GitHub の 最新リリースから Open-in-cmux.alfredworkflow をダウンロード
  2. ダブルクリックして Alfred にインポート(Alfred Powerpack が必要)
  3. 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 で公開してあるので自由にどうぞ。

リポジトリ:github.com/scaltinov/alfred-open-in-cmux

コメント

タイトルとURLをコピーしました