Giraffe+ 0.5.38.540

Downloadページへ

前リリースからの変化

  • 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

履歴でも使いたくなって。

文字リテラルを含むコードのシリアライズがおかしくなってたのを修正

文字列化していたためにNULL文字等があると表示できなくなっていましたので、数値として扱うようにしました。

数値リテラルの0に型指定してもIntになってたのを修正

Intの0のみをZeroオブジェクトとすることにしました

NULL文字を含むShift_jisスクリプトをパースすると無限ループしていたのを修正

文字の変換ができない場合は例外を飛ばすようにしました。

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で保存されることになります。