Giraffe+ 0.5.47.622
前リリースからの変化
- Giraffe_ListBoxItem.SetDisplayTextがGiraffe.ListBox.SetDisplayTextを呼んでたのをSetTextに修正
- Path.dirをError_codeを受け取れるよう改善
- Directory_iterator.new(path), (path, ec)を追加
- settings/key/ShowFileCountを追加
- エラーメッセージのファイル名が.giraffeになることがあるのを修正
- beginの戻り値を無駄にコピーしてる部分があったのを修正
- Object.switch, switch_withが最後の戻り値を返すように改善
- mode開始時に実行される、mode:on_enterを追加
- Giraffe.ListBox.GetSelectedIndicesを追加
- ShowMenuAtEdge, ShowMenu2AtEdgeを追加
- Method_orとMethod_andのコンテキストの扱いを改善
- Object.copyがスロットをコピーしてなかったのを修正
Giraffe_ListBoxItem.SetDisplayTextがGiraffe.ListBox.SetDisplayTextを呼んでたのをSetTextに修正
内部的には、ItemとTextなんですが、外部的にはTextとDisplayTextになってて、非常にややこしいです。どっちかに統一、もしくは、全く別の組み合わせを考えたほうがよさそうです。
Directory_iterator.new(path), (path, ec)を追加
忘れてたわけじゃないんですが、別にいらないかと思ってて、今は、やっぱりいるかと思っただけです。Error_codeを受ける版の必要性が自分の中で高まった結果です。
settings/key/ShowFileCountを追加
ディレクトリ直下のファイル数をリストに表示します。ふと、欲しくなって、作ってみました。
エラーメッセージのファイル名が.giraffeになることがあるのを修正
キャッシュされたexpr(式クラス)でエラーが起きると、そのexprが初めに現れたファイルがエラーの起きたファイルとして表示されていました。
キャッシュされたexpr単独でエラーが発生した場合には同じ結果になりますが、めったにあることではないので気にしてません。
beginの戻り値を無駄にコピーしてる部分があったのを修正
beginがコピーを返さないこともある、という仕様のころのコードが残ってました。今は絶対にコピーを返す、という仕様です。
Object.switch, switch_withが最後の戻り値を返すように改善
Object.ifと同じ仕様にしました。ついでに、比較部分の引数にもブロックを置けるようにしておきました。
mode開始時に実行される、mode:on_enterを追加
mode:on_enterにモード名のメソッドを追加する形で定義します。mode:enterによる処理が終わってから呼ばれますので、mode:set-eventとかを普通に使えます。
例えば、SwitchWindowで複数選択処理可能なウインドウメニューを出せるようにする場合:
mode:on_enter.SwitchWindow: `[ mode:set-event& 'key/c-enter', [ is: Giraffe.ListBox.GetSelectedIndices is.empty.? [ "Select window(s)!".flush return ] m: ShowMenuAtEdge& "&Restore", [RestoreWindow$], "&Move", [MoveWindow$], "&Size", [ResizeWindow$], "Mi&nimize", [MinimizeWindow$], "Ma&ximize", [MaximizeWindow$], "", "&Close", [CloseWindow$] m$.nil?.? [return] is.collect(`i[Giraffe.ListBox.GetItemData(i)]).each& `w[ m(w) ] Giraffe.MainWnd.HideWindow ] ]
Giraffe.ListBox.GetSelectedIndicesを追加
マークがあればそれらの、無ければカレントセレクションのみの、それも無ければ空の、配列を返します。
ShowMenuAtEdge, ShowMenu2AtEdgeを追加
メニューをメインウインドウの右上に表示します。どうせキーボードで使うわけですから、マウスカーソルの位置にメニューを出す意味はありません。
実装@Giraffe.giraffe:
ShowMenuAtEdgeImpl: `f rest.@[ rc: MFC_CRect.clone Giraffe.MainWnd.GetWindowRect(rc) f(rc.right rc.top rest.@) ] ShowMenuAtEdge: `*[ ShowMenuAtEdgeImpl(ShowMenu$ arg.@) ] ShowMenu2AtEdge: `*[ ShowMenuAtEdgeImpl(ShowMenu2$ arg.@) ]
Method_orとMethod_andのコンテキストの扱いを改善
コンテキストのスロットのみを新しくすればよかったものを、コンテキスト全体を新しくしてました。
Object.copyがスロットをコピーしてなかったのを修正
スロットをポインタ化して、そのままでした。