[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
bug#26742: Display bug with composed strings
From: |
YAMAMOTO Mitsuharu |
Subject: |
bug#26742: Display bug with composed strings |
Date: |
Wed, 03 May 2017 12:50:16 +0900 |
User-agent: |
Wanderlust/2.14.0 (Africa) SEMI/1.14.6 (Maruoka) FLIM/1.14.8 (Shijō) APEL/10.6 Emacs/22.3 (sparc-sun-solaris2.8) MULE/5.0 (SAKAKI) |
> If I create a file temp.txt containing the following:
> -*- prettify-symbols-alist: (("R_PO" 8477 (Br . cl) 8804)); -*-
> !!! R_PO !!!
> and run ‘emacs-24.5 -Q temp.txt -f prettify-symbols-mode’, I observe
> a surprising display bug: when I move the point across the second
> line, as soon as the point reaches the blank space after “R_PO”, I
> see a second ℝ displayed instead of the third “!”.
On the Mac port, the filled box cursor disappears if I move it on
the composite characters. The patch below seems to work for this
bug. Could you try if it also solves the problems you observe?
YAMAMOTO Mitsuharu
mituharu@math.s.chiba-u.ac.jp
diff --git a/src/xdisp.c b/src/xdisp.c
index e3315c4..12ae202 100644
--- a/src/xdisp.c
+++ b/src/xdisp.c
@@ -24698,6 +24698,20 @@ set_glyph_string_background_width (struct glyph_string
*s, int start, int last_x
}
+/* Return glyph string that shares background with glyph string S and
+ whose `background_width' member has been set. */
+
+static struct glyph_string *
+glyph_string_containing_background_width (struct glyph_string *s)
+{
+ if (s->cmp)
+ while (s->cmp_from)
+ s = s->prev;
+
+ return s;
+}
+
+
/* Compute overhangs and x-positions for glyph string S and its
predecessors, or successors. X is the starting x-position for S.
BACKWARD_P non-zero means process predecessors. */
@@ -25025,7 +25039,10 @@ draw_glyphs (struct window *w, int x, struct glyph_row
*row,
i = start;
BUILD_GLYPH_STRINGS (i, end, head, tail, hl, x, last_x);
if (tail)
- x_reached = tail->x + tail->background_width;
+ {
+ s = glyph_string_containing_background_width (tail);
+ x_reached = s->x + s->background_width;
+ }
else
x_reached = x;
@@ -25180,6 +25197,9 @@ draw_glyphs (struct window *w, int x, struct glyph_row
*row,
compute_overhangs_and_x (h, tail->x + tail->width, 0);
append_glyph_string_lists (&head, &tail, h, t);
}
+ tail = glyph_string_containing_background_width (tail);
+ if (clip_tail)
+ clip_tail = glyph_string_containing_background_width (clip_tail);
if (clip_head || clip_tail)
for (s = head; s; s = s->next)
{
- bug#26742: Display bug with composed strings, (continued)
- bug#26742: Display bug with composed strings, Clément Pit--Claudel, 2017/05/02
- bug#26742: Display bug with composed strings, Eli Zaretskii, 2017/05/02
- bug#26742: Display bug with composed strings, Eli Zaretskii, 2017/05/02
- bug#26742: Display bug with composed strings, Andreas Schwab, 2017/05/02
- bug#26742: Display bug with composed strings, Eli Zaretskii, 2017/05/02
- bug#26742: Display bug with composed strings, Clément Pit--Claudel, 2017/05/03
- bug#26742: Display bug with composed strings, Clément Pit--Claudel, 2017/05/03
- bug#26742: Display bug with composed strings, Eli Zaretskii, 2017/05/03
bug#26742: Display bug with composed strings,
YAMAMOTO Mitsuharu <=
- bug#26742: Display bug with composed strings, Eli Zaretskii, 2017/05/03
- bug#26742: Display bug with composed strings, Andreas Schwab, 2017/05/03
- bug#26742: Display bug with composed strings, YAMAMOTO Mitsuharu, 2017/05/04
- bug#26742: Display bug with composed strings, YAMAMOTO Mitsuharu, 2017/05/04
- bug#26742: Display bug with composed strings, Andreas Schwab, 2017/05/04
- bug#26742: Display bug with composed strings, Clément Pit--Claudel, 2017/05/04
- bug#26742: Display bug with composed strings, mituharu, 2017/05/07