SwitchWindowのまとめ

もう大した変化も無さそうなのでまとめます。
設定ダイアログの、Settings/hotkey/SwitchWindowです。SwitchMDIWindowもMDI子ウインドウに使うというだけで、操作法等は同じです。
基本的な目的は、Alt+Tabと同じことを文字入力ですることですが、複数のウインドウを選択して、閉じるとか最小化するとか、そういうこともできます。
あれこれ設定できますが、それらはSettings/setup/SwitchWindow*です。Grouping/Mark/Shrink/Sortとありますが、ShrinkとSortは排他(両方Onにしてもどちらかになるだけ)です。
SwitchWindowGroupingで、空白区切りのAND検索になります。(詳細はMigemo Groupingのまとめ)
マーク(Alt+M)で複数ウインドウを指定することができます。SwitchWindowMarkをonにすると、マッチするものをマークするようになります。SwitchWindowShrinkはマッチしないものをリストから消し、SwitchWindowSortはマッチしたものを上位に置きます。

キー設定は、Enterでアクティベイト、 Ctrl+Enterでウインドウメニュー、Shift+Deleteでウインドウを閉じる、です。
mode:on_enterで追加できます。*1

//Alt+Xで最大化
mode:on_enter.SwitchWindow:@ `[ //SwitchWindowを実行済みの場合は定義済みなのでdef_or_set
  mode:set-var-g(:SwitchWindow:SerializedWindows Giraffe.SerializeWindows) //defaultのon_enter, 終了後元に戻すためのもの。
  mode:set-event& 'key/a-x', [
    SwitchWindow_GetSelectedHwnds.each(MaximizeWindow$)
    HideGiraffe
  ]
]

Giraffe+のメインウインドウがディアクティベイトする(フォーカスを失う)と、SwitchWindowは終了し、その前の状態に戻ります。mode:on_enter, on_returnでシリアライズしてるので、それらを書き換える場合は追加的にします。

//アクティブにしたウインドウのタイトルをデバッグ出力
mode:on_return.SwitchWindow:@ `[
  Dout.<< (Window.GetTitle(Window.GetForeground)).endl
  Giraffe.SerializeWindows($SwitchWindow:SerializedWindows)
]

*1:mode:on_enterが呼ばれてからデフォルトのキー設定がされてしまうので、それらをon_enterで上書きや参照はできません。(ver.0.6.21以降では可能。)