Giraffe+ 0.5.47.622

Downloadページへ

前リリースからの変化

  • 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になってて、非常にややこしいです。どっちかに統一、もしくは、全く別の組み合わせを考えたほうがよさそうです。

Path.dirをError_codeを受け取れるよう改善

directory_iteratorのコンストラクタが受けられるのに、それを呼ぶものが受け取れないという仕様になってました。

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がスロットをコピーしてなかったのを修正

スロットをポインタ化して、そのままでした。