basyura's blog

あしたになったらほんきだす。

ブラウザのウインドウサイズをコマンド実行で変更する

背景

Inkdrop の vim plugin を使ってウインドウサイズを変えられるようになったのに気を良くしてブラウザ (Vivaldi) でもやってみる。

主に mac ではアプリをフルスクリーン (cmd+control+f) で使ってはいないけどスクリーンいっぱいに広げて使う。フルスクリーンにするとアプリの切り替えがワンテンポ遅いので思考が止まる (遅いことが気になる)。嫌なのでフルスクリーンはほぼ使わない。フルスクリーンを独自にやっていて切り替えが早い MacVim ぐらい。特に Terminal は下に隙間が空くし、行間で微調整してもタブを追加したら空くので一番困り中 (BigSur の前は大丈夫だった気がするけど、Monterey にしたら直ったりする?)。

ブラウザと Inkdrop を並べて調べ物をしながらまとめていくことがよくある。その際に OS 標準の横並びを使ってもいいのだけど、他のウインドウとの切り替えが遅いし中央の黒線も気になる。

chromium-vim

ブラウザで vim キーバーインドが使えるようになる拡張である chromium-vim にウインドウサイズを変える機能を組み込んで見る。オリジナルはメンテされなくなったので fork した版に固有コマンドを定義できるようにカスタマイズ済み。

Vivaldi は Chrome ベースなので Chrome の API をそのまま叩けた。

const opt = {
  width: screen.availWidth / 2,
  height: screen.availHeight,
  top: screen.availTop,
  left: 0,
};
chrome.windows.update(
  chrome.windows.WINDOW_ID_CURRENT,
  opt,
);

fork 版 chromium-vim に組み込むとこんな感じで。

CommandExecuter.add("half", "half window", {
  match: function (value) {
    return value == "half" || value == "ha" || value == "hal";
  },
  execute: function (value, repeats, tab) {
    const opt = {
      width: screen.availWidth / 2,
      height: screen.availHeight,
      top: screen.availTop,
      left: 0,
    };
    chrome.windows.update(
      chrome.windows.WINDOW_ID_CURRENT,
      opt,
    );
  },
});

CommandExecuter.add("full", "full window", {
  match: function (value) {
    return value == "full" || value == "fu" || value == "ful";
  },
  execute: function (value, repeats, tab) {
    const opt = {
      width: screen.availWidth,
      height: screen.availHeight,
      top: screen.availTop,
      left: 0,
    };
    chrome.windows.update(
      chrome.windows.WINDOW_ID_CURRENT,
      opt,
    );
  },
});

まとめ

わりとまんぞく。 フルスクリーンのウインドウ切り替えが速くなれば解決しそうなのだけど、意図的にワンテンポ遅いのか何かしらの制限があるからなのかどっちなんだろう。