X11版で、使用するフォントによってカーソルの一部が消去しきれずに残る
報告ありがとうございます。しばらく時間が取れませんが開き次第、対策案を参考に対処してみます。
これについてもチケット http://sourceforge.jp/ticket/browse.php?group_id=541&tid=24042 と同時に解決すべき問題として扱いしばし優先度を落として保留とさせて頂きます。
チケット報告者です。 簡潔ではございますが、#24042 と同様、duskell 様を含めた開発者様の方々に一任したいと思います。 ご対応に感謝申し上げます。
この件dis-氏に改めて感謝します。
リビジョン3083、X11版。 周りを調べる (l/x) コマンドや、ターゲットを指定する (*) コマンドで、反転色のカーソルが表示されます。 フォントによって、カーソルが移動するときに消し切れていない部分があります。 スクリーンショットhttp://www1.axfc.net/uploader/Img/so/104931.png
原因
問題は少なくとも、
のフォントの組み合わせで確認できました。 原因は、カーソル移動後に描画し直される元の文字の描画範囲が、カーソルの描画範囲よりも小さいためだと思われます。 「カーソルを消去するとき」と「X11版で文字を描画するとき」の二つの視点から、それぞれの修正案を書いてみました。修正案1
カーソルを消去するときの問題とみなして、カーソルがあった場所を、元の文字を描画し直す前に背景色で塗りつぶします。
z-term.c の Term_fresh() 1614行目で、元の文字を描画する処理 text_hook (X11版は main-x11.c Term_text_x11() へのポインタ) があります。 その前に text_wipe (main-x11.c Term_wipe_x11() へのポインタ) を呼び出します。 ただし、全プラットフォーム共通の部分を修正するので、問題のない環境では二度手間になってしまいます。
修正案2
X11版の描画の問題とみなして、新しい文字を描画する前に古い文字を消去します。
main-x11.c の Term_text_x11() 3088行目に、この処理を入れます。 他のプラットフォームに影響はありませんが、X11版でのみ、全ての文字を描画する度に古い文字を消去することになります。 そのため、カーソルを消去する以外の用途でもこの手順を踏んでしまいます。