This is mostly a bug-fix release:
- When
:hook
is using in the form(use-package foo :hook bar)
, this is once again equivalent to(use-package foo :hook (bar . foo))
and no longer the same as(use-package foo :hook (bar . foo-mode))
.
This release prepares for inclusion to GNU ELPA and includes no other changes
This is mostly a bug-fix release:
-
Update the documentation for :custom as per #850
-
Fix broken test due to #850
-
better tests
-
add test for #845
-
Support keymap symbol in bind-key. Fix #845
-
use-package-core.el: use the Emacs set-default function to avoid saving :custom vars twice
-
Fix Travis
-
typo, should be a vector, not a bytecode object
Solves #842
-
Add special value back again, in case needed for backwards compat
I don't know why this special value exists, but perhaps old client code uses it.
The additional `t' in the macro expansion is accidental but not harmful I guess.
-
Even when there's no :config, run any pre/post config hooks
i.e., following the existing docs for use-package-inject-hooks, these hooks are run:
use-package--foo--pre-config-hook use-package--foo--post-config-hook
This should make config customisations more predictable (for example, spacemacs uses these hooks extensively to allow 'layers' to be customised).
I got rid of the "special" default value for :config, because it doesn't seem to be treated any differently than nil.
Fixes #785
-
Clarify the documentation for :after
-
add table of contents to README
-
Fix typos
Typos found with codespell.
-
Fix typos
-
Attempt to explain omit "-hook" better
-
Update tests
-
Switch from
require' to
load' + `featurep' -
Use
require', not
load', when byte-compiling -
Make custom-face evaluate elisp.
Fix #696.
-
Add a line of documentation for (use-pacakage ... :hook).
-
Fix typo in README
-
Fix documentation for defer
-
Add no-query option for pdf-tools-install
-
Fix typo in README
-
Fix all notes in README
-
Mention use-package-ensure in README
Without requiring
use-package-ensure
, settinguse-package-always-ensure
did not actually work for me.
-
use-package
no longer requiresdiminish
as a dependency, allowing people to decide whether they want to use diminish or delight. This means that if you do use diminish, you'll now need to pull it into your configuration before any use of the:diminish
kewyord. For example:(use-package diminish :ensure t)
-
Emacs 24.3 or higher is now a requirement.
-
The
:defer-install
keyword has been removed. It may reappear as an add-on module for use-package in a future release. See issue #442 for more details. -
There is no longer a
use-package-debug
option, sinceuse-package-verbose
already has the possible value ofdebug
. -
The ordering of several elements of
use-package-keywords
have changed; if you had previously customized this (or were an extension author adding to this list), you may need to rework your changes. -
For extension authors,
:commands
should no longer be propagated down for autoloading. See more below.
-
Upgrade license to GPL 3.
-
If
use-package-verbose
is set to the symboldebug
, any evaluation errors during package configuration will cause a complete report to be written to a*use-package*
buffer, including: the text of the error, theuse-package
declaration that caused the error, the post-normalized form of this declaration, and the macro-expanded version (without verbosity-related code). Note that this still does not help if there are parsing errors, which cause Emacs to register a Lisp error at startup time. -
New customization variable
use-package-deferring-keywords
, mainly intended for use by extension packages, indicates keywords that, if used without:demand
, cause deferred loading (as if:defer t
had been specified). -
The
:ensure
keyword now accepts a specific pinning sub-keyword. For example:(use-package foo :pin "elpa")
This ensure the package
foo
is installed from"elpa"
.(use-package foo :ensure bar :ensure (quux :pin "melpa"))
This says that
foo
ensures thatbar
is installed, as well asquux
from"melpa"
. It does not ensure thatfoo
is installed, because explicit:ensure
keywords were given. -
New
:hook
keyword. -
New
:catch
keyword. Ift
ornil
, it enables (the default, seeuse-package-defaults
) or disables catching errors at load time in use-package expansions. It can also be a function taking two arguments: the keyword being processed at the time the error was encountered, and the error object (as generated bycondition-case
). -
New keywords
:custom (foo1 bar1) (foo2 bar2)
etc., and:custom-face
.NOTE: These are only for people who wish to keep customizations with their accompanying use-package declarations. Functionally, the only benefit over using
setq
in a:config
block is that customizations might execute code when values are assigned. If you currently useM-x customize-option
and save to a settings file, you do not want to use this option. -
New
:magic
and:magic-fallback
keywords. -
New
:defer-install
keyword. -
New customization variable
use-package-enable-imenu-support
. -
New customization variable
use-package-hook-name-suffix
. Any symbols named in:hook
, or in the CAR of cons cells passed to:hook
, have this text appended to them as a convenience. If you find yourself using this keyword to add to hooks of different names, or just don't want such appending done, you can change the text to an empty string. -
New customization variable
use-package-compute-statistics
, and an accompanying commandM-x use-package-report
. See the README for more details. -
Allow
:diminish
to take no arguments. -
Support multiple symbols passed to
:after
, and a mini-DSL using:all
and:any
. -
:mode
and:interpreter
can now accept(rx ...)
forms. -
Using
:load-path
without also using:ensure
now implies:ensure nil
. -
:bind (:map foo-map ...)
now defers binding in the map until the package has been loaded. -
Print key bindings for keymaps in
describe-personal-keybindings
. -
When
use-package-inject-hooks
is non-nil, always fire:init
and:config
hooks. -
Documentation added for the
:after
,:defer-install
,:delight
,:requires
,:when
and:unless
keywords. -
:requires SYM
is subtly different from:if (featurep SYM)
, in that it happens before the:preface
. This means that using:requires
will cause definitions in the:preface
to not be visible to the byte-compiler, leading to possible warnings about unknown functions, or functions that may not be available at run-time (which can generally be ignored, since:requires
is intended as a check for basic system functionality;:after
should be used to check for the presence of other modules). -
New undocumented (and currently experimental) keyword
:load
may be used to change the name of the actual package loaded, rather than the package name, and may even add other names. For example:(use-package auctex :load tex-site)
. This keyword is used internally to generate therequire
for a package, so that deferral is simply a matter of not generating this keyword. -
The source code is now broken into several files, so that certain optional features (diminish, delight, ensure) may be maintained separately from the core functionality.
-
When using the
:after
keyword, now even autoloadeds keybinding are deferred until after that other package has loaded, in order to allow convenient:bind
to maps only present in that other package. Consider the following:(use-package helm-descbinds :load-path "site-lisp/helm-descbinds" :after helm :bind ("C-h b" . helm-descbinds) :init (fset 'describe-bindings 'helm-descbinds))
The binding of
C-h b
here will not occur until helm is loaded; and after it is loaded,helm-descbinds
itself is not loaded until the user pressesC-h b
. -
For extension authors, if you add a keyword to
use-package-keywords
whose presence should indicate deferred loading, please also add it touse-package-deferring-keywords
. Note that this is a bit of a sledgehammer, in that the mere presence of these keywords implies deferred loading. For a more subtle approach, see the newuse-package-autoloads/<KEYWORD>
support mentioned in the next bullet. -
For extension authors, if you wish deferred loading to possibly occur, create functions named
use-package-autoloads/<KEYWORD>
for each keyword that you define, returning an alist of the form(SYMBOL . TYPE)
of symbols to be autoloaded.SYMBOL
should be an interactive function, andTYPE
the smybolcommand
, but this functionality may be extended in future. These autoloads are established if deferred loading is to happen. -
If you specify a lambda form rather than a function symbol in any of the constructs that might introduce autoloads:
:bind
,:bind*
,:interpreter
,:mode
,:magic
,:magic-fallback
, and:hook
: then deferred loading will no longer be implied, since there's nothing to associate an autoload with that could later load the module. In these cases, it will be as if you'd specified:demand t
, in order to ensure the lambda form is able to execute in the context of the loaded package. -
For extension authors, there is a new customization variable
use-package-merge-key-alist
that specifies how values passed to multiple occurrences of the same key should be merged into a single value, during normalization of theuse-package
declaration into a proper plist. The default behavior is to simply append the values together (since they are always normalized to lists).
- Repeating a bind no longer causes duplicates in personal-keybindings.
- When byte-compiling, correctly output declare-function directives.
- Append to use-package when debugging, don't clear it.
- Don't allow :commands, :bind, etc., to be given an empty list.
- Explicit :defer t should override use-package-always-demand.