WezTermでディレクトリごとに開くブラウザを変える――open-uri大活躍!

「URLをクリックするとブラウザで開く」というターミナルの機能はだいたい標準な気がします。
一方で「どのブラウザで開くのか」は意識せず「普通にデフォルトブラウザで開くものだろう」と思ってました。

最近、リポジトリによっては「デフォルト以外のブラウザで開きたいんだ」というケースが出てきました。

というわけで「今いるディレクトリに応じて、クリックで開かれるブラウザを変える」という設定をしました。備忘録として残しておきます。

## 環境

WezTermtmuxを前提に設定していますが、「URLクリック時の挙動設定」ができれば似たようなことはできると思います。

## WezTermのopen-uriフックに設定

WezTermはopen-uriでURLクリック時の挙動を変更できます。

.config/wezterm/wezterm.lua
wezterm.on("open-uri", function(_, _, uri)
local success, _, stderr = wezterm.run_child_process({
"/bin/zsh",
"-lc",
string.format(
"%s/dotfiles/bin/tmux-open-uri %s",
os.getenv("HOME"),
wezterm.shell_quote_arg(tostring(uri))
),
})
if not success then
wezterm.log_error("tmux-open-uri failed: " .. tostring(stderr))
end
return false
end)

長く見えますが単に自作スクリプトを呼んでいるだけです。

## ディレクトリを指定するスクリプト

次に、挙動を変えたいディレクトリを指定するスクリプトです。

tmux-open-uri.local.sh
#!/usr/bin/env bash
# ↓が必要
# chmod +x bin/tmux-open-uri.local.sh
export WORK_PATHS=(
"$HOME/ghq/github.com/example/"
)

非公開のリポジトリ名が入っています。なのであえてこの部分だけ別ファイルに分け、gitignoreでGit管理からは除外しています。

## 実際にURLを開くスクリプト

実際にURLを開くスクリプトでは、さきほどのディレクトリ指定を読み込みます(sourceの部分でWORK_PATHSを取得)。
あとはカレントディレクトリを取得してブラウザを指定するだけです。

#!/usr/bin/env bash
set -euo pipefail
source ~/dotfiles/bin/tmux-open-uri.local.sh
url="$1"
cwd="$(tmux display-message -p '#{pane_current_path}')"
for work_path in "${WORK_PATHS[@]}"; do
if [[ "$cwd" == "$work_path"* ]]; then
open -a "Google Chrome" "$url"
exit 0
fi
done
open -a "Zen" "$url"

weztermから実行されるとカレントディレクトリが取れないので、そこはtmuxを使って取得してます。


今回は単にディレクトリによってブラウザを変えるだけですが、シェルスクリプトなのでもっと複雑なこともできそうです。特には思いつきませんが。