0.7.5.4 fix5

不具合の修正に加え、以下の機能が追加されている。

  • 対括弧が画面内に無いときにステータスバーに対括弧の周辺を表示
  • 短縮語句 (abbreviations) を実装

が……。

  • 対括弧が画面内にない場合でも、対括弧周辺が表示されないことがある。
  • 短縮語句を展開するための項目がメニューにない。
  • [短縮語句の管理] があるが、ここで登録しても Alpha を再起動すると消える。

まず、対括弧の話。例えば対括弧が 20 行目にある時、画面内に見えているのが 21 行目以降なら、「対括弧が画面内に無いとき」に該当するはずだけど、ステータスバーには何も表示されない。試しにスクロールしてみたら、画面内に見えているのが 43 行目以降になったときに、表示されるようになった。たぶん環境依存だと思う。あ、要望としては、表示内容は周辺じゃなくて、対括弧のある行の内容を trim して見せてもらった方がいいような。
短縮語句の方は、使い方を勘違いしているか、どっかに書いてあるのを読み損ねているかだと思うのだが、登録も展開も、「むむむ?」な状況だ。
登録の方は、メニューの [編集]→[短縮語句の登録] で短縮語句を登録しても、Alpha の終了時に保存されないらしく、再起動すると空に戻っている。なので、event.js に登録するのが正しいのかと思ったんだけど、

  • OnApplicationInitialized イベントハンドラで登録することはできない。この時点では TextProcessor オブジェクトが存在しないので、その下にある Abbrebiations オブジェクトも取得できない (試しにやってみたら Alpha ごと落ちた)。
  • OnApplyDocumentType イベントハンドラで登録することはできる。しかし、これは新規文書を作成 or オープンする時に呼ばれるものなので、プロセス単位で管理されている短縮語句の登録をここでやるのは変じゃないか。

ちなみに、OnApplyDocumentType イベントハンドラの冒頭で登録内容をクリアして、文書の種別に応じた短縮語句を登録すれば、ちょっと賢いのでは、とか思ったんだけど、このイベントハンドラはタブ切替の時には呼ばれないので、NG だった。
で、登録ができたとして、展開をするにはどうすればいいのかが次の問題。
登録してある語句を入力すると、ステータスバーには

cls は public class に展開可能です。

って感じでメッセージが出るんだけど、ここで何をすれば展開されるのかが、わからない。しょうがないので、macros/sample/trim.vbs を書き換えて、expand.vbs を作った。

' expand.vbs
Function main(args)
	Dim sel
	Set sel = Ambient.ActiveDocument.TextProcessor.Selection
	If Not sel.Empty Then
		Call sel.Replace(Ambient.ActiveDocument.TextProcessor.Abbreviations.Expand(sel.Text))
	End If
	main = 0
End Function

わざわざ選択しなきゃいけないのが面倒。
短縮語句への要望としては、展開結果を複数行テキスト OK にしてほしい、といったあたりかな。
……書いてみたら異様に長くなったので、もうしばらく使って整理がついたらバグ報告するつもり。