unofficial mirror of bug-gnu-emacs@gnu.org 
 help / color / mirror / code / Atom feed
From: Ihor Radchenko <yantar92@posteo.net>
To: Eli Zaretskii <eliz@gnu.org>
Cc: 64048@debbugs.gnu.org, Stefan Monnier <monnier@iro.umontreal.ca>
Subject: bug#64048: 30.0.50; global-display-line-numbers-mode has no easy way to set modes where it is enabled
Date: Wed, 14 Jun 2023 12:48:54 +0000	[thread overview]
Message-ID: <87fs6u8b0p.fsf@localhost> (raw)
In-Reply-To: <83mt12uufn.fsf@gnu.org>

Eli Zaretskii <eliz@gnu.org> writes:

>> Let me correct my initial suggestion:
>> 
>> (define-globalized-minor-mode global-display-line-numbers-mode
>>   display-line-numbers-mode display-line-numbers--turn-on
>>   :predicate t)
>
> This change is probably harmless, but OTOH what does it give you that
> the current code doesn't?  AFAIU, you still cannot customize the modes
> where line numbers will be off.
>
> IOW, :predicate is not a means for user customizations of the modes
> where the minor mode will be turned on.  Or am I missing something?

>> :predicate defines the default value of
>> `global-display-line-numbers-modes' variable.
>
> It does?  Where is this documented?

Yup. It is not documented on API level, but when :predicate is non-nil,
`define-globalized-minor-mode' does the following:

(setq turn-on-function
      `(lambda ()
         (require 'easy-mmode)
         (when (easy-mmode--globalized-predicate-p ,MODE-predicate)
           (funcall ,turn-on-function))))

;; Minor mode docstring:
(if predicate
    (concat
     "\n\n"
     (internal--format-docstring-line
      "`%s' is used to control which modes this minor mode is used in."
      MODE-predicate)) ;; <global-mode-name>-modes
  "")

,(when predicate
          `(defcustom ,MODE-predicate ,(car predicate)
             ,(format "Which major modes `%s' is switched on in.
This variable can be either t (all major modes), nil (no major modes),
or a list of modes and (not modes) to switch use this minor mode or
not.  For instance

  (c-mode (not message-mode mail-mode) text-mode)

means \"use this mode in all modes derived from `c-mode', don't use in
modes derived from `message-mode' or `mail-mode', but do use in other
modes derived from `text-mode'\".  An element with value t means \"use\"
and nil means \"don't use\".  There's an implicit nil at the end of the
list."
                      mode)
             :type '(repeat sexp)
             ,@group))

>> One can, of course, disable the minor mode selectively in some major
>> modes from that major mode hooks, but it is surprisingly non-obvious
>> approach.
>
> You can either disable it selectively (which is very obvious to me,
> FWIW), or you can selectively enable it.  Both approaches are not
> rocket science, IMO.

I partially agree, and I also find the approach obvious once I see it.
But the variable is easier (requires less Elisp knowledge) and is
already used in _some_ global minor modes. IMHO, controlling global
minor modes is one of the basic features that should be better exposed to
newbie users who use customize interface and do not know Elisp.

-- 
Ihor Radchenko // yantar92,
Org mode contributor,
Learn more about Org mode at <https://orgmode.org/>.
Support Org development at <https://liberapay.com/org-mode>,
or support my work at <https://liberapay.com/yantar92>





  reply	other threads:[~2023-06-14 12:48 UTC|newest]

Thread overview: 15+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2023-06-13 14:33 bug#64048: 30.0.50; global-display-line-numbers-mode has no easy way to set modes where it is enabled Ihor Radchenko
2023-06-13 15:50 ` Eli Zaretskii
2023-06-13 16:09   ` Ihor Radchenko
2023-06-13 16:49     ` Eli Zaretskii
2023-06-13 17:21       ` Ihor Radchenko
2023-06-13 18:19         ` Eli Zaretskii
2023-06-13 19:36           ` Ihor Radchenko
2023-06-14 11:58             ` Eli Zaretskii
2023-06-14 12:48               ` Ihor Radchenko [this message]
2023-06-17  7:46                 ` Eli Zaretskii
2023-06-17 18:30                   ` Stefan Monnier via Bug reports for GNU Emacs, the Swiss army knife of text editors
2023-06-17 18:58                     ` Eli Zaretskii
2023-06-17 19:06                       ` Ihor Radchenko
2023-06-17 19:04                     ` Ihor Radchenko
2023-06-17 19:18                       ` Stefan Monnier via Bug reports for GNU Emacs, the Swiss army knife of text editors

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

  List information: https://www.gnu.org/software/emacs/

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

  git send-email \
    --in-reply-to=87fs6u8b0p.fsf@localhost \
    --to=yantar92@posteo.net \
    --cc=64048@debbugs.gnu.org \
    --cc=eliz@gnu.org \
    --cc=monnier@iro.umontreal.ca \
    /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 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).