Subject: 23.0.60; [Feature request] activate kerning and standard ligatures in variable-pitch-mode

From: James Cloos <[email-masked]>
Date: Tue, 24 Jun 2008 07:23:50 -0400

Please write in English if possible, because the Emacs maintainers
usually do not have translators to read other languages for them.

Your bug report will be posted to the [email-masked] mailing list.

Please describe exactly what actions triggered the bug
and the precise symptoms of the bug:

I’ve been testing (variable-pitch-mode) for gnus *Article* buffers,
message buffers and src modes.  Quite cool.

But it would be better were the standard ligatures applied.

I’ve been using DejaVu Serif for the variable-pitch face.  Its OTF
tables include ff, fi, fl, ffi, ffl ligs which should apply for all text
runs, but Emacs does not apply them.  The ligs /are/ easier to read,
even at screen resolutions.

Obviously this should not be done for fixed-pitch text runs, but it will
improve variable-pitch runs quite a bit.

For cases where point is at one of the characters which make up a
ligated glyph, the Right Thing To Do is to break the text run either
side of point, so that the individual glyphs are painted; this will
ensure that the user can tell what is going on.

Put another way:  in order the get the ligated glyphs you have to pass
each text run at least a word at a time to the OTF engine.  If the text
run is also broken before and after point — which implies that the
character at point is its own single-character text run — then
everything just works.

(At least for simple scripts like latin, greek, cyrillic, et al.  I
/think/ that concept would work OK for arabic as well, but I’m not at
all sure how well it matches up with, eg, the dravidian scripts.)

For non-OTF variable-pitch-mode fonts, it would not hurt to look for
encoded ligatures and use them, at least for fi and fl, but getting it
working for fonts with OTF tables would be an important first step.

Kerning probably will have only a minimal impact on the display at
typical screen resolution, but it should be applied anyway.  There are a
few combinations where it does make a significant difference in legibility.

As a side note, it would be cool to support applying other OTF features
by way of overlays.

In GNU Emacs 23.0.60.1 (i686-pc-linux-gnu, X toolkit, Xaw3d scroll bars)
 of 2008-06-21 on lugabout
Windowing system distributor `The X.Org Foundation', version 11.0.10599001
configured using `configure  '--prefix=/usr' '--host=i686-pc-linux-gnu' '--mandir=/usr/share/man' '--infodir=/usr/share/info' '--datadir=/usr/share' '--sysconfdir=/etc' '--localstatedir=/var/lib' '--program-suffix=-emacs-23' '--infodir=/usr/share/info/emacs-23' '--without-carbon' '--with-sound' '--with-x' '--with-toolkit-scroll-bars' '--with-gif' '--with-jpeg' '--with-png' '--with-rsvg' '--with-tiff' '--with-xpm' '--enable-font-backend' '--with-freetype' '--with-xft' '--with-libotf' '--with-m17n-flt' '--with-x-toolkit=athena' '--without-hesiod' '--with-kerberos' '--with-kerberos5' '--with-gpm' '--with-dbus' '--build=i686-pc-linux-gnu' 'build_alias=i686-pc-linux-gnu' 'host_alias=i686-pc-linux-gnu' 'CC=i686-pc-linux-gnu-gcc' 'CFLAGS=-march=pentium3 -O2' 'LDFLAGS= -Wl,--as-needed ''

Important settings:
  value of $LC_ALL: nil
  value of $LC_COLLATE: C
  value of $LC_CTYPE: nil
  value of $LC_MESSAGES: nil
  value of $LC_MONETARY: nil
  value of $LC_NUMERIC: nil
  value of $LC_TIME: C
  value of $LANG: en_US.UTF-8
  value of $XMODIFIERS: nil
  locale-coding-system: utf-8-unix
  default-enable-multibyte-characters: t