Skip to content

Latest commit

 

History

History
167 lines (118 loc) · 6.26 KB

SizerMacro.md

File metadata and controls

167 lines (118 loc) · 6.26 KB

Sizer のマクロの解説

ウィンドウサイズ操作ソフトの Sizer バージョン4 にはマクロ機能がついたんですね。Sizer を起動し、ウィンドウの端っこのリサイズ用アイコンの状態で右クリックすると、ウィンドウサイズを選択するメニューが出ます。

好きなウィンドウサイズを選択するのがベタな使い方です。ショートカットキーを割り当てておくこともできる。ここにマクロも登録できるんです。

あとポータブル版を使っても、マクロなどの情報はレジストリに残されているのでOS再インストールなどで消えるので注意。(キーは FAQ 参照)

(作成日2020年4月15日、更新日4月17日)

マクロ (Sizer のマクロ構文)

1200x960 のサイズにする時、マクロはこうなります。

resize
w = 1200
h = 960
  • w : 横幅
  • h : 高さ

位置も移動できます。

  • t : 縦位置
  • l : 横位置(左から)

resize : サイズ変更。

マクロは計算式も使える。1.2倍にする時はこう。

resize
w = w:win*1.2
h = h:win*1.2

= 以降の右辺を計算にできます。

: の後ろは

  • win : ウィンドウのサイズ。ボーダーとタイトルバーを含める。
  • client : ウィンドウのサイズ?それを含めない?(未確認)
  • mon : モニタのサイズ。(さらに mon:2 などでモニタの指定も可能)
  • workarea : モニタのサイズ。タスクバーを除く。

* は掛け算。

じゃあ、現在のウィンドウじゃなくて、ファイル名を指定してリサイズ。そして位置を移動する。

resize:proc[notepad.exe]
w = 450
h = 450
t = h:mon - h:workarea
l = w:workarea -450

proc[notepad.exe] は対象ファイル名、テスト用にメモ帳です。capならウィンドウタイトルを対象にする。

  • t の右辺は「モニタサイズから、タスクバーを除いたモニタサイズを引いた」もので、タスクバーの直下の縦位置です。

  • l の右辺はモニタサイズの横幅を取得したんで、一番右です。一番右からウィンドウ横幅分を引き、一番右にぴったりの位置に移動です。

  • $ : は変数名に使えますので、例えばこうできる。

$TaskbarTop = h:mon - h:workarea

w:workarea /3 と割り算すると 1/3 の位置に移動できます。

$TaskbarTop = h:mon - h:workarea

resize:proc[notepad.exe]:1
t = $TaskbarTop
l = w:mon * 2/3

resize:proc[notepad.exe]:2
t = $TaskbarTop
l = w:mon * 1/3

この感じで 3 で割っていけば、メモ帳の 9 ウィンドウを 9分割で移動できるんだけど。

理論的な説明 (最良のコードではないので)

しかし現時点で (ビルド 630)、番号に空きができてしまう。メモ帳を開いたり閉じたりしていると。たぶんこうなる。

  • notepad.exe:1
  • notepad.exe:3
  • notepad.exe:4
  • notepad.exe:7

対策として :15 とかまで作っておく。そうするとウィンドウが重なってしまうものが出てくる。まあしかし、だいたいは重なっていないので便利だ。

これを応用していくと・・・minimize も 1 しか閉じないのでいっぱい作っていく。(「コード個別全最小化」として後に言及)

resize:proc[notepad.exe]:1
minimize
resize:proc[notepad.exe]:2
minimize
resize:proc[notepad.exe]:3
minimize
resize:proc[notepad.exe]:4
minimize

restore

resize:proc[notepad.exe]:1
restore

Sizer 4 ビルド 630 (2020年4月11日) の、この番号の空き現象と restore が無効だったことについて開発者に改善要望メールを送ってみた。連絡先のところに説明的とあるので丁寧に説明した。要望も書いた。そしたら2日後にバージョンアップした笑

最良のコード

ビルド 640 (2020年4月17日) にいくつかの機能追加があったのでそれを説明する。 restore は単純ミスだったようで直った。

すべてのウィンドウ

resize : proc[notepad.exe]*
minimize
resize : proc[notepad.exe]*
restore
  • * : 対象プログラムの、すべてのウィンドウを対象にする。ALL です。

また開発者のコードで判明したのですが。 .exe は省略できます。しかし私の特殊な環境では Notepad2.exe も対象に入ったため、これは .exe まで書いた方いいでしょう。

索引(インデックス)

作者の説明によると、キャッシュせず毎回取得しているとのこと。空き現象はないはずとの返答。前述の「コード個別全最小化」が機能しないのは、なんらかのエラーによって、最後まで実行されていないのではということだった。しかし、「コード個別全最小化」はビルド 640 で問題なく動作した。

また索引の引数 $_index が追加された。以下のサンプルコードが掲載されているが、* ですべての対象ウィンドウに対しこの引数でそのウィンドウ番号を参照する。

resize : proc[notepad]*
      t = 300 * (($_index - 1) \ 4)
      l = 400 * (($_index - 1) % 4)
      w = 400
      h = 300

ウィンドウ番号は 1 からはじまるので、その番号から 1 を引いたものに 300 を掛け算する。1番目のウィンドウは 0 をかけて 0になります。

\ : この演算子は見たことがない笑 小数点以下切り捨てか?トライ&エラーだ。

型の呼吸・秘伝: 指定数分割

バージョンアップもした。しからば、これまで覚えた技を組み合わせる。これで好きなプログラムを簡単に好きな分割数で整列できる。

$DivNum = 5
$Margin = 1

$TaskbarTop = h:mon - h:workarea

resize:proc[notepad.exe]*
t = h:mon * (($_index - 1) \$DivNum /$DivNum) + 
$TaskbarTop
l = w:mon * (($_index - 1) %$DivNum /$DivNum)
h = h:mon/$DivNum -$Margin
w = w:mon/$DivNum -$Margin