John Wiegley [Sat, 14 Mar 2015 10:22:43 +0000 (05:22 -0500)]
Begin refactoring for 2.0; NOTE: BREAKING CHANGES
The major change is that :init is now always performed before loading a
file, whether loading is deferred or not. This is a change from before,
where the semantics of :init varied between demand and defer. The new
usage is now entirely consistent.
Also, because :init and :config now mean "before" and "after", the
:pre-* and :post-* keywords are gone, as they should no longer be
necessary.
Lastly, an effort has been made to make your Emacs start even in the
presence of use-package configuration failures. So after this change,
be sure to check your *Messages* buffer. Most likely, you will have
several instances where you are using :init, but should be using :config
(this was the case for me in a number of places).
Jonas Bernoulli [Sun, 18 Jan 2015 10:41:13 +0000 (11:41 +0100)]
Allow using expanded macro without loading feature
In the macro `use-package-with-elapased-timer' use `bound-and-true-p'
go get the values of the customizable options `use-package-verbose'
and `use-package-minimum-reported-time'. This way the library only
has to be required at compile time, provided these options are not
actually customized. If the user has changed the values, then she
also has to load the library at runtime or the macros fall back to
the default of doing their job silently. See https://github.com/jwiegley/use-package/issues/149.
Jonas Bernoulli [Sun, 7 Sep 2014 12:43:56 +0000 (14:43 +0200)]
assume the declare-function macro exists
Since `declare-function' was added in Emacs 23.1 (five years ago), we
don't need to assert that it is defined. If the assertion was without
any problems there would be no harm in keeping it, but unfortunately it
causes a compile warning. Because `declare-function' is a macro with
always expands to `nil' the value of (fboundp 'declare-function) ends
up being unused.
Nicolas Richard [Thu, 6 Mar 2014 09:46:33 +0000 (10:46 +0100)]
Eval backquote earlier and support non-`progn' lists
* use-package.el (use-package-plist-get): add optional args: `eval-backquote'
and `no-progn' to control how arguments are retrieved.
(use-package-plist-get-value): remove this function
(use-package): replace calls to old function to modified function.
Rationale :
- use-package-plist-get-value was just another layer for no good reason,
and IMO its name was totally unclear.
- we now eval-as-backquote earlier, allowing constructs like:
(let ((my-list-of-commands-in-foo '(foo1 foo2)))
(use-package foo :commands ,@my-list-of-commands-in-foo))
instead of constructing equivalent key sequence by string concatenation.
This allows specifying vector key sequences, as in bind-key (since f0776c2aeb3f7f0af66597e10a3e4469ca26629d).
Nicolas Richard [Sun, 16 Feb 2014 10:59:59 +0000 (11:59 +0100)]
Add new option use-package-idle-interval
* use-package.el (use-package-idle-interval): new defcustom
(use-package-start-idle-timer): use it
(use-package-idle-eval): use it
* README.md: document it
This addresses bug https://github.com/jwiegley/use-package/issues/77
François Févotte [Mon, 17 Mar 2014 08:56:10 +0000 (09:56 +0100)]
:idle-priority keyword to change the running order of idle functions
Lower-priority idle functions are run first. Idle functions with no
specified priority default to 5 and all functions with the same priority
are run in the order in which they are evaluated, meaning the behaviour
is backwards compatible.
Jonas Bernoulli [Sun, 9 Mar 2014 17:50:01 +0000 (18:50 +0100)]
use-package-with-elapsed-timer: respect option at runtime
Previously the option `use-package-verbose' was consulted at macro
expansion time, and as a result customizing the option did nothing,
without also recompiling `use-package.el'.
Nicolas Richard [Mon, 10 Feb 2014 17:02:59 +0000 (18:02 +0100)]
Allow multiple forms after keywords
* use-package.el (use-package-mplist-get):
(use-package-plist-get):
(use-package-mplist-keys): new functions
(plist-get-value):
(use-package): use new functions
(plist-keys): remove function
The idea is to allow a modified kind of plist where keys are all
keywords that appear in the list, and values are the intermediary
elements. If a keyword is present but it's another keyword just after it
(like (use-package :defer :config (setq foo 'bar))), its associated
value will be t. If a keyword is not present, its value associated value
will be nil. Otherwise the value will be the list of elements between
the keyword and the next keyword.
Adam Spiers [Mon, 6 Jan 2014 12:38:00 +0000 (12:38 +0000)]
fix DRY violation by only having documentation in one place
The documentation in README.md was previously identical to that
in the Commentary section of use-package.el, modulo the following
differences:
- No elisp comment ";; " prefix
- Code blocks indented 4 columns not 2, as required by Markdown
- Elisp symbols marked in backtick delimiters for monospace, not
emacs backtick/forward tick pairs.
Unfortunately due to this duplication, sometimes only one of the
two files got updated, so they got out of sync. With us all being
human, this is likely to continue to happen as long as the
duplication exists ;-) Therefore since most users are likely to
encounter README.md before the elisp, and bearing in mind that
Markdown is a much more flexible format for documentation than
elisp comments (richer formatting, can be exported to numerous
other formats etc.), it is better to replace the docs in
use-package.el with a pointer to the README.md.
Jonas Bernoulli [Mon, 9 Dec 2013 23:33:02 +0000 (00:33 +0100)]
use-package: use defun as lisp-indent-function
When `use-package' is called with only one keyword it is useful to
write:
(use-package foo :init
(progn
... long lines ...))
instead of
(use-package foo
:init (progn
... *too* long lines ...))
or
(use-package foo
:init
(progn
... long lines ...))
Even when there are multiple keywords or when one never wants to format
the calls to `use-package' as in the first example the use of `defun'
does not really pose a problem.