unofficial mirror of bug-gnu-emacs@gnu.org 
 help / color / mirror / code / Atom feed
* bug#30978: 25.3; Suggestion: define-minor-mode should define mode-lighter variable
@ 2018-03-28 20:11 Howard Melman
  2019-07-14 13:40 ` Lars Ingebrigtsen
  0 siblings, 1 reply; 11+ messages in thread
From: Howard Melman @ 2018-03-28 20:11 UTC (permalink / raw)
  To: 30978

Some packages define a user option to let users configure
the lighter string used in the mode-line, but some just use
a hard coded string. Packages such as diminish, delight and
dim exist to help customize these.

The define-minor-mode macro creates keymaps and other things
to help mode authors follow conventions. If it created a
mode-lighter user option when passed in a string (and not a
symbol) then users would have an easier time configuring
their mode-line without having to find and install a package
to do so.

Howard

In GNU Emacs 25.3.3 (x86_64-apple-darwin13.4.0, Carbon Version 157 AppKit 1265.21)
of 2017-09-28 built on Atago.local





^ permalink raw reply	[flat|nested] 11+ messages in thread

* bug#30978: 25.3; Suggestion: define-minor-mode should define mode-lighter variable
  2018-03-28 20:11 bug#30978: 25.3; Suggestion: define-minor-mode should define mode-lighter variable Howard Melman
@ 2019-07-14 13:40 ` Lars Ingebrigtsen
       [not found]   ` <CADwFkmk-oFgHAwgcZ=-utkBU303x4vF9c9vkuUfpkPinL7Q0KQ@mail.gmail.com>
  0 siblings, 1 reply; 11+ messages in thread
From: Lars Ingebrigtsen @ 2019-07-14 13:40 UTC (permalink / raw)
  To: Howard Melman; +Cc: 30978

Howard Melman <hmelman@gmail.com> writes:

> Some packages define a user option to let users configure
> the lighter string used in the mode-line, but some just use
> a hard coded string. Packages such as diminish, delight and
> dim exist to help customize these.
>
> The define-minor-mode macro creates keymaps and other things
> to help mode authors follow conventions. If it created a
> mode-lighter user option when passed in a string (and not a
> symbol) then users would have an easier time configuring
> their mode-line without having to find and install a package
> to do so.

I think this makes sense -- define-minor-mode would define a
buffer-local variable, I guess, that the users could set to change the
lighter?

Like...  `FOO-mode-lighter' or something?  Any opinions?

-- 
(domestic pets only, the antidote for overdose, milk.)
   bloggy blog: http://lars.ingebrigtsen.no





^ permalink raw reply	[flat|nested] 11+ messages in thread

* bug#30978: 25.3; Suggestion: define-minor-mode should define mode-lighter variable
       [not found]   ` <CADwFkmk-oFgHAwgcZ=-utkBU303x4vF9c9vkuUfpkPinL7Q0KQ@mail.gmail.com>
@ 2020-08-23 12:22     ` Lars Ingebrigtsen
  2021-06-25 14:27       ` Lars Ingebrigtsen
  0 siblings, 1 reply; 11+ messages in thread
From: Lars Ingebrigtsen @ 2020-08-23 12:22 UTC (permalink / raw)
  To: Stefan Kangas; +Cc: 30978

Stefan Kangas <stefan@marxist.se> writes:

>> I think this makes sense -- define-minor-mode would define a
>> buffer-local variable, I guess, that the users could set to change the
>> lighter?
>>
>> Like...  `FOO-mode-lighter' or something?  Any opinions?
>
> Yes, it sounds like a good idea.
>
> I'm not sure why you propose that it should be buffer-local though.
> Wouldn't one want to configure this globally by default?

Hm...  yes, a global variable makes more sense.  I was thinking that
somebody would want a different lighter in different buffers, but that
does sound rather unlikely.






^ permalink raw reply	[flat|nested] 11+ messages in thread

* bug#30978: 25.3; Suggestion: define-minor-mode should define mode-lighter variable
  2020-08-23 12:22     ` Lars Ingebrigtsen
@ 2021-06-25 14:27       ` Lars Ingebrigtsen
  2021-06-25 22:57         ` Phil Sainty
  0 siblings, 1 reply; 11+ messages in thread
From: Lars Ingebrigtsen @ 2021-06-25 14:27 UTC (permalink / raw)
  To: Stefan Kangas; +Cc: 30978, Stefan Monnier

Lars Ingebrigtsen <larsi@gnus.org> writes:

>>> I think this makes sense -- define-minor-mode would define a
>>> buffer-local variable, I guess, that the users could set to change the
>>> lighter?
>>>
>>> Like...  `FOO-mode-lighter' or something?  Any opinions?
>>
>> Yes, it sounds like a good idea.
>>
>> I'm not sure why you propose that it should be buffer-local though.
>> Wouldn't one want to configure this globally by default?
>
> Hm...  yes, a global variable makes more sense.  I was thinking that
> somebody would want a different lighter in different buffers, but that
> does sound rather unlikely.

Does anybody else have an opinion here?  The suggestion is to make
define-minor-mode define a `foo-mode-lighter' variable that users can
then change to easily change the lighters.

Or do we have a separate mechanism for this somewhere?

-- 
(domestic pets only, the antidote for overdose, milk.)
   bloggy blog: http://lars.ingebrigtsen.no





^ permalink raw reply	[flat|nested] 11+ messages in thread

* bug#30978: 25.3; Suggestion: define-minor-mode should define mode-lighter variable
  2021-06-25 14:27       ` Lars Ingebrigtsen
@ 2021-06-25 22:57         ` Phil Sainty
  2021-07-25  7:59           ` Lars Ingebrigtsen
  0 siblings, 1 reply; 11+ messages in thread
From: Phil Sainty @ 2021-06-25 22:57 UTC (permalink / raw)
  To: Lars Ingebrigtsen; +Cc: Stefan Kangas, 30978, Stefan Monnier

On 2021-06-26 02:27, Lars Ingebrigtsen wrote:
> Does anybody else have an opinion here?  The suggestion is to make
> define-minor-mode define a `foo-mode-lighter' variable that users can
> then change to easily change the lighters.

It sounds like a good change.

> Or do we have a separate mechanism for this somewhere?

We do in GNU ELPA (see https://www.emacswiki.org/emacs/DelightedModes
regarding the one I wrote, delight.el), but that and similar libraries
mostly exist because there wasn't something as trivial as a variable
to set.

Delight also takes care of synchronising the label in `mode-line-menu'
(down-mouse-3 on `mode-line-modes'), as well as allowing custom names
for major modes via the same UI -- but providing an easy way to set
minor mode lighters was the actual reason for writing it.


-Phil






^ permalink raw reply	[flat|nested] 11+ messages in thread

* bug#30978: 25.3; Suggestion: define-minor-mode should define mode-lighter variable
  2021-06-25 22:57         ` Phil Sainty
@ 2021-07-25  7:59           ` Lars Ingebrigtsen
  2021-07-25 16:43             ` Howard Melman
  0 siblings, 1 reply; 11+ messages in thread
From: Lars Ingebrigtsen @ 2021-07-25  7:59 UTC (permalink / raw)
  To: Phil Sainty; +Cc: 30978, Stefan Kangas, Stefan Monnier

Phil Sainty <psainty@orcon.net.nz> writes:

>> Does anybody else have an opinion here?  The suggestion is to make
>> define-minor-mode define a `foo-mode-lighter' variable that users can
>> then change to easily change the lighters.
>
> It sounds like a good change.

I just can't make up my mind here.  On the one hand, a
`foo-mode-lighter' variable would make things easy and regular.  On the
other hand, it means creating a new user option for each minor mode
(i.e., a defcustom), and it means having these in `minor-mode-alist',
which means one additional variable lookup (per minor mode) when
creating the mode line.

>> Or do we have a separate mechanism for this somewhere?
>
> We do in GNU ELPA (see https://www.emacswiki.org/emacs/DelightedModes
> regarding the one I wrote, delight.el), but that and similar libraries
> mostly exist because there wasn't something as trivial as a variable
> to set.
>
> Delight also takes care of synchronising the label in `mode-line-menu'
> (down-mouse-3 on `mode-line-modes'), as well as allowing custom names
> for major modes via the same UI -- but providing an easy way to set
> minor mode lighters was the actual reason for writing it.

It sounds like delight is the right solution here -- it's a more
complete solution, and people who want this can just install your
package...

So...  on the whole...  I think we shouldn't add the -lighter
variables.  So I'm closing this bug report.

-- 
(domestic pets only, the antidote for overdose, milk.)
   bloggy blog: http://lars.ingebrigtsen.no





^ permalink raw reply	[flat|nested] 11+ messages in thread

* bug#30978: 25.3; Suggestion: define-minor-mode should define mode-lighter variable
  2021-07-25  7:59           ` Lars Ingebrigtsen
@ 2021-07-25 16:43             ` Howard Melman
  2021-07-28 15:31               ` Lars Ingebrigtsen
  0 siblings, 1 reply; 11+ messages in thread
From: Howard Melman @ 2021-07-25 16:43 UTC (permalink / raw)
  To: 30978

Lars Ingebrigtsen <larsi@gnus.org> writes:

> Phil Sainty <psainty@orcon.net.nz> writes:
>
>>> Does anybody else have an opinion here?  The suggestion is to make
>>> define-minor-mode define a `foo-mode-lighter' variable that users can
>>> then change to easily change the lighters.
>>
>> It sounds like a good change.
>
> I just can't make up my mind here.  On the one hand, a
> `foo-mode-lighter' variable would make things easy and regular.  On the
> other hand, it means creating a new user option for each minor mode
> (i.e., a defcustom), and it means having these in `minor-mode-alist',
> which means one additional variable lookup (per minor mode) when
> creating the mode line.

Thanks for considering this.  If the performance impact of
having these variables in minor-mode-alist is significant,
then fine.  Otherwise IMHO "easy and regular" clearly
outweighs having more defcustoms (which seems better to me
anyway, I could use completion to see all the lighter
strings). 

>>> Or do we have a separate mechanism for this somewhere?
>>
>> We do in GNU ELPA (see https://www.emacswiki.org/emacs/DelightedModes
>> regarding the one I wrote, delight.el), but that and similar libraries
>> mostly exist because there wasn't something as trivial as a variable
>> to set.
>>
>> Delight also takes care of synchronising the label in `mode-line-menu'
>> (down-mouse-3 on `mode-line-modes'), as well as allowing custom names
>> for major modes via the same UI -- but providing an easy way to set
>> minor mode lighters was the actual reason for writing it.
>
> It sounds like delight is the right solution here -- it's a more
> complete solution, and people who want this can just install your
> package...
>
> So...  on the whole...  I think we shouldn't add the -lighter
> variables.  So I'm closing this bug report.

I agree that packages like delight, dim and diminish (and I
just learned about blackout) mostly exist because there
wasn't a "trivial" or "easy and regular" way to do this and
don't see how they're "more complete" than the proposal.. 

If the packages are the way to go, maybe one could be
included in emacs?  They've been around for several years
(diminish since '98). 

As it stands now, a user that just wants to eliminate
something like " ElDoc" or " ws" from their modeline won't
find the answer in the documentation. If they look for a
package to do this even the package descriptions as they
appear in list-packages don't have a common keyword to
search for: 

  blackout           Better mode lighter overriding
  delight            A dimmer switch for your lighter text
  dim                Change mode-line names of major/minor modes
  diminish           Diminished modes are minor modes with no modeline display

So they will have to do an internet search and then evaluate
which of 3 or 4 packages they want to use.  It's certainly
not "easy or regular". 

-- 

Howard






^ permalink raw reply	[flat|nested] 11+ messages in thread

* bug#30978: 25.3; Suggestion: define-minor-mode should define mode-lighter variable
  2021-07-25 16:43             ` Howard Melman
@ 2021-07-28 15:31               ` Lars Ingebrigtsen
  2021-07-28 19:10                 ` Howard Melman
  2021-07-28 20:00                 ` Kévin Le Gouguec
  0 siblings, 2 replies; 11+ messages in thread
From: Lars Ingebrigtsen @ 2021-07-28 15:31 UTC (permalink / raw)
  To: Howard Melman; +Cc: 30978

Howard Melman <hmelman@gmail.com> writes:

> I agree that packages like delight, dim and diminish (and I
> just learned about blackout) mostly exist because there
> wasn't a "trivial" or "easy and regular" way to do this and
> don't see how they're "more complete" than the proposal.. 

It's already pretty easy to just alter the lighters -- just say:

(setcar (cdr (assoc 'foo-mode minor-mode-alist)) "whatever")

-- 
(domestic pets only, the antidote for overdose, milk.)
   bloggy blog: http://lars.ingebrigtsen.no





^ permalink raw reply	[flat|nested] 11+ messages in thread

* bug#30978: 25.3; Suggestion: define-minor-mode should define mode-lighter variable
  2021-07-28 15:31               ` Lars Ingebrigtsen
@ 2021-07-28 19:10                 ` Howard Melman
  2021-07-29 12:11                   ` Lars Ingebrigtsen
  2021-07-28 20:00                 ` Kévin Le Gouguec
  1 sibling, 1 reply; 11+ messages in thread
From: Howard Melman @ 2021-07-28 19:10 UTC (permalink / raw)
  To: 30978

Lars Ingebrigtsen <larsi@gnus.org> writes:

> It's already pretty easy to just alter the lighters -- just say:
>
> (setcar (cdr (assoc 'foo-mode minor-mode-alist)) "whatever")

Maybe include an example of disabling a lighter in the elisp
manual (where minor-mode-alist is mentioned).  E.g.,

    (setcar (cdr (assoc 'eldoc-mode minor-mode-alist)) "")

I realize this is "pretty easy" lisp but it's not a simple
setq and I think non-lispers might want to do this.

-- 

Howard






^ permalink raw reply	[flat|nested] 11+ messages in thread

* bug#30978: 25.3; Suggestion: define-minor-mode should define mode-lighter variable
  2021-07-28 15:31               ` Lars Ingebrigtsen
  2021-07-28 19:10                 ` Howard Melman
@ 2021-07-28 20:00                 ` Kévin Le Gouguec
  1 sibling, 0 replies; 11+ messages in thread
From: Kévin Le Gouguec @ 2021-07-28 20:00 UTC (permalink / raw)
  To: Lars Ingebrigtsen; +Cc: Howard Melman, 30978

Lars Ingebrigtsen <larsi@gnus.org> writes:

> It's already pretty easy to just alter the lighters -- just say:
>
> (setcar (cdr (assoc 'foo-mode minor-mode-alist)) "whatever")

Manipulating minor-mode-alist is not that hard indeed; there are some
sources of hassle though:

(1) figuring out the name of the mode variable (e.g. auto-fill-function,
    defining-kbd-macro);

(2) some modes seem not to add their variables to minor-mode-alist for
    some reason (e.g. caps-lock-mode on GNU ELPA), so this recipe does
    not work (neither does delight); one needs to fallback to
    add-to-list.

Nothing too herculean, but I'm sure some users would appreciate a
built-in function to figure out this stuff for them.

(And IIUC, solving this with a function, rather than automatically
creating variables for each minor mode, would address your concern about
bloat, since any added bloat would be opt-in)





^ permalink raw reply	[flat|nested] 11+ messages in thread

* bug#30978: 25.3; Suggestion: define-minor-mode should define mode-lighter variable
  2021-07-28 19:10                 ` Howard Melman
@ 2021-07-29 12:11                   ` Lars Ingebrigtsen
  0 siblings, 0 replies; 11+ messages in thread
From: Lars Ingebrigtsen @ 2021-07-29 12:11 UTC (permalink / raw)
  To: Howard Melman; +Cc: 30978

Howard Melman <hmelman@gmail.com> writes:

> Maybe include an example of disabling a lighter in the elisp
> manual (where minor-mode-alist is mentioned).  E.g.,
>
>     (setcar (cdr (assoc 'eldoc-mode minor-mode-alist)) "")
>
> I realize this is "pretty easy" lisp but it's not a simple
> setq and I think non-lispers might want to do this.

Kévin Le Gouguec <kevin.legouguec@gmail.com> writes:

> Manipulating minor-mode-alist is not that hard indeed; there are some
> sources of hassle though:
>
> (1) figuring out the name of the mode variable (e.g. auto-fill-function,
>     defining-kbd-macro);
>
> (2) some modes seem not to add their variables to minor-mode-alist for
>     some reason (e.g. caps-lock-mode on GNU ELPA), so this recipe does
>     not work (neither does delight); one needs to fallback to
>     add-to-list.
>
> Nothing too herculean, but I'm sure some users would appreciate a
> built-in function to figure out this stuff for them.

I did consider adding a new function like `set-minor-mode-lighter' that
would just alter `minor-mode-alist' like that setcar, but that has (at
least) two problems -- the one you mention in (1), and loading
precedence issues: If you alter the entry in `minor-mode-alist', and
then load the .el file with the `define-minor-mode', then it'll
overwrite your own setting.

So you have to say

(require 'foo)
(setcar ...)

in your .emacs to make it work reliably, so just adding a naive helper
function, or talking about this too much, is that helpful, because it'll
trip people up.

Adding a -lighter defcustom would indeed have none of these problems,
but I'm just not sure that people would use it enough to justify the
(minor) performance impact, as well as the defcustom explosion.  Which
is why I think that using a package like delight is the right solution
here for those that want to change the lighters.  Probably.

-- 
(domestic pets only, the antidote for overdose, milk.)
   bloggy blog: http://lars.ingebrigtsen.no





^ permalink raw reply	[flat|nested] 11+ messages in thread

end of thread, other threads:[~2021-07-29 12:11 UTC | newest]

Thread overview: 11+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2018-03-28 20:11 bug#30978: 25.3; Suggestion: define-minor-mode should define mode-lighter variable Howard Melman
2019-07-14 13:40 ` Lars Ingebrigtsen
     [not found]   ` <CADwFkmk-oFgHAwgcZ=-utkBU303x4vF9c9vkuUfpkPinL7Q0KQ@mail.gmail.com>
2020-08-23 12:22     ` Lars Ingebrigtsen
2021-06-25 14:27       ` Lars Ingebrigtsen
2021-06-25 22:57         ` Phil Sainty
2021-07-25  7:59           ` Lars Ingebrigtsen
2021-07-25 16:43             ` Howard Melman
2021-07-28 15:31               ` Lars Ingebrigtsen
2021-07-28 19:10                 ` Howard Melman
2021-07-29 12:11                   ` Lars Ingebrigtsen
2021-07-28 20:00                 ` Kévin Le Gouguec

Code repositories for project(s) associated with this public inbox

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

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).