jwiegley / use-package

A use-package declaration for simplifying your .emacs
https://jwiegley.github.io/use-package
GNU General Public License v3.0
4.39k stars 259 forks source link

feature request: support local and depth arguments for :hook #965

Open Hugo-Heagren opened 2 years ago

Hugo-Heagren commented 2 years ago

I'm trying to port some of my old config into neater use-package declarations and I have a few add-hooks which use the optional DEPTH and LOCAL args of that function. These aren't currently supported by use-package, but it would be nice if they were. Perhaps something like one of these?

More consistent with use-package's use of keys:

(use-package foo
  :hook
  (bar-mode . foo-mode-hook :depth 80 :local t))

And more consistent with add-hook (though with the disadvantage that comes with all optional positional arguments -- specifying only the last one requires specifying the others as nil, which is kinda cluttered):

(use-package foo
  :hook
  (bar-mode . foo-mode-hook 80 t))

Personally I prefer the first, but either would be good. I would be happy to try implementing this and submit a PR..

conao3 commented 2 years ago

First of all, your grammar is invalid as Elisp

'(use-package foo
  :hook
  (bar-mode . foo-mode-hook :depth 80 :local t))
;;=> Debugger entered--Lisp error: (invalid-read-syntax ". in wrong context")
;;     read(#<buffer *scratch*>)
;;     elisp--preceding-sexp()
;;     elisp--eval-last-sexp(t)
;;     eval-last-sexp(t)
;;     eval-print-last-sexp(nil)
;;     funcall-interactively(eval-print-last-sexp nil)
;;     call-interactively(eval-print-last-sexp nil nil)
;;     command-execute(eval-print-last-sexp)
Hugo-Heagren commented 2 years ago

@conao3 you're right. I was rembering that it's possible to have many elements to the left of the ., and getting confused. Perhaps it could be done without cons cells, and just with a list, like this:

(use-package foo
  :hook
  (bar-mode foo-mode-hook :depth 80 :local t))

or this:

(use-package foo
  :hook
  (bar-mode foo-mode-hook 80 t))

Of course, for backwards compatibility the cons cell format could still be supported, it just wouldn't support the extra arguments. Or another way perhaps?

jdtsmith commented 2 years ago

This would be very helpful to have. There is no clean way to combine defer and hook addition at a non-default depth.

Hugo-Heagren commented 2 years ago

@jdtsmith since making this request I have migrated to leaf. One of my reasons was that the maintainer seems much more active on the project, and requests like this (and my PR on use-package) are more likely to be acted upon. I just haven't got round to making them yet...