When moving to use-package, I'd to replace

(require 'markdown-mode)
(add-to-list 'auto-mode-alist '("\\.md\\'" . markdown-mode))


(use-package markdown-mode
  :mode "\\.md\\'"
  :config ...

use-package's documentation on :defer says it's unneeded when using :mode:

Defer loading of a package -- this is implied when using ‘:commands’, ‘:bind’, ‘:bind*’, ‘:mode’, ‘:magic’, ‘:hook’, ‘:magic-fallback’, or ‘:interpreter’. This can be an integer, to force loading after N seconds of idle time, if the package has not already been loaded.

so only when I open a file ending .md, will markdown-mode be loaded and configured.

However, there're extensions where there're

  1. No additions to auto-mode-alist e.g. .rs files automatically have rust-mode as major
  2. Some additions to auto-mode-alist
(use-package cc-mode
  ;; not adding .c, .cpp, .cc, .h, etc. since it's automatically
  ;; associated to the right cc mode
  :mode (("\\.inl\\'" . c++-mode)
         ("\\.mm\\'" . objc-mode))

In these cases will use-package do deferred loading?

When I open a .c file, I see that the major mode is rightly c-mode but I don't know if this was early/lazy loaded.

  • 1
    :commands (cc-mode c-mode) would defer loading for sure. You could also check values of mode specific variables, before loading a c-file to verify cc-mode hasn't (yet) been loaded.
    – jue
    Dec 11 '19 at 11:02
  • Though this doesn't answer the question, this helped me -- thank you. Also for future viewers, it should be :commands (c++-mode c-mode).
    – legends2k
    Dec 12 '19 at 10:52
  • Thanks for mentioning c++-mode, I didn't spot that error!
    – jue
    Dec 13 '19 at 13:13

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Browse other questions tagged or ask your own question.