Yet Another Alt+Tab Replacement

Script/settings/hotkey/SwitchWindow.giraffeについての解説です。Settingsダイアログのホットキーページから普通に設定できます。実行するとこんな感じになります。

テキストを入力すると、空白区切りのand検索をリストボックスの上から順に実行し、マッチしたものを選択します。Enterで選択中のウインドウをアクティベイトします。MDIアプリに付いてるウインドウ選択ダイアログみたいな感じです。
Migemoを使うには下記のものをsiteinit.giraffeに貼り付けてください。


global.SwitchWindow_MakeRegexList:@ `[
list: {}
Giraffe.Edit.Text.=~ r/[^  ]+/.each& `m[
list.push_back& Regex.new(Migemo.query(m.str) 'i')
]
list
]
以下、実装時に思ったこと。

新言語のおかげで、発想を簡単に実装できたんですが、modeの辺りがまるっきり旧言語のままです。C++におけるCの関数みたいです。あと、ユーティリティ関数の類もそのままです。ShowGiraffeはGiraffe.Showであるべきです(でもなんとなくそのまま)。それと旧言語用DLLの使用についても複雑な心境です。これにもやはりユーティリティ関数の類が含まれており、たとえばWindow.GetModuleNameなんかはC++でも普通に実装しようとしたら結構なコード量になります。この関数はどこに置かれるべきでしょうか。MFC_CWndに関数を追加するのは気が引けます、というかなんか間違ってます。かといって、わざわざGiraffeWndみたいなのを拡張用に、それこそC++でCWndを継承して、とか、そんなのも違うと思います。
MFC_CWndに関数を追加するのは嫌なんですが、gsのStringにはGiraffe+でファイル操作等の関数を追加してます。C++において、ファイルパス操作、ITEMIDLIST操作、ファイル操作、私はこれらの関数をそれぞれ、namespace path, iidl, fileに置いています。第一引数が文字列になる関数ですので、StringのメソッドとしてgsではなくGiraffe+で追加定義しています。Boost.Filesystemがワイド文字列に対応するまでのつなぎのように考えていましたが、使い勝手がいいのでたぶんこのままだと思います。
きっとMFC_CWndに関数を追加するのも、やってみればその便利さから納得できるんだと思いますが、やはり設計として間違ってると思います。ここで必要なのはきっと、多重継承やMixinです。現在のルックアップが一直線な感じを気に入ってるんですが、やっぱり実用的じゃないようです。
でもたぶん、MFC_CWndに追加することで落ち着きそうです。楽だから。