Giraffe+ 0.5.45.615
前リリースからの変化
- Boostを1.35.0にした
- UTF16の保存がLEとBE逆になってたのを修正
- AfterRenameFile2を定義することで、RenameFile2成功後の処理を定義できるようにした
- Giraffe.ListBoxのiteratorのvalue_typeをStringと比較可能にした
- get_copyの内部のsetをdef_or_setにした
- 起動済みの場合のコマンドライン引数の扱いを改善した
Boostを1.35.0にした
基本的な部分(文字列の扱い)で大きな変更があったので、何か問題が発生してるかもしれません。
以下、内部のC++の話。
as_literal絡みで一番問題の発生する確率が高いのは、WinAPIから文字列を(配列を渡すことで)得て、その文字列をas_literalする場合です。
その文字の配列が、要素数 == 文字数ではなく、null-terminatedであることを表現するには、配列ではなくポインタとしてas_literalに渡さなければいけません。
WinAPIの構造体の中身の文字列がポインタなのか文字の配列なのか普段意識してませんから盲目にas_literalしてると危険です。
UTF16の保存がLEとBE逆になってたのを修正
テストしてませんでした。
AfterRenameFile2を定義することで、RenameFile2成功後の処理を定義できるようにした
次のスクリプトで、RenameFileRegexのように、ファイルの再列挙をせずにリスト内容を書き換えます。
global.AfterRenameFile2: `old new[ Giraffe.Edit.SetText(new false false) Giraffe.Edit.SetSel(new.size new.size) index: Giraffe.ListBox.find(old) index.!= (Giraffe.ListBox.end).? [ Giraffe.ListBox.SetItem(index new) Giraffe.ListBox.Invalidate(false) ] Giraffe.MainWnd.OptimizeWidth ]
get_copyの内部のsetをdef_or_setにした
継承した親のメソッドに独自の仕様を追加定義したい場合、型を調べてresendするか、get_copyしてメソッドの連結をするかになるわけですが、どちらにしろ定義するのはselfであるべき、という考えです。
起動済みの場合のコマンドライン引数の扱いを改善した
Boost.Interprocess待ちをしてたんですが、結局WM_COPYDATAでやるほうが簡潔になるのでそうしました。
改善により、#を含むファイル名とかを扱えるようになりました。