all messages for Emacs-related lists mirrored at yhetil.org
 help / color / mirror / code / Atom feed
From: Eli Zaretskii <eliz@gnu.org>
To: help-gnu-emacs@gnu.org
Subject: Re: Emacs 28: Specific TTF font gets loaded with font-backend x instead of ftcrhb
Date: Fri, 07 Feb 2020 11:48:34 +0200	[thread overview]
Message-ID: <835zgig231.fsf@gnu.org> (raw)
In-Reply-To: <b271f1084b17a53ee1583d1f8cd92e9ed21cf360.camel@gnu.org> (message from Tassilo Horn on Fri, 07 Feb 2020 09:57:36 +0100)

> From: Tassilo Horn <tsdh@gnu.org>
> Date: Fri, 07 Feb 2020 09:57:36 +0100
> 
> On Thu, 2020-02-06 at 20:15 +0200, Eli Zaretskii wrote:
> > > After evaling that, -> becomes an arrow and ~> becomes an arrow with
> > > curvy stroke.  So either there's some issue with PragmataPro or my
> > > computer at home.
> > 
> > Well, it would be interesting to hear what happens with that other
> > machine and/or the font.  Be sure to try that in an Emacs built with
> > the HarfBuzz library, as it should have the most advanced ligature
> > support there is.
> 
> I'm pretty sure I had built with HarfBuzz but tried again anyway.  This
> time it worked just fine.  I'll attach a screenshot showing two emacs
> frames with ligatures in action.  The left one is with the JetBrains
> Mono font, the right one is with the PragmataPro Liga font.

So the conclusion is that this works with both fonts?  (I cannot be
sure because the two displays look somewhat differently).

> > > Do I understand it correctly that "overshooting" with the above
> > > rules has no bad effect, i.e., if there is a composition rule for ->
> > > but the font has no ligature glyph for that, then it just stays the
> > > way it is?
> > 
> > Not exactly.  In Emacs built with HarfBuzz, you will see the original
> > ASCII characters displayed, but handled as a single grapheme cluster,
> > i.e. the cursor will be "widened" to include all of them, and a single
> > C-f will move across all of them.
> 
> That doesn't seem to happen.  forward-char moves inside ligature
> sequences no matter if the font has a ligature or not.  I.e., even with
> a ligature ~= which gets composed to an equal sign with curvy upper line
> point move half-by-half.

I think that's because you use font-shape-gstring directly.  You
should use compose-gstring-for-graphic instead.

> > > So there could be some ligature-minor-mode which just adds all
> > > possible composition rules?  (Just speaking naively, I guess there
> > > are several distinct categories of ligatures which you would want to
> > > enable/disable on a per-mode basis.)
> > 
> > The part in parentheses is exactly the non-trivial part: we should
> > figure out which ligatures should be in effect in what major modes,
> > and probably also as function of some user preferences (such as the
> > language used in the buffer).  IOW, we need to design the UI for
> > specifying what classes of ligatures to activate.
> 
> I've tried categorizing them a bit but this feels like quite a hard
> task, and I've just done programming ligatures.  Does -- fit in an
> operators category (because of C, Java, ...) or a comment category
> (because of SQL) or better forget about concrete language syntaxes and
> have a dashes category?

Yes, this is non-trivial.

> > Burt if you only care about ligatures in programming languages, the
> > job becomes much simpler, I think.  Although I'd still expect the
> > ligatures in effect to depend on the programming language of the
> > current buffer.
> 
> Right now I've just enabled anything.

Not really everything, IMO, as there are also ligatures relevant only
to human-readable text.  For example, see this URL:

  https://en.wikipedia.org/wiki/Orthographic_ligature#Ligatures_in_Unicode_(Latin_alphabets)

> To me it seems like there is some guideline like "if ligature X is
> not applicable in programming language Y then the characted sequence
> it is composed from won't appear there anyway".

This is probably correct for programming-language major modes, yes.

> But one thing which comes to mind is that one might want to suppress
> ligature composition inside strings...

Which probably means we'd need some text property to disable
composition there.

> > Which means composition-function-table needs to be buffer-local, and
> > we should make sure making it buffer-local does TRT.
> 
> This doesn't seem to work right now.  See the FIXME at the bottom of
> below code.

We need to fix that.  We do have buffer-local char-tables, for example
buffer-display-table.  We should probably define a buffer-local
composition-function-table in the same way, and have a global table as
its parent or something (for language-specific compositions, like
those for accented letters).



  parent reply	other threads:[~2020-02-07  9:48 UTC|newest]

Thread overview: 27+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-02-04 11:12 Emacs 28: Specific TTF font gets loaded with font-backend x instead of ftcrhb Tassilo Horn
2020-02-04 12:15 ` Robert Pluim
2020-02-04 12:25   ` Robert Pluim
2020-02-04 12:58     ` Tassilo Horn
2020-02-04 13:54       ` Robert Pluim
2020-02-04 14:21         ` Tassilo Horn
2020-02-04 16:26           ` Robert Pluim
2020-02-04 18:32             ` Tassilo Horn
2020-02-04 20:11               ` Robert Pluim
2020-02-05 16:51                 ` Tassilo Horn
2020-02-04 15:31     ` Eli Zaretskii
2020-02-04 18:43       ` Tassilo Horn
2020-02-04 19:08         ` Eli Zaretskii
2020-02-05 16:44           ` Tassilo Horn
2020-02-05 17:04             ` Eli Zaretskii
2020-02-06  7:12               ` Tassilo Horn
2020-02-06 18:15                 ` Eli Zaretskii
2020-02-07  9:21                   ` Tassilo Horn
     [not found]                   ` <b271f1084b17a53ee1583d1f8cd92e9ed21cf360.camel@gnu.org>
2020-02-07  9:48                     ` Eli Zaretskii [this message]
2020-02-07 10:41                       ` Tassilo Horn
2020-02-07 13:28                         ` Eli Zaretskii
2020-02-08  9:39                           ` Tassilo Horn
2020-02-08  9:52                             ` Tassilo Horn
2020-02-08 10:16                               ` Eli Zaretskii
2020-02-08 10:36                                 ` Eli Zaretskii
2020-02-08 12:29                                   ` Tassilo Horn
2020-02-08 13:50                                     ` Eli Zaretskii

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=835zgig231.fsf@gnu.org \
    --to=eliz@gnu.org \
    --cc=help-gnu-emacs@gnu.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
Code repositories for project(s) associated with this external index

	https://git.savannah.gnu.org/cgit/emacs.git
	https://git.savannah.gnu.org/cgit/emacs/org-mode.git

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.