GNU bug report logs -
#8703
truncated unicode glyphs in X11
Previous Next
Full log
Message #11 received at 8703 <at> debbugs.gnu.org (full text, mbox):
Dear Eli,
Eli Zaretskii wrote:
> > Date: Thu, 19 May 2011 22:17:02 +0200
> > From: Bertram Felgenhauer <bertram.felgenhauer <at> googlemail.com>
> >
> > I have tracked down the regression using git-bisect, and found it
> > was introduced by
> >
> > http://git.savannah.gnu.org/cgit/emacs.git/commit/?id=5d747e944fd5a15bb36f865efc214024803c5fcf
>
> For those using bzr, this is revision 100011 on the emacs-23 branch or
> revision 99634.13.1 on the trunk. Perhaps Handa-san could take a look
> at this, as he made that change.
>
> > Undoing a single change restores the correct behaviour for me:
> >
> > diff --git a/src/xdisp.c b/src/xdisp.c
> > index 3c9d385..20365ff 100644
> > --- a/src/xdisp.c
> > +++ b/src/xdisp.c
> > @@ -5926,8 +5926,7 @@ get_next_display_element (struct it *it)
> > : STRINGP (it->string) ? IT_STRING_CHARPOS (*it)
> > : IT_CHARPOS (*it));
> >
> > - it->face_id = FACE_FOR_CHAR (it->f, face, it->char_to_display, pos,
> > - it->string);
> > + it->face_id = FACE_FOR_CHAR (it->f, face, it->c, pos, it->string);
>
> Can you tell what are the values of it->c and it->char_to_display at
> this point, for one of the characters hose display is truncated?
For the example screenshot, I found the following cases where
it->c and it->char_to_display differ:
it->c it->char_to_display
8896 (N-ARY LOGICAL AND) 34 (QUOTATION MARK)
8801 (IDENTICAL TO) 32 (SPACE)
10233 (LONG RIGHTWARDS DOUBLE ARROW) 32 (SPACE)
it->char_to_display is the previous character in the string each time,
and indeed there's a possibility that this path is taken but
it->char_to_display was not set by get_next_display_element: when
it->what == IT_COMPOSITION and it->cmp_it.ch < 0.
The following patch also works for me:
diff --git a/src/xdisp.c b/src/xdisp.c
index 3c9d385..c9848fd 100644
--- a/src/xdisp.c
+++ b/src/xdisp.c
@@ -5902,6 +5902,8 @@ get_next_display_element (struct it *it)
it->char_to_display = it->c;
}
}
+ else if (it->what == IT_COMPOSITION && it->cmp_it.ch < 0)
+ it->char_to_display = it->c;
#ifdef HAVE_WINDOW_SYSTEM
/* Adjust face id for a multibyte character. There are no multibyte
For completeness: The behaviour seems to be independent of the font
being used. I tried with the 6x13 system font (which by its fixed
width nature displays fine, btw) and with "DejaVu Sans Mono" which
I used for the screenshots (sorry for not mentioning that in the
original report.)
Thanks,
Bertram
This bug report was last modified 14 years and 1 day ago.
Previous Next
GNU bug tracking system
Copyright (C) 1999 Darren O. Benham,
1997,2003 nCipher Corporation Ltd,
1994-97 Ian Jackson.