wasavi が何らかのメッセージを出力する場合、いくつかの出口がある:
- バックログ・コンソール: 出力が複数行に及ぶ時に wasavi の画面全体を覆う形で表示される。モードは backlog_prompt に移行する。これは command や insert/overwrite などと同じレベルに位置する立派な vi のモードの一つだ。lastMessage は最終的にバックログの全内容を代入される
- ステータスラインの message: 出力が 1 行のみの場合は単にステータスラインにそれを表示し、モードは backlog_prompt へは移行しない。lastMessage は出力される 1 行そのものを代入される
- ステータスラインの notice: これは message とほとんど同じなのだが、lastMessage を更新する場合としない場合がある:
- 通常の notice: ステータスラインに何らかの文字列を表示する。lastMessage は更新しない。これを使用するのは例えば、[cci]n[/cci] コマンドなどで現在使用している検索文字列をステータスラインに表示する時など
- silent な notice: 内部的に何らかのメッセージは生成するが、表示はせず、エラーベルを鳴らす。lastMessage は更新する。これを使用するのは例えば、行頭・行末・テキスト戦闘・テキスト末尾を超える [cci]hjkl[/cci] 各コマンドなど
- lastMessage これは内部的な変数で、出力先にかかわらず出力した結果を保持する。機能テストの際にこれを参照する
ここで重要なのは、バックログと message は本質的に同じバッファを共有しなければいけないということと、message と notice の使い分けを正しく行わなければならないということなのだが。前者に関して徹底されていなかった(対症療法的な修正がたくさんコミットログに残ってて結構恥ずかしい)のでそのへんを見直して修正した。
後者は明確なルールがあるわけではない。ただ実際に使ってみた際にログが溜まりまくってうぜえ!的なものは notice、エラーメッセージ的なものは message に回すように見直した。