Some users might want to byte-compile their init file to make Emacs startup faster. This is not recommended in most cases, as the speed-up is usually too small to be worth it, and it can lead to confusion if the byte-compiled files are out-of-date. If you still want to do it, this chapter explains how to do that.
use-package
always loads every library that it can while a file
is being byte-compiled. This helps silence spurious warnings about
unknown variables and functions.
However, there are times when this is just not enough. For those
times, use the :defines
and :functions
keywords to
introduce dummy variable and function declarations solely for the sake
of silencing byte-compiler warnings. For example:
(use-package texinfo :defines texinfo-section-list :commands texinfo-mode :init (add-to-list 'auto-mode-alist '("\\.texi$" . texinfo-mode)))
If you need to silence a missing function warning, you can use
:functions
:
(use-package ruby-mode :mode "\\.rb\\'" :interpreter "ruby" :functions inf-ruby-keys :config (defun my-ruby-mode-hook () (require 'inf-ruby) (inf-ruby-keys)) (add-hook 'ruby-mode-hook 'my-ruby-mode-hook))
Normally, use-package
will load each package at compile time
before compiling the configuration, to ensure that any necessary
symbols are in scope to satisfy the byte-compiler. At times this can
cause problems, since a package may have special loading requirements,
and all that you want to use use-package
for is to add a
configuration to the eval-after-load
hook. In such cases, use
the :no-require
keyword:
(use-package foo :no-require t :config (message "Evaluate this immediately after loading `foo'"))