 
 ;; Handles whitespace (tabs/spaces) settings externally. This way projects can
 ;; specify their own formatting rules.
-(def-package! editorconfig :demand t
+(def-package! editorconfig
   :mode ("\\.?editorconfig$" . editorconfig-conf-mode)
   :init
+  ;; deferred loading, the clumsy way
+  (add-transient-hook! 'find-file-hook (require 'editorconfig))
+  (add-transient-hook! 'after-change-major-mode-hook (require 'editorconfig))
+
   (def-setting! :editorconfig (action value)
+    ":add or :remove an entry in `editorconfig-indentation-alist'."
     `(after! editorconfig
        ,(cond ((eq action :add)
                `(push ',value editorconfig-indentation-alist))

  ;; Show whitespace in tabs indentation mode
  (add-hook! 'editorconfig-custom-hooks
    (if indent-tabs-mode (whitespace-mode +1))))

;; Auto-close delimiters and blocks as you type
(def-package! smartparens :demand t

  (sp-local-pair '(xml-mode nxml-mode php-mode)
                 "<!--" "-->"   :post-handlers '(("| " "SPC"))))

;; Branching & persistent undo
(def-package! undo-tree
  :init
  (add-transient-hook! 'find-file-hook (require 'undo-tree))
  :config
  (setq undo-tree-auto-save-history t
        undo-tree-history-directory-alist (list (cons "." (concat doom-cache-dir "undo-tree-hist/"))))

  (defun doom*silent-undo-tree-load-history-hook (orig-fn &rest args)
    "Silence undo-tree load errors."
    (quiet! (apply orig-fn args)))
  (advice-add #'undo-tree-load-history-hook :around #'doom*silent-undo-tree-load-history-hook))

;; Keep track of recently opened files
(def-package! recentf
  :defer 1
  :config
  (setq recentf-save-file (concat doom-cache-dir "recentf")
        recentf-exclude (list "/tmp/" "/ssh:" "\\.?ido\\.last$" "\\.revive$" "/TAGS$"
                              "^/var/folders/.+$" doom-local-dir)
        recentf-max-menu-items 0
        recentf-max-saved-items 250
        recentf-filename-handlers '(abbreviate-file-name))
  (quiet! (recentf-mode 1)))


;;
;; Autoloaded Plugins
