コマンドモードのとき表示されるカーソルは、position:absolute な div であり、カーソル位置の 1 文字の座標、文字を得て適切な場所に表示している。
が、なんだか微妙にずれる。しかも、wasavi 起動するページによってずれ方が違うのである。wasavi は iframe 内のコンテンツなので影響は受けないはずなんだけど、謎だ。
そういうわけでカーソルの実体を変更してずれないようにした。けっこうな修正。
* * *
バッファの有効な行以降には、vi 同様 ~ を表示している。この tilde、実は canvas に描画した画像であり、縦方向に連続しているのはつまり css の background-repeat の機能だ。
これ、Opera においては canvas に対する文字の描画がいろいろバグっているのか、やたら小さく表示されるのが気になる。これはまあ、そのうち直るだろうと踏んで手をつけないが、行番号を表示させた場合に折り返される行の左端に tilde が残るのが目障りなので、出ないようにした。これもけっこうな修正。
* * *
編集モードに入った最初の段階でキャレットが表示されていなかったのを修正。これは軽い修正。
* * *
ステータスラインは、wasavi が寄生する textarea の外側に位置するようにしている。つまり、textarea のサイズ = wasavi のテキスト表示領域のサイズになるようにして、ステータスラインはそこからはみ出すようにしている。が、chrome ではその調節がうまく行ってなかったのを修正。
はみ出させるか否かは、wasavi が iframe 内にあるか、トップレベルのブラウジングコンテキストかどうかを判断する必要がある。そのために、window.frameElement を見ていたのだが、chrome の場合これを参照するだけで例外が発生するのだ。chrome の場合だけ window.parent == window かどうかで判断するようにした。
とりあえずこんなところでまた各ブラウザのエクステンションリポジトリに更新してもらおうというところ。