LoginSignup
0
0

More than 3 years have passed since last update.

Touch Barにウィンドウ幅を画面幅に合わせるアクションを

Last updated at Posted at 2019-05-30
  1. マルチモニタ環境で,ウィンドウを主モニタの横幅いっぱいにしたい。
  2. それをTouch Barからできるとなお嬉しい。

ちょっと力技ですが,やってみました。JXA*をAutomatorのサービスとして動かすやつです。
*JXA: JavaScriptでAppleScriptみたいなことするやつ(←雑)

ウィンドウを横幅いっぱいに使う。

筆者のメインモニタはFullHDモニタを縦置きしているので,横幅は1080pxです。
普通に考えると,現在のウィンドウのX座標を0に,widthを1080にすれば良さそうです。

不正解のコード
var app = Application.currentApplication();
var new_bound = app.windows[0].bounds();
new_bound.x = 0;
new_bound.width = 1080;
app.windows[0].bounds = new_bound;

ところがどっこい,マルチモニタ環境では,どうやら「その」モニタの左端のx座標が0とは限らないようです。(仮想的に,複数のモニタを全部合わせた大きな矩形になっている?)
なので,「その」モニタの左端のx座標をどうにかして指定しなくちゃいけません。
が,それをスクリプトで取得するのは意外とめんどくさそうなのでパス。適当なウィンドウを左端に置いてx座標を調べる,というアナログな方法で調べた結果,私の 今現在の設定だと,お目当のモニタの左端はx=359らしいです。

ということで,これをそのまま練り込むとこんな感じ。

スクリプトエディタ.app上では動くコード
var app = Application.currentApplication();
var new_bound = app.windows[0].bounds();
new_bound.x = 359; //マジックナンバー!!
new_bound.width = 1080;
app.windows[0].bounds = new_bound;

うーん,糞コード。

Automatorでクイックアクション化する。

Automatorでは「クイックアクション」を作ることができます。「サービス」に登録できたりする優れもの。
そこで,「JavaScriptを実行」アクションだけのワークフローを作ります。(「ワークフローが受け取る項目」は「入力なし」でOK)
内容は,アクションのデフォルト値の// Your script goes here以下に上記コードをペーストすればOK…というわけでは無かったりします。
というのは,「サービス」として動作する場合,カレントアプリケーションはサービスだからなのか,アクティブなウィンドウを操作してくれません。
そこで,System Eventsを使ってfrontmostなアプリケーションを取得し,そのアプリケーションの先頭ウィンドウを操作するようにします。
結論としては,こんな感じに。

"JavaScriptを実行"アクション内のスクリプト
var TARGET_X = 359; //お目当てモニタの左端x座標(手作業で取得)
var TARGET_WIDTH = 1080; //お目当てモニタの幅

function run(input, parameters) {
    // Your script goes here
    var processes = Application("System Events").processes();
    getApp: for( var i in processes ){
        if( processes[i].frontmost() ){
            var app = Application(processes[i].name());
            break getApp;
        }
    }

    var bound = app.windows[0].bounds();
    bound.x = TARGET_X;
    bound.width = TARGET_WIDTH;
    app.windows()[0].bounds = bound;
}

適当に「画面幅に合わせる.workflow」とでも名付けて,サービスとして保存します。

Touch Barに登録する

システム環境設定.appから,「キーボード」→「キーボード」内の「Touch Barをカスタマイズ…」をクリックし,「クイックアクション」をTouch Barに追加。
スクリーンショット 2019-05-30 18.39.57.png
そうすると,Touch Barでこの「クイックアクション」に触れば,すぐに上記「画面幅に合わせる」を動作させられちまうんだ!
TouchBarショット .png

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0