Giraffe+ 0.5.35.515
前リリースからの変化
- ITEMIDLISTのキャッシングを改善
- カレントディレクトリが不意に変わっても問題ないようにした
- download-google-icon.giraffeが動作しなくなってたのを修正
- ファイル操作後の処理を融通が利くようにした
- thread関数をブロックではなくメソッドを受け取るようにした
- Char, Uchar, Wcharのto_Stringを数値ではなく文字として扱うようにした
ITEMIDLISTのキャッシングを改善
例えばnewという名前のファイルを作って、それを削除し、newという名前のフォルダを作った場合、フォルダとして扱えませんでした。
原因はキャッシュの仕方ではなく、iidl::existsでIShellFolderを使って存在を確かめていた部分でした。SHFGetFileInfoを使わないとダメなようです。
カレントディレクトリが不意に変わっても問題ないようにした
どうしても変わってしまうものと認識することにしました。これにより、起動後にカレントディレクトリを変更して設定ファイル等を変えるということが出来なくなりました。
問題を発見したのはCVSNTのコントロールパネルアプレットです。シェル関連はマルチモジュールであり、カレントディレクトリのようなモジュール間で共有されるものをいじるモジュールもあります。大抵はいじった後に元に戻してくれるわけですが、マルチスレッドですから、当然、めちゃくちゃになります。
ApplyConfig等、パスを扱う部分でboost::filesystem::completeをするようにしました。スクリプトでConfig.Path.History等を扱ってる部分は、そのインターフェイスであるPath.completeを使っています。
ファイル操作後の処理を融通が利くようにした
Default.giraffeで定義されてるAfterFileManipulationです。
従来の仕様では、操作された対象がディレクトリの場合にその中へ移動していましたが、これは貼り付け時ならともかく、コピーやカットの場合はそうあってほしくありません。
そこで、AfterFileManipulationの第二引数にディレクトリかどうかを考慮することを示すbool値を置くことにしました。この値はデフォルトでfalseですので、PasteFile以外は編集する必要はありません。
thread関数をブロックではなくメソッドを受け取るようにした
旧関数のブロックを受ける部分をメソッドにする作業の延長です。threadにメソッドを渡せると、そのメンバに何かを置いて、calleeから得る、ということが出来ます。参照で渡すと危ないですけど。
ブロックや文字列からのメソッドへの変換は自動的にthread関数内で行われますので、スクリプトの編集等は必要ありません。
Char, Uchar, Wcharのto_Stringを数値ではなく文字として扱うようにした
\d.to_Stringで"d"が返るようになりました。今までならdの文字コードである"100"が返ります。
\d.flushなんかは"d"を表示するようにしていたので、忘れていただけだと思います。