2020年4月24日金曜日

複数の窓の位置と大きさを一度に変更

窓を複数枚運用していると、大きさや位置をそれぞれ手動で調整するのが面倒になる。
そこで、一度に変更するスクリプトを作った。
PPx Window Moduleが必要。またScript Moduleは最新のものを。

SetDimensions.js

//!*script

// 要Window Module
// 引数として
// C_A 5 5 600 600 ,C_B 5 605 600 600 ,V_A 605 5 600 600
// のように「窓ID 左端の座標 上端の座標 幅 高さ」を,で区切って取得
// それを再現する

// 引数がなければ終了
if (PPx.Arguments.Length < 1){
  PPx.SetPopLineMessage("引数が正しくありません。");
  PPx.Quit(-1);
}

var ary;
var win_id;
for(i = 0; i < PPx.Arguments.Length; i++) {
  ary = PPx.Arguments.Item(i).split(/\s+/);
  win_id = ary[0].slice(-1);
  if (ary[0].slice(0,1)=="C"){
    PPx.Execute("%Oi *ppc -r -bootid:"+win_id);
    PPx.Execute("*windowposition %NC"+win_id+","+ary[1]+","+ary[2]);
    PPx.Execute("*windowsize %NC"+win_id+","+ary[3]+","+ary[4]);
  } else {
    PPx.Execute("%Oi *ppv -bootid:"+win_id);
    PPx.Execute("*windowposition %NV"+win_id+","+ary[1]+","+ary[2]);
    PPx.Execute("*windowsize %NV"+win_id+","+ary[3]+","+ary[4]);
  }
}

使い方


*script %0Script\SetDimensions.js,C_A 5 5 600 600 ,C_B 5 605 600 600 ,V_A 605 5 600 600

と、引数に「窓ID 左端の座標 上端の座標 幅 高さ」を与えると、それぞれのIDのPPCあるいはPPVを起動。窓の位置や大きさを変更する。

*script %0Script\SetDimensions.js, %*getcust(S_dimensions:normal)

のように、与える情報をユーザ変数に登録して使うとかするとスマート。
ちなみに以下は、現在開いている窓の情報をこの形式で取得するためのスクリプト。僕は

echo %*script(%0Script\GetDimensions.js)

で情報を吐き出させて使っている。

GetDimensions.js

//!*script

// 要Window Module
// 実行すると
// C_A 5 5 600 600 ,C_B 5 605 600 600 ,V_A 605 5 600 600
// のように「窓ID 左端の座標 上端の座標 幅 高さ」を,で区切った
// 返り値を返す

var ppclist = PPx.Extract('%*ppxlist(-C)').split( "," );
ppclist.pop();
var ppvlist = PPx.Extract('%*ppxlist(-V)').split( "," );
ppvlist.pop();
var winlist = ppclist.concat(ppvlist);
var str = "";
var l,t,w,h;
for(i = 0; i < winlist.length; i++) {
  l = PPx.Extract("%*windowrect(%N"+winlist[i]+",l)");
  t = PPx.Extract("%*windowrect(%N"+winlist[i]+",t)");
  w = PPx.Extract("%*windowrect(%N"+winlist[i]+",w)");
  h = PPx.Extract("%*windowrect(%N"+winlist[i]+",h)");
  str = str + winlist[i]+" "+l+" "+t+" "+w+" "+h+" ,";
}

PPx.Result = str;


0 件のコメント:

コメントを投稿