Hi,

I've stumbled upon the Arch Linux package rxvt-unicode-patched
(https://aur.archlinux.org/packages/rxvt-unicode-patched/), which
includes the following patches:

    # font-width-fix.patch:
    --- src/rxvtfont.C.bukind   2007-11-30 14:36:33.000000000 +0600
    +++ src/rxvtfont.C  2007-11-30 14:39:29.000000000 +0600
    @@ -1171,12 +1171,21 @@
               XGlyphInfo g;
               XftTextExtents16 (disp, f, &ch, 1, &g);

    +/*
    + * bukind: don't use g.width as a width of a character!
    + * instead use g.xOff, see e.g.: 
http://keithp.com/~keithp/render/Xft.tutorial
    +
               g.width -= g.x;

               int wcw = WCWIDTH (ch);
               if (wcw > 0) g.width = (g.width + wcw - 1) / wcw;

               if (width    < g.width       ) width    = g.width;
    + */
    +          int wcw = WCWIDTH (ch);
    +          if (wcw > 1) g.xOff = g.xOff / wcw;
    +          if (width < g.xOff) width = g.xOff;
    +
               if (height   < g.height      ) height   = g.height;
               if (glheight < g.height - g.y) glheight = g.height - g.y;
             }


    # line-spacing-fix.patch
    --- src/rxvtfont.C.orig     2011-07-20 22:19:29.878012201 -0300
    +++ src/rxvtfont.C  2011-07-20 22:19:33.634671723 -0300
    @@ -1237,11 +1237,22 @@

           FT_Face face = XftLockFace (f);

    +/*
    + * use ascent, descent and height from XftFont *f instead of FT_Face face.
    + * this somehow reproduces the behaviour of the line height as seen on 
xterm.
    +
           ascent  = (face->size->metrics.ascender + 63) >> 6;
           descent = (-face->size->metrics.descender + 63) >> 6;
           height  = max (ascent + descent, (face->size->metrics.height + 63) 
>> 6);
           width   = 0;

    + */
    +
    +      ascent  = f->ascent;
    +      descent = f->descent;
    +      height  = max (ascent + descent, f->height);
    +      width   = 0;
    +
           bool scalable = face->face_flags & FT_FACE_FLAG_SCALABLE;

           XftUnlockFace (f);

While I cannot say much about the second patch, the first one appears to
fix the necessary `URxvt.letterSpace: -1` when using `Ubuntu Mono`.

Please consider including them.


Thanks,
Daniel.

--
http://daniel.hahler.de/


--- src/rxvtfont.C.bukind	2007-11-30 14:36:33.000000000 +0600
+++ src/rxvtfont.C	2007-11-30 14:39:29.000000000 +0600
@@ -1171,12 +1171,21 @@
           XGlyphInfo g;
           XftTextExtents16 (disp, f, &ch, 1, &g);
 
+/*  
+ * bukind: don't use g.width as a width of a character!
+ * instead use g.xOff, see e.g.: http://keithp.com/~keithp/render/Xft.tutorial
+
           g.width -= g.x;
 
           int wcw = WCWIDTH (ch);
           if (wcw > 0) g.width = (g.width + wcw - 1) / wcw;
 
           if (width    < g.width       ) width    = g.width;
+ */
+          int wcw = WCWIDTH (ch);
+          if (wcw > 1) g.xOff = g.xOff / wcw;
+          if (width < g.xOff) width = g.xOff;
+
           if (height   < g.height      ) height   = g.height;
           if (glheight < g.height - g.y) glheight = g.height - g.y;
         }


--- src/rxvtfont.C.orig	2011-07-20 22:19:29.878012201 -0300
+++ src/rxvtfont.C	2011-07-20 22:19:33.634671723 -0300
@@ -1237,11 +1237,22 @@
 
       FT_Face face = XftLockFace (f);
 
+/*
+ * use ascent, descent and height from XftFont *f instead of FT_Face face.
+ * this somehow reproduces the behaviour of the line height as seen on xterm.
+
       ascent  = (face->size->metrics.ascender + 63) >> 6;
       descent = (-face->size->metrics.descender + 63) >> 6;
       height  = max (ascent + descent, (face->size->metrics.height + 63) >> 6);
       width   = 0;
 
+ */
+
+      ascent  = f->ascent;
+      descent = f->descent;
+      height  = max (ascent + descent, f->height);
+      width   = 0;
+
       bool scalable = face->face_flags & FT_FACE_FLAG_SCALABLE;
 
       XftUnlockFace (f);
_______________________________________________
rxvt-unicode mailing list
[email protected]
http://lists.schmorp.de/cgi-bin/mailman/listinfo/rxvt-unicode

Reply via email to