Giraffe+ 0.5.38.540
前リリースからの変化
- giraffe-mode.lのインデント計算がエラーになってたのを修正
- Script/settings/key/PipeToListbox.giraffeからScript/PipeToListbox.giraffeへアルゴリズム抽出
- Block, Method.resolveの第二引数のデフォルト値を第一引数のIDをcallした結果にした
- 環境変数を展開するString.expand_envを定義
- アクティブウインドウのMDI子ウインドウを切り替えるsettings/hotkey/SwitchMDIWindow
- オートコンプリートの複合一致をMigemo無しでするsettings/setup/WithoutMigemoGrouping
- 履歴の絞込みを複合一致にするsettings/setup/HistoryGroupingMatching
- 文字リテラルを含むコードのシリアライズがおかしくなってたのを修正
- 数値リテラルの0に型指定してもIntになってたのを修正
- NULL文字を含むShift_jisのスクリプトをパースすると無限ループしていたのを修正
- BoostのCritical Bug in Function Libraryの修正
- String.removeが使えなくなっていたのを修正
- String.file_load, saveのUnicode対応
giraffe-mode.lのインデント計算がエラーになってたのを修正
ちゃんとテストしたはずが、括弧の閉じる位置が間違っていて全く動作しませんでした。ダンプやバイトコンパイルの関係で実行してるものとファイルとが乖離していたのかもしれません。
Script/settings/key/PipeToListbox.giraffeからScript/PipeToListbox.giraffeへアルゴリズム抽出
他スクリプトから利用可能にしておきました。
例:
//デスクトップでdir @PipeToListbox('dir' '::')
Block, Method.resolveの第二引数のデフォルト値を第一引数のIDをcallした結果にした
今まではgetした結果でした。そのIDが指す物が関数か変数かというのを考えないスタイルの言語ですので、callした結果を扱うようにしました。
例えば、selfとかargとかlocalなんてのはメソッドですので、getするとメソッドそのものが返ります。
例:
//RubyのInteger#timesみたいなの Number.times: `*[ [0...(local.self).each(local.arg.@)].resolve(:local).eval(parent) //0...self.call_with_context(parent :each arg.@) //これでも別にいいけど ]
Lispのバッククォート構文みたいな感じで。
環境変数を展開するString.expand_envを定義
環境変数を含むパスの扱いをどうするか考えてみたんですが、どうしても無駄が多くなりそうなので、とりあえずスクリプト側で簡単に扱えるようにしておきました。
アクティブウインドウのMDI子ウインドウを切り替えるsettings/hotkey/SwitchMDIWindow
SwitchWindowのMDI版です。MDI親ウインドウがアクティブな場面で実行します。
MDIClient直下に子ウインドウが無い場合は動作しません。
オートコンプリートの複合一致をMigemo無しでするsettings/setup/WithoutMigemoGrouping
Migemo無しでも使いたくなったので。
オートコンプリートの設定がいい加減ややこしくなってるので、別項で解説します。
履歴の絞込みを複合一致にするsettings/setup/HistoryGroupingMatching
履歴でも使いたくなって。
数値リテラルの0に型指定してもIntになってたのを修正
Intの0のみをZeroオブジェクトとすることにしました
BoostのCritical Bug in Function Libraryの修正
マルチスレッド時の問題だそうです。たまにデッドロックする原因はこいつだったのでしょうか。
String.removeが使えなくなっていたのを修正
Path.removeに乗っかられてました。
String.file_load, saveのUnicode対応
結構大きな仕様変更です。これにより、履歴やview-file-in-listでBOM有りのUTF8とUTF16を扱えるようになりました。
BOM無しの推測は動作が不確定な感じが嫌なのでやってません。
BOMの指定も出来ますが、そういえば定数を定義するのを忘れてます。
NONE = 0 UTF16LE = 1 UTF16BE = 2 UTF8 = 3
です。
関数プロトタイプは
String.file_load(BOM = NONE) String.file_save(text, BOM = UTF8, detect_file_BOM = true, create_if_need = true)
です。
loadのBOM指定はファイルにBOMが無い場合にのみ利用されます。ファイルのBOMを無視するとファイルのBOMごとテキスト化することになり、おかしなことにしかならないと考え、こういう仕様にしました。
saveのデフォルトはUTF8です。結果、履歴のデフォルトもUTF8ということになりました。detect_file_BOMがfalseか、ファイルが不在もしくは空のときに指定されたBOMと一致するコードページで保存されます。create_if_needがfalseの場合、ファイルは新しく作られません。
既存の履歴ファイルをUTF8にしたい場合は、適当なエディタを使って履歴ファイルをUTF8で保存すれば、それ以降UTF8で保存されることになります。