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

From: Karthik Chikmagalur <[email-masked]>
Date: Sat, 02 Aug 2025 16:03:54 -0700

>> From my POV, we can install these changes in core, assuming that you
>> can post a patch that incorporates the relevant parts of the
>> discussions.
>
> Sounds good to me, I've updated the patch for include *only* the
> keywords that people may find useful.
>
> The rest can be kept in my use-package-x repository.

Since support for :hook+ is being added, I have a suggestion to make its
syntax more in-line with add-hook, so the user does not have to learn
new syntax.  This might not be possible (or lead to ambiguous parsing),
so feel free to ignore it if this is the case.

add-hook takes the arguments (HOOK FUNCTION DEPTH LOCAL), so perhaps
:hook+ can do the same?

-------------------------------------

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?)

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.

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

To distinguish between (bar 90 t) and (lambda () ...), you could again
examine the car of the list.

-------------------------------------

Again, there might be ambiguities in parsing that I'm not aware of, but
if this is possible I think this is an improvement over both :hook and
the currently proposed :hook+ syntax.

Karthik