Subject: bug#79106: [PATCH] Add new optional keywords to use-package

From: Eli Zaretskii <[email-masked]>
Date: Thu, 07 Aug 2025 19:19:15 +0300

> From: "Elijah G." <[email-masked]>
> Cc: [email-masked],  [email-masked],
>   [email-masked],  [email-masked]
> Date: Thu, 07 Aug 2025 09:44:46 -0600
> 
> Eli Zaretskii <[email-masked]> writes:
> 
> >> From: Philip Kaludercic <[email-masked]>
> >> Cc: Elijah Gabe Pérez <[email-masked]>,
> >>   [email-masked],
> >>   [email-masked], [email-masked], [email-masked]
> >> Date: Thu, 07 Aug 2025 14:26:53 +0000
> >> 
> >> Eli Zaretskii <[email-masked]> writes:
> >> 
> >> >> > Suggestion 1: allow many hooks to be specified in a list
> >> >> >
> >> >> > :hook+ (foo-mode . (bar baz quux))
> >> >> >
> >> >> > adds functions bar, baz and quux to foo-mode-hook.  (To
> >> >> > disambiguate
> >> >> > between a list of hook functions and a lambda, you can look at
> >> >> > the car
> >> >> > of the list maybe?)
> >> >> 
> >> >> It is not possible because (foo-mode . (bar baz quux)) is
> >> >> expanded as
> >> >> (foo-mode bar baz quux), and this can be misinterpreted by :hook+
> >> >> as a
> >> >> list of hooks.
> >> >> 
> >> >> The only workaround i found is making a kind of separator
> >> >> (:multi),
> >> >> which tells :hook+ the cdr is a list of functions, not part of a
> >> >> list of
> >> >> hooks.
> >> >> 
> >> >> I know that :multi can look weird (even i was thinking in rename
> >> >> it [1]
> >> >> or use a better separator), but it was the only solution i found
> >> >> and
> >> >> worked.
> >> >> 
> >> >> > Suggestion 2: allow many hooks to be added to.  (:hook already
> >> >> > does
> >> >> > this)
> >> >> >
> >> >> > :hook+ ((foo-mode cor-mode) . (bar baz quux))
> >> >> >
> >> >> > Adds the three functions to both foo-mode-hook and
> >> >> > cor-mode-hook.
> >> >> 
> >> >> Similar problem as previous.
> >> >> 
> >> >> > Suggestion 3: Allow DEPTH and LOCAL to be optionally specified
> >> >> > with
> >> >> > the functions,
> >> >> > in the same order as add-hook.
> >> >> >
> >> >> > :hook+ (foo-mode . ((bar 90 t)
> >> >> >                     baz
> >> >> >                     (quux -30)
> >> >> >                     (cor nil t))
> >> >> >
> >> >> > will install 
> >> >> > - bar at depth 90, to be run buffer-locally when foo-mode-hook
> >> >> > runs
> >> >> > - baz without special accommodations, and
> >> >> > - quux at depth -30.
> >> >> > - cor buffer-locally with default depth
> >> >> 
> >> >> I like this, i think i can implement only the "local" part.
> >> >> But of course, only part of :multi.
> >> >> 
> >> >> If i can get rid of `:multi` i can implement this, but it will
> >> >> look
> >> >> somewhat ugly:
> >> >> 
> >> >>   :hook+ (foo-mode . '((bar 90 t)))
> >> >
> >> > So what is the outcome of this discussion?  Are you working on an
> >> > updated patch, or should I install the last one you posted?
> >> 
> >> I believe there was a reasonable doubt whether we need some of the
> >> keywords at all from the initial patch.  So my vote would be to hold
> >> back from that option for now, and figure out what would make sense
> >> to
> >> add to the core.
> >
> > Figure out how?
> >
> > AFAIU, the latest round of comments just brought up an issue with
> > :hook+, and the rest didn't cause any objections?  Why not install
> > them?
> 
> AFAIU, the keywords are considered useless and perhaps unnecessary, and
> actually, they are, most of them can be useless and redundant or
> confusing, but to remember, most of these keywords are ideas and
> concepts that people asked for in use-package and could not be
> implemented due to lack of time or had to be eliminated.
> 
> Based on the comments here and in emacs-devel, the only keyword i think
> should be in core would be :hook+.
> 
> And this is based on a recent comment in use-package bug tracker on github:
> 
> ---
>   I myself have a wrapper around use-package for various reasons and
>   I'll be adding support for this as I don't like having things like:
> 
>     :config
>     ;; TODO: neo/use-package could support dept in :hook
>     (add-hook 'after-init-hook 'neo/desktop-restore 99) ; :hook doesn't support depth
> 
>   but if it were supported by use-package it could benefit more people.
> ---

John, would you please chime in and tel what you think about this?