WezTermでマウスを使わずURLを開く

WezTerm だけで “マウスを使わず URL を開く” ― 実装メモ

TL;DR

  1. QuickSelectArgs で URL をハイライト
  2. 選択した URL を wezterm.open_with() で既定ブラウザへ
  3. [title](https://example.com)) を含めない ように正規表現を工夫

背景

WezTerm はデフォルトで Ctrl/Cmd + クリック するとリンクをブラウザで開けます。
しかし “手をキーボードから離したくない派” にはマウス操作すら面倒。

目標

  • キー操作 だけで画面上の URL を一覧表示
  • 選択した URL を即ブラウザで開く
  • Markdown の [text](URL) にも対応し、末尾の ) を除外

実装ステップ

1. コールバック関数

local wezterm = require 'wezterm'
local act     = wezterm.action

-- 選択したテキスト (= URL) を既定ブラウザで開く
local open_selected_url = wezterm.action_callback(function(win, pane)
  local url = win:get_selection_text_for_pane(pane)
      :gsub('[).,;:]+$', '')     -- 末尾の「),.;:」を念のため除去
  if url ~= '' then
    wezterm.open_with(url)
  else
    wezterm.log_info('No URL selected')
  end
end)

Quick Select のパターン定義

-- Markdown・普通の URL・file://・IP:PORT
local quick_open_url = act.QuickSelectArgs{
  label = 'open url',
  patterns = {
    -- [text](https://example.com/aaa) → () 内の URL だけキャプチャ
    '\\[.*?\\]\\((https?://[^)\\s]+)\\)',

    -- 文末括弧を拾わない汎用 https://URL
    'https?://[^)\\s,.;:]+',

    -- file:// パス
    'file://\\S+',

    -- 192.168.0.10:8000 形式
    '\\b%d+%.%d+%.%d+%.%d+:%d+\\b',
  },
  action = open_selected_url,
}

ポイント

テクニック 説明
キャプチャグループ QuickSelectArgs では 最初のグループ だけが選択対象。() の外側を無視できる。
[^)\\s,.;:]+ URL ではない文字列で早期にマッチを切る((), 空白, 句読点など)。
後処理 .gsub() 想定外の終端記号が付いても削ぎ落とせる安全弁。
  1. キーテーブルへ割り当て

以下は Ctrl-y → o → 2文字タグ の流れで開く例。

-- leader = Ctrl+y … 既存設定に追記
config.keys = {
  { key = 'y', mods = 'CTRL',
    action = act.ActivateKeyTable{ name = 'leader_option', one_shot = true } },
}

config.key_tables = {
  leader_option = {
    -- ……他のショートカット……
    { key = 'o', action = quick_open_url },
  },
}

使い方

  1. ターミナルに URL が表示されている状態で Ctrl+y → o
  2. 画面全体が暗転し、マッチする URL が オレンジに光り “aa”, “ab”… など2文字タグが付く
  3. 開きたいリンクのタグ (aa など) をタイプ → 即既定ブラウザで開く 🎉