From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.io!.POSTED.ciao.gmane.io!not-for-mail From: Eli Zaretskii Newsgroups: gmane.emacs.devel Subject: Re: Ligatures (was: Unify the Platforms: Cairo+FreeType+Harfbuzz Everywhere (except TTY)) Date: Fri, 22 May 2020 14:23:34 +0300 Message-ID: <831rnc43ih.fsf@gnu.org> References: <20200517165953.000044d2@web.de> <83lflqblp0.fsf@gnu.org> <83ftbybio3.fsf@gnu.org> <83zha69xs2.fsf@gnu.org> <83367x9qeq.fsf@gnu.org> <0ccae2a4-533b-d15c-2884-c2f00b067776@gmail.com> <83wo5987mk.fsf@gnu.org> <99d4beed-88ae-b5cd-3ecb-a44325c8a1dc@gmail.com> <20200518215908.GA57594@breton.holly.idiocy.org> <83mu6481v3.fsf@gnu.org> <75a90563-51b4-d3b8-4832-fc0e2542af0d@gmail.com> <83blmi7hys.fsf@gnu.org> <837dx55qff.fsf@gnu.org> <834ks95cmz.fsf@gnu.org> <4faa291f-f2df-36d1-73d5-332b93a9b6d8@gmail.com> <83wo544hx5.fsf@gnu.org> Mime-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit Injection-Info: ciao.gmane.io; posting-host="ciao.gmane.io:159.69.161.202"; logging-data="84320"; mail-complaints-to="usenet@ciao.gmane.io" Cc: cpitclaudel@gmail.com, alan@idiocy.org, emacs-devel@gnu.org To: Pip Cet Original-X-From: emacs-devel-bounces+ged-emacs-devel=m.gmane-mx.org@gnu.org Fri May 22 13:24:13 2020 Return-path: Envelope-to: ged-emacs-devel@m.gmane-mx.org Original-Received: from lists.gnu.org ([209.51.188.17]) by ciao.gmane.io with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1jc5me-000Lni-Lr for ged-emacs-devel@m.gmane-mx.org; Fri, 22 May 2020 13:24:12 +0200 Original-Received: from localhost ([::1]:56814 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jc5md-00064n-O1 for ged-emacs-devel@m.gmane-mx.org; Fri, 22 May 2020 07:24:11 -0400 Original-Received: from eggs.gnu.org ([2001:470:142:3::10]:34896) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jc5m1-0005Ew-RZ for emacs-devel@gnu.org; Fri, 22 May 2020 07:23:33 -0400 Original-Received: from fencepost.gnu.org ([2001:470:142:3::e]:42604) by eggs.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jc5lz-00084k-TR; Fri, 22 May 2020 07:23:32 -0400 Original-Received: from [176.228.60.248] (port=1777 helo=home-c4e4a596f7) by fencepost.gnu.org with esmtpsa (TLS1.2:RSA_AES_256_CBC_SHA1:256) (Exim 4.82) (envelope-from ) id 1jc5lz-0003Fh-8r; Fri, 22 May 2020 07:23:31 -0400 In-Reply-To: (message from Pip Cet on Fri, 22 May 2020 09:25:31 +0000) X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: emacs-devel-bounces+ged-emacs-devel=m.gmane-mx.org@gnu.org Original-Sender: "Emacs-devel" Xref: news.gmane.io gmane.emacs.devel:251209 Archived-At: > From: Pip Cet > Date: Fri, 22 May 2020 09:25:31 +0000 > Cc: cpitclaudel@gmail.com, alan@idiocy.org, emacs-devel@gnu.org > > > > should work, but it has weird side effects that I'm pretty sure aren't > > > intended (paren highlighting is broken, for example). > > > > This is not the right way. > > What is the right way, then? I want all ligatures my font supports. You can request all the ligatures that _can_ be supported; those which aren't available in the font you use will not be ligated (if you use font-shape-gstring in the composition-function-table slot). Or you can request only those ligatures that make sense for the particular use case. For example, when displaying program source code you'd probably want the various symbols, like -> etc., to produce ligatures, but you most probably won't want "ffi" in a variable name to produce a ligature. Or you can provide your own function to use in the composition-function-table, and that function can do more complex stuff, like refuse to ligate under some complicated conditions. Therefore, I think letting Lisp programs (and thus users) control what gets composed into ligatures and what doesn't is an important feature to have. We should develop it more, because currently it lacks some features we'd need for better ligature support (see the TODO item about that), but I think the basic design is valid. At least I didn't yet see any evidence that it isn't valid; perhaps when we develop it more and/or start using it more, we will find some problems, but I don't see them yet. > Also, even if it is the wrong thing to do, why does it break seemingly > unrelated things? I don't know. Can you show how to reproduce that in the current codebase on master? Then I'll look into it. > > (set-char-table-range > > composition-function-table '(?f . ?f) > > (list (vector "ffi" 0 'compose-gstring-for-graphic))) > > > This shows how to do this only for the "ffi" ligature, but I think it > > makes the idea clear. > > I'm afraid it doesn't, to me. Doesn't make the idea clear or doesn't produce the ligature? If the latter, then I'm puzzled, because it did work for me with a font that has the ffi ligature. If the former, please ask more questions and I will try to explain as best I can.