all messages for Emacs-related lists mirrored at yhetil.org
 help / color / mirror / code / Atom feed
From: Daniel Colascione <dancol@dancol.org>
To: "Drew Adams" <drew.adams@oracle.com>, "Jan Djärv" <jan.h.d@swipnet.se>
Cc: Eli Zaretskii <eliz@gnu.org>, Chong Yidong <cyd@gnu.org>,
	emacs-devel <emacs-devel@gnu.org>
Subject: Re: [PATCH] Re: About the :distant-foreground face attribute
Date: Mon, 13 Jan 2014 18:34:38 -0800	[thread overview]
Message-ID: <52D4A23E.4030802@dancol.org> (raw)
In-Reply-To: <ebf50f62-3c4c-4a04-93a4-bf0d582509dd@default>

It sounds like we're in broad agreement on the mechanism. Now let's talk 
about default policy.

On 01/13/2014 05:32 PM, Drew Adams wrote:
>>> Region highlighting should never be overridden by font-lock
>>> highlighting.
>>
>> You can configure Emacs to act that way.
>
> Emacs should act that way by default, as it always has.  Anyone
> who wants automatic foreground twiddling for a given face should
> ask for that explicitly.  Whether that twiddling is to accommodate
> font-locking or for some other reason.

I don't have a strong opinion about the default, although I lean toward 
the behavior #3 (3b specifically) below since it looks blingy and might 
help attract new users.

>>> Then choose the `region' background accordingly.  If Emacs cannot
>>> do that automatically in the case of some platforms, too bad - let
>>> users compensate by setting `region' manually.  They should always
>>> be the ultimate judge of what works best for them.

I still don't understand exactly what you're proposing. Here are our 
options:

1) We can ship Emacs with hard-coded defaults for region's foreground 
and background colors and ignore system settings. This arrangement will 
produce legible text, and there's no need to adjust region's colors.

2) We can ship Emacs such that it uses the system selection foreground 
and background colors for region. This arrangement will also produce 
legible text, and there's no need to adjust region's colors.

3) We can ship Emacs such that it uses the system selection background 
color and uses font-lock colors for foreground text. This arrangement 
will sometimes produce an illegible result because the system background 
color is chosen independently of font-lock's face colors. We can

   3a) do nothing and make users customize either their system selection 
color, Emacs region face, or font-lock color scheme

   3b) Automatically adjust foreground colors when the region face is in 
effect so that they're legible against the system selection background 
color. This is the policy my patch makes Emacs use by default and it's 
the one I prefer.

   3c) Switch to the system selection foreground color when the 
foreground color we would otherwise use would be illegible against the 
system selection background color. My patch can support this policy, and 
it's the only policy :distant-foreground supports.

   3d) Adjust the region face background color until it's legible 
against all font-lock faces? I *think* this is what you're proposing, 
but it doesn't make any sense. If we diverge from the system selection 
background color, we've already lost the integration benefit and should 
just use option #1 above.

So to put the discussion in more concrete terms: say I run a stock GTK3 
Emacs on a system with a background color exactly equal to "Blue1", 
which is the color we use for font-lock-function-name-face. I visit 
xfaces.c, search for "UNSPECIFIEDP", and hit C-a C-SPC C-e. What colors 
do you propose we use for the text "UNSPECIFIEDP" on that line?

>> Emacs won't change any colors users set on the region face.
>> If a user sets the region's foreground and background colors,
>> Emacs will use those colors for the selection.
>
> And what if the default `region' foreground and background
> are exactly what the user wants?  Does s?he have to jump
> through a hoop to "set" face attributes to what they already
> were, just to say "Hands off!"?  She shouldn't have to.

If we ship configuration 3b, we won't set a foreground color and we'll 
use the specified region background color (which will come from the 
system) and the font-lock supplied foreground unless the foreground 
would be illegible against the background. In this case, we adjust the 
foreground color until it's legible.

If a user wants to customize the selection color and uses M-x 
customize-face RET region RET, she'll be able to set foreground and 
background independently. If she unchecks :contrast-function, we will 
always use those colors exactly.

If she leaves :contrast-function set, Emacs will always use her 
specified colors unless, again, the combination would be illegible, and 
in this case, Emacs will adjust the foreground color until it becomes 
legible. But why would she select a foreground and background colors 
combination that is illegible in the first place?

>> We are talking specifically about the case where users do
>> *not* specify a foreground color for region.
>
> And what does "not specify" mean?  Does it mean only that
> the value has not changed from the standard (default) value?
> Or does it mean that users somehow explicitly let you know
> that they do not mind if you twiddle their region?

It depends on the configuration we ship.

> A face being equal to its default setting does not imply
> that the user gives Emacs license to change it.

I disagree. If our user leaves a face at the default setting, she's 
giving us *explicit license* to use whatever heuristics we think work best.

> IMO, any such feature should be opt-in, not opt-out.  A
> user should not need to explicitly do anything to stop
> Emacs from twiddling her region.  She should ask for
> twiddling if she wants that.

I'm in favor of shipping defaults that create a good user experience. If 
a user never expressed a preference with respect to foreground and 
background colors, there's no contract to violate.

>> Emacs adjusts colors only when a :contrast-function is set
>> for some face applying to a particular character and that
>> face isn't overridden by one that sets :contrast-function to
>> nil.
>
> OK, that sounds a bit better, at least.  So if any face has a
> nil :twiddle-me, er sorry, :contrast-function attribute, and
> that face is merged with a face that has a non-nil one, the nil
> one wins and there is no twiddling.  Is that right?

Right now, it depends on the order in which the faces are merged. The 
last face that specifies a :contrast-function gets to control the 
contrast behavior. Right now, region is the only face that specifies a 
contrast-function, and I can't think of another good use case at the moment.

> It is important that no face, including `region', have a
> non-nil :contrast-function by default.

I disagree. Putting it on :region by default is perfectly fine. Remember 
that the attribute has no effect unless the result would otherwise be 
illegible.

>>> And that user control should be *per face*.  One should not
>>> be obliged to choose either preventing the overriding or
>>> allowing it for all faces.  The choice should be a function
>>> of the particular face.  Now *that* could be done using a
>>> new face attribute, if you want.  (Or a function.)
>
> This is OK as long as any long-existing faces such as `region'
> will not have non-nil :contrast-function attributes by default.
> Let users who really want their region twiddled opt into that.
>
> But it still makes life more complicated for Lisp code that
> wants to get or set the actual appearance of the face.  Whereas
> before code needed only to get or set attribute :foreground,
> now it will need to also check for a non-nil :contrast-function
> and apply that.

The C code already has functionality to compute the exact face used to 
render a particular location in a particular buffer in a particular 
frame. We could expose this functionality to lisp if there were a good 
use case. But right now, I don't understand why lisp code would need to 
know the post-adjustment colors used for display. Can you explain why 
we'd want to know?

Also, today, any lisp code that wants to mimic the redisplay face 
combination logic needs to take into account text properties, 
frame-local variables, overlays, display attributes, and so on. It would 
be a big job, and I'm not aware of anyone who's done it.

> Still, this sounds better than what has been proposed so far.

Thanks.



  parent reply	other threads:[~2014-01-14  2:34 UTC|newest]

Thread overview: 134+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2014-01-07 12:55 About the :distant-foreground face attribute Chong Yidong
2014-01-07 15:00 ` Jan Djärv
2014-01-07 17:28   ` Drew Adams
2014-01-07 18:01     ` Eli Zaretskii
2014-01-07 18:09     ` Joel Mccracken
     [not found]     ` <<8361pvsmbk.fsf@gnu.org>
2014-01-07 18:44       ` Drew Adams
2014-01-07 19:01         ` Eli Zaretskii
     [not found]         ` <<83zjn7r4z3.fsf@gnu.org>
2014-01-07 19:06           ` Drew Adams
2014-01-07 19:15             ` Eli Zaretskii
2014-01-07 21:57   ` Chong Yidong
2014-01-08  3:45     ` Eli Zaretskii
2014-01-08  5:24       ` Chong Yidong
2014-01-08  9:35         ` Jan Djärv
2014-01-08  9:52           ` Chong Yidong
2014-01-08 10:10             ` Jan Djärv
2014-01-08 14:49               ` Chong Yidong
2014-01-08 16:37                 ` Jan Djärv
2014-01-08 17:08                   ` Drew Adams
2014-01-08 16:57                 ` Drew Adams
2014-01-08 14:05         ` Stefan Monnier
2014-01-08 17:43         ` Eli Zaretskii
2014-01-09 16:15           ` Chong Yidong
2014-01-09 17:02             ` Stefan Monnier
2014-01-09 17:07               ` Drew Adams
2014-01-09 17:46                 ` Eli Zaretskii
2014-01-09 18:21                   ` Chong Yidong
2014-01-09 22:25                     ` Drew Adams
2014-01-09 22:48                     ` David Engster
2014-01-12 11:14                       ` David Engster
2014-01-12 11:40                         ` Jan Djärv
2014-01-12 12:21                           ` David Engster
2014-01-12 12:56                             ` Jan Djärv
2014-01-12 13:07                               ` David Engster
2014-01-12 13:17                                 ` Jan Djärv
2014-01-12 20:14                         ` Chong Yidong
2014-01-12 21:20                           ` Drew Adams
2014-01-12 22:07                           ` Jan Djärv
2014-01-13  0:57                             ` Drew Adams
2014-01-12 22:59                           ` Stefan Monnier
2014-01-13  4:14                             ` chad
2014-01-09 17:05             ` Eli Zaretskii
2014-01-09 17:22               ` David Engster
2014-01-09 17:27                 ` Lars Magne Ingebrigtsen
2014-01-09 17:50                   ` Jan D.
2014-01-09 20:58                 ` Darren Hoo
2014-01-09 21:17                   ` David Engster
2014-01-09 22:29                     ` Darren Hoo
2014-01-09 22:25                   ` Drew Adams
2014-01-09 22:24                 ` Drew Adams
2014-01-09 17:39               ` Josh
2014-01-09 17:57                 ` Eli Zaretskii
2014-01-09 17:49               ` Jan D.
2014-01-13 13:13           ` [PATCH] " Daniel Colascione
2014-01-13 16:27             ` Jan Djärv
2014-01-13 16:33             ` Jan Djärv
2014-01-13 18:41               ` Daniel Colascione
2014-01-13 21:29                 ` Jan Djärv
2014-01-13 21:36                   ` Daniel Colascione
2014-01-13 23:01                     ` Drew Adams
2014-01-13 23:11                       ` Daniel Colascione
2014-01-14  1:32                         ` Drew Adams
2014-01-14  1:45                           ` Stefan Monnier
2014-01-14 19:32                             ` Drew Adams
2014-01-14  2:34                           ` Daniel Colascione [this message]
2014-01-14 19:32                             ` Drew Adams
2014-01-14 22:38                               ` Daniel Colascione
2014-01-15  0:31                                 ` Drew Adams
2014-01-15  0:54                                   ` Daniel Colascione
2014-01-15  3:07                                     ` Drew Adams
2014-01-15  3:52                                       ` Daniel Colascione
2014-01-15  4:59                                         ` Drew Adams
2014-01-15  5:12                                           ` Daniel Colascione
2014-01-15  5:39                                             ` Drew Adams
2014-01-15 14:38                                               ` Stefan Monnier
2014-01-15  4:50                               ` Yuri Khan
2014-01-15  7:50                                 ` Jan D.
2014-01-15  7:52                                   ` Daniel Colascione
2014-01-15  8:17                                     ` Jan D.
2014-01-15 17:23                                     ` Drew Adams
2014-01-13 23:57                     ` Stefan Monnier
2014-01-14  0:07                       ` Daniel Colascione
2014-01-14  1:45                         ` Stefan Monnier
2014-01-14  2:41                           ` Daniel Colascione
2014-01-14  8:47                       ` Chong Yidong
2014-01-14  9:42                         ` Jan D.
2014-01-14 19:32                       ` Drew Adams
2014-01-14  7:47                     ` Jan D.
2014-01-14  8:18                       ` Daniel Colascione
2014-01-14  9:34                         ` Jan D.
2014-01-14 10:44                           ` Daniel Colascione
2014-01-14 11:44                             ` Jan D.
2014-01-14 17:56                               ` Stefan Monnier
2014-01-14 18:06                                 ` Jan Djärv
2014-01-14 18:31                                   ` Daniel Colascione
2014-01-14 18:51                                 ` John Yates
2014-01-14 22:19                                   ` Stefan Monnier
2014-01-14 18:47                               ` Daniel Colascione
2014-01-14 20:01                                 ` Jan Djärv
2014-01-14 20:06                                   ` Daniel Colascione
2014-01-14 22:05                                     ` [PATCH] " Jan Djärv
2014-01-14 22:14                                       ` Daniel Colascione
2014-01-15  6:33                                         ` Jan Djärv
2014-01-15  8:05                                           ` Daniel Colascione
2014-01-15  9:25                                             ` Jan D.
2014-01-15 14:43                                               ` Stefan Monnier
2014-01-14 20:39                                   ` [PATCH] " Daniel Colascione
2014-01-14 21:58                                     ` [PATCH] " Jan Djärv
2014-01-14 22:06                                       ` Drew Adams
2014-01-15  3:52                                         ` Eli Zaretskii
2014-01-15  4:22                                       ` Stefan Monnier
2014-01-15  4:25                                         ` Daniel Colascione
2014-01-15  6:39                                           ` Jan Djärv
2014-01-15 15:39                                           ` Eli Zaretskii
2014-01-15 14:41                                         ` Stefan Monnier
2014-01-15 15:38                                         ` Eli Zaretskii
2014-01-15 16:17                                           ` Stefan Monnier
2014-01-15 16:53                                             ` Eli Zaretskii
2014-01-15 17:33                                               ` Stefan Monnier
2014-01-15 17:51                                                 ` Eli Zaretskii
2014-01-15 18:43                                                   ` Stefan Monnier
2014-01-15 19:06                                                     ` Eli Zaretskii
2014-01-15 20:05                                                       ` Josh
2014-01-15 20:40                                                         ` Eli Zaretskii
2014-01-15 21:03                                                           ` Daniel Colascione
2014-01-15 21:12                                                             ` Eli Zaretskii
2014-01-15 21:15                                                               ` Daniel Colascione
2014-01-15 21:31                                                             ` John Yates
2014-01-15 22:11                                                             ` Drew Adams
2014-01-15 23:58                                                     ` Stefan Monnier
2014-01-07 22:50   ` Jan Djärv
2014-01-08  3:13 ` Darren Hoo
     [not found] <<87bnzo9cja.fsf@gnu.org>
     [not found] ` <<59B7E7FC-48D0-4737-B1BB-FFAC5BA9E07A@swipnet.se>
     [not found]   ` <<874n5f3162.fsf@gnu.org>
     [not found]     ` <<83fvozf86g.fsf@gnu.org>
     [not found]       ` <<87r48javwe.fsf@gnu.org>
     [not found]         ` <<83bnzmfjxe.fsf@gnu.org>
     [not found]           ` <<87bnzlyvwb.fsf@gnu.org>
     [not found]             ` <<jwvppo1dr9r.fsf-monnier+emacs@gnu.org>
     [not found]               ` <<b53f01f5-1974-417a-b95b-a7e1b6906467@default>
     [not found]                 ` <<83wqi9cakl.fsf@gnu.org>
2014-01-09 21:12                   ` Drew Adams
2014-01-09 21:22                     ` Eli Zaretskii
     [not found]           ` <<52D3E689.6050902@dancol.org>
     [not found]             ` <<8E16225F-53EF-498A-AB35-66EB9B33B859@swipnet.se>
     [not found]               ` <<52D43360.6050605@dancol.org>
     [not found]                 ` <<9BD01B88-AF13-44DD-8DBE-4598BAC136DD@swipnet.se>
     [not found]                   ` <<52D45C73.6090906@dancol.org>
     [not found]                     ` <<52D4EBA9.8050802@swipnet.se>
     [not found]                       ` <<52D4F2C2.8080800@dancol.org>
     [not found]                         ` <<52D504A7.80104@swipnet.se>
     [not found]                           ` <<52D514FF.7010404@dancol.org>
     [not found]                             ` <<52D52312.6070106@swipnet.se>
     [not found]                               ` <<52D58632.3010106@dancol.org>
     [not found]                                 ` <<381DEBDC-71D8-4FAC-BA55-897FEC73A2FC@swipnet.se>
     [not found]                                   ` <<52D5A072.5010508@dancol.org>
     [not found]                                     ` <<064CFFB5-6E50-40D5-B2CB-2BECC656D93F@swipnet.se>
     [not found]                                       ` <<174db5f5-db14-4484-a2f9-9478d2f5fea1@default>
     [not found]                                         ` <<83y52h52cd.fsf@gnu.org>
2014-01-15  3:56                                           ` [PATCH] " Drew Adams

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=52D4A23E.4030802@dancol.org \
    --to=dancol@dancol.org \
    --cc=cyd@gnu.org \
    --cc=drew.adams@oracle.com \
    --cc=eliz@gnu.org \
    --cc=emacs-devel@gnu.org \
    --cc=jan.h.d@swipnet.se \
    /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.