GNU bug report logs - #8703
truncated unicode glyphs in X11

Previous Next

Package: emacs;

Reported by: Bertram Felgenhauer <bertram.felgenhauer <at> googlemail.com>

Date: Thu, 19 May 2011 20:23:02 UTC

Severity: normal

Fixed in version 23.4

Done: Glenn Morris <rgm <at> gnu.org>

Bug is archived. No further changes may be made.

Full log


Message #11 received at 8703 <at> debbugs.gnu.org (full text, mbox):

From: Bertram Felgenhauer <bertram.felgenhauer <at> googlemail.com>
To: Eli Zaretskii <eliz <at> gnu.org>
Cc: 8703 <at> debbugs.gnu.org, Kenichi Handa <handa <at> m17n.org>
Subject: Re: bug#8703: truncated unicode glyphs in X11
Date: Fri, 20 May 2011 13:56:04 +0200
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 49 days ago.

Previous Next


GNU bug tracking system
Copyright (C) 1999 Darren O. Benham, 1997,2003 nCipher Corporation Ltd, 1994-97 Ian Jackson.