From a20aeaf76bd51e7661ad52766d740494ecfff2da Mon Sep 17 00:00:00 2001 From: Henrik Lissner Date: Wed, 7 Jun 2017 20:43:58 +0200 Subject: [PATCH] Refactor code-fold system (defer load + advise) --- modules/feature/evil/autoload/folds.el | 32 ++++++++++++---------- modules/feature/evil/config.el | 37 +++++++------------------- 2 files changed, 27 insertions(+), 42 deletions(-) diff --git a/modules/feature/evil/autoload/folds.el b/modules/feature/evil/autoload/folds.el index b4e27d98a..137e35189 100644 --- a/modules/feature/evil/autoload/folds.el +++ b/modules/feature/evil/autoload/folds.el @@ -10,11 +10,17 @@ (defun +evil--vimish-fold-p () (cl-some #'vimish-fold--vimish-overlay-p (overlays-at (point)))) -(defun +evil--ensure-modes () +(defun +evil--ensure-modes (&rest _) "Ensure hs-minor-mode is enabled." (unless (bound-and-true-p hs-minor-mode) (hs-minor-mode +1))) +(advice-add #'hs-toggle-hiding :before #'+evil--ensure-modes) +(advice-add #'hs-hide-block :before #'+evil--ensure-modes) +(advice-add #'hs-hide-level :before #'+evil--ensure-modes) +(advice-add #'hs-show-all :before #'+evil--ensure-modes) +(advice-add #'hs-hide-all :before #'+evil--ensure-modes) + ;; --- fold commands ---------------------- @@ -25,43 +31,41 @@ (+evil--ensure-modes) (hs-already-hidden-p)))) -;;;###autoload (autoload '+evil/fold-toggle "feature/evil/autoload/folds" nil t) -(evil-define-command +evil/fold-toggle () +;;;###autoload (autoload '+evil:fold-toggle "feature/evil/autoload/folds" nil t) +(evil-define-command +evil:fold-toggle () (interactive) (if (+evil--vimish-fold-p) (vimish-fold-toggle) (hs-toggle-hiding))) -;;;###autoload (autoload '+evil/fold-open "feature/evil/autoload/folds" nil t) -(evil-define-command +evil/fold-open () +;;;###autoload (autoload '+evil:fold-open "feature/evil/autoload/folds" nil t) +(evil-define-command +evil:fold-open () (interactive) (if (+evil--vimish-fold-p) (vimish-fold-unfold) (hs-hide-block))) -;;;###autoload (autoload '+evil/fold-close "feature/evil/autoload/folds" nil t) -(evil-define-command +evil/fold-close () +;;;###autoload (autoload '+evil:fold-close "feature/evil/autoload/folds" nil t) +(evil-define-command +evil:fold-close () (interactive) (if (+evil--vimish-fold-p) (vimish-fold-refold) (hs-hide-block))) -;;;###autoload (autoload '+evil/fold-open-all "feature/evil/autoload/folds" nil t) -(evil-define-command +evil/fold-open-all (&optional level) +;;;###autoload (autoload '+evil:fold-open-all "feature/evil/autoload/folds" nil t) +(evil-define-command +evil:fold-open-all (&optional level) "Open folds at LEVEL (or all folds if LEVEL is nil)." (interactive "") (vimish-fold-unfold-all) - (+evil--ensure-modes) (if (integerp level) (hs-hide-level (1- level)) (hs-show-all))) -;;;###autoload (autoload '+evil/fold-close-all "feature/evil/autoload/folds" nil t) -(evil-define-command +evil/fold-close-all (&optional level) +;;;###autoload (autoload '+evil:fold-close-all "feature/evil/autoload/folds" nil t) +(evil-define-command +evil:fold-close-all (&optional level) "Close folds at LEVEL (or all folds if LEVEL is nil)." (interactive "") (vimish-fold-refold-all) - (+evil--ensure-modes) (if (integerp level) (hs-hide-level (1- level)) (hs-hide-all))) @@ -80,6 +84,6 @@ (cond ((eq major-mode 'magit-status-mode) #'magit-section-toggle) ((+evil-fold-p) - #'+evil/fold-toggle) + #'+evil:fold-toggle) (t #'evilmi-jump-items))))) diff --git a/modules/feature/evil/config.el b/modules/feature/evil/config.el index cb4a3ce32..967fdbc0f 100644 --- a/modules/feature/evil/config.el +++ b/modules/feature/evil/config.el @@ -82,12 +82,12 @@ :map wgrep-mode-map [remap evil-delete] #'+evil-delete) ;; replace native folding commands - :n "zo" #'+evil/fold-open - :n "zO" #'+evil/fold-open - :n "zc" #'+evil/fold-close - :n "za" #'+evil/fold-toggle - :n "zr" #'+evil/fold-open-all - :n "zm" #'+evil/fold-close-all) + :n "zo" #'+evil:fold-open + :n "zO" #'+evil:fold-open + :n "zc" #'+evil:fold-close + :n "za" #'+evil:fold-toggle + :n "zr" #'+evil:fold-open-all + :n "zm" #'+evil:fold-close-all) ;; --- evil hacks ------------------------- @@ -341,31 +341,12 @@ the new algorithm is confusing, like in python or ruby." :config (global-evil-surround-mode 1)) -(def-package! evil-vimish-fold :demand t +(def-package! evil-vimish-fold + :commands evil-vimish-fold-mode :init (setq vimish-fold-dir (concat doom-cache-dir "vimish-fold/") vimish-fold-indication-mode 'right-fringe) - - :config - (evil-vimish-fold-mode +1) - - ;; custom folding system - (defun +evil*fold-hs-minor-mode (&rest args) - "Lazily activate buffer-local hs-minor-mode." - (unless (bound-and-true-p hs-minor-mode) - (hs-minor-mode +1))) - (advice-add #'evil-fold-action :before #'+evil*fold-hs-minor-mode) - - (add-to-list - 'evil-fold-list - '((evil-vimish-fold-mode hs-minor-mode) - :delete vimish-fold-delete - :open-all +evil/fold-open-all - :close-all +evil/fold-close-all - :toggle +evil/fold-toggle - :open +evil/fold-open - :open-rec nil - :close +evil/fold-close))) + (add-hook 'emacs-startup-hook #'evil-vimish-fold-mode t)) ;; Without `evil-visualstar', * and # grab the word at point and search, no