Closed iranoan closed 7 months ago
これで直ると思います。
@mikoto2000 GUI時は今まで通り次またはその次の else if
のブロック内で処理させてあげないと挙動変わっちゃいますね。
diff --git a/src/screen.c b/src/screen.c
index a8b4559b1..63be2a171 100644
--- a/src/screen.c
+++ b/src/screen.c
@@ -1981,22 +1981,20 @@ screen_char(unsigned off, int row, int col)
{
char_u buf[MB_MAXBYTES + 1];
- if (get_cellwidth(ScreenLinesUC[off]) > 1)
+ if (1
+#ifdef FEAT_GUI
+ && !gui.in_use
+#endif
+ && get_cellwidth(ScreenLinesUC[off]) > 1
+ )
{
// If the width is set to 2 with `setcellwidths`
-#ifdef FEAT_GUI
- if (!gui.in_use)
- {
-#endif
- // Clear the two screen cells. If the character is actually
- // single width it won't change the second cell.
- out_str((char_u *)" ");
- term_windgoto(row, col);
- screen_cur_col = 9999;
-#ifdef FEAT_GUI
- }
-#endif
+ // Clear the two screen cells. If the character is actually
+ // single width it won't change the second cell.
+ out_str((char_u *)" ");
+ term_windgoto(row, col);
+ screen_cur_col = 9999;
}
else if (utf_ambiguous_width(ScreenLinesUC[off]))
{
@h-east
@mikoto2000 GUI時は今まで通り次またはその次の else if のブロック内で処理させてあげないと挙動変わっちゃいますね。
あー、パフォーマンスイシューの対応をする際にそのパスを壊してしまっていますね... 指摘ありがとうございます。
今見直すと、 ambiwidth=double
かつ setcellwidths=1
とした場合も問題で、幅 2 で描画されてしまいますね...。
以下表のようになるよう条件分岐を見直してみます。
+-----------------+--------------------+
| cellwidth | ambiwidth |
| \\ +-----------+--------+
| ambiwidth | single | double |
+============+====+===========+========+
| cellwidth | 1 | 1 | 1 |
+ +----+-----------+--------+
| | 2 | 2 | 2 |
+ +----+-----------+--------+
| | 0 | 1 | 2 |
+------------+----+-----------+--------+
※ `0` は未設定
今見直すと、 ambiwidth=double かつ setcellwidths=1 とした場合も問題で、幅 2 で描画されてしまいますね...。
あれ、そんなことないですね?どうしてだろう...?
現象の確認、検証と本家への報告ありがとうございます
確認できました ありがとうございます
不具合の内容
vim -g で setcellwidths() を使うと描画おかしくなる場合が有るようです
再現手順
で起動すると、同一行の罫線 (0x2502) の後で描画がおかしくなります
システムは問題の起きないバージョンに戻したので、次の手順で
下記のサンプル/設定ファイルの元、実行した動画を添付します
\~/downloads/sample.txt
\~/.vim/vimrc
\~/.vim/gvimrc
動画のとおり
また条件が特定できず、動画に含めていませんが、キャレットが罫線 (0x2502) の有る行に移動しないと、文字が表示されない ケースがありました 私が確認できたのは、罫線の直後ではない空白が消えるケースです
期待動作
罫線 (0x2502) の後ろでも、描画が乱れないでほしい
Vimのバージョン
ピンポイントでどの時点かまでは特定できていませんが
では問題なく、
で問題が起きます
OSの種類/ディストリ/バージョン
その他
setcellwidths() を使ったら、どんな文字でも起きるわけで無いことはわかっているのですが、どの文字で起きるのか? も特定できていません