Refactor code-fold system (defer load + advise)
This commit is contained in:
parent
cd078e5e5c
commit
a20aeaf76b
2 changed files with 27 additions and 42 deletions
|
@ -10,11 +10,17 @@
|
||||||
(defun +evil--vimish-fold-p ()
|
(defun +evil--vimish-fold-p ()
|
||||||
(cl-some #'vimish-fold--vimish-overlay-p (overlays-at (point))))
|
(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."
|
"Ensure hs-minor-mode is enabled."
|
||||||
(unless (bound-and-true-p hs-minor-mode)
|
(unless (bound-and-true-p hs-minor-mode)
|
||||||
(hs-minor-mode +1)))
|
(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 ----------------------
|
;; --- fold commands ----------------------
|
||||||
|
|
||||||
|
@ -25,43 +31,41 @@
|
||||||
(+evil--ensure-modes)
|
(+evil--ensure-modes)
|
||||||
(hs-already-hidden-p))))
|
(hs-already-hidden-p))))
|
||||||
|
|
||||||
;;;###autoload (autoload '+evil/fold-toggle "feature/evil/autoload/folds" nil t)
|
;;;###autoload (autoload '+evil:fold-toggle "feature/evil/autoload/folds" nil t)
|
||||||
(evil-define-command +evil/fold-toggle ()
|
(evil-define-command +evil:fold-toggle ()
|
||||||
(interactive)
|
(interactive)
|
||||||
(if (+evil--vimish-fold-p)
|
(if (+evil--vimish-fold-p)
|
||||||
(vimish-fold-toggle)
|
(vimish-fold-toggle)
|
||||||
(hs-toggle-hiding)))
|
(hs-toggle-hiding)))
|
||||||
|
|
||||||
;;;###autoload (autoload '+evil/fold-open "feature/evil/autoload/folds" nil t)
|
;;;###autoload (autoload '+evil:fold-open "feature/evil/autoload/folds" nil t)
|
||||||
(evil-define-command +evil/fold-open ()
|
(evil-define-command +evil:fold-open ()
|
||||||
(interactive)
|
(interactive)
|
||||||
(if (+evil--vimish-fold-p)
|
(if (+evil--vimish-fold-p)
|
||||||
(vimish-fold-unfold)
|
(vimish-fold-unfold)
|
||||||
(hs-hide-block)))
|
(hs-hide-block)))
|
||||||
|
|
||||||
;;;###autoload (autoload '+evil/fold-close "feature/evil/autoload/folds" nil t)
|
;;;###autoload (autoload '+evil:fold-close "feature/evil/autoload/folds" nil t)
|
||||||
(evil-define-command +evil/fold-close ()
|
(evil-define-command +evil:fold-close ()
|
||||||
(interactive)
|
(interactive)
|
||||||
(if (+evil--vimish-fold-p)
|
(if (+evil--vimish-fold-p)
|
||||||
(vimish-fold-refold)
|
(vimish-fold-refold)
|
||||||
(hs-hide-block)))
|
(hs-hide-block)))
|
||||||
|
|
||||||
;;;###autoload (autoload '+evil/fold-open-all "feature/evil/autoload/folds" nil t)
|
;;;###autoload (autoload '+evil:fold-open-all "feature/evil/autoload/folds" nil t)
|
||||||
(evil-define-command +evil/fold-open-all (&optional level)
|
(evil-define-command +evil:fold-open-all (&optional level)
|
||||||
"Open folds at LEVEL (or all folds if LEVEL is nil)."
|
"Open folds at LEVEL (or all folds if LEVEL is nil)."
|
||||||
(interactive "<c>")
|
(interactive "<c>")
|
||||||
(vimish-fold-unfold-all)
|
(vimish-fold-unfold-all)
|
||||||
(+evil--ensure-modes)
|
|
||||||
(if (integerp level)
|
(if (integerp level)
|
||||||
(hs-hide-level (1- level))
|
(hs-hide-level (1- level))
|
||||||
(hs-show-all)))
|
(hs-show-all)))
|
||||||
|
|
||||||
;;;###autoload (autoload '+evil/fold-close-all "feature/evil/autoload/folds" nil t)
|
;;;###autoload (autoload '+evil:fold-close-all "feature/evil/autoload/folds" nil t)
|
||||||
(evil-define-command +evil/fold-close-all (&optional level)
|
(evil-define-command +evil:fold-close-all (&optional level)
|
||||||
"Close folds at LEVEL (or all folds if LEVEL is nil)."
|
"Close folds at LEVEL (or all folds if LEVEL is nil)."
|
||||||
(interactive "<c>")
|
(interactive "<c>")
|
||||||
(vimish-fold-refold-all)
|
(vimish-fold-refold-all)
|
||||||
(+evil--ensure-modes)
|
|
||||||
(if (integerp level)
|
(if (integerp level)
|
||||||
(hs-hide-level (1- level))
|
(hs-hide-level (1- level))
|
||||||
(hs-hide-all)))
|
(hs-hide-all)))
|
||||||
|
@ -80,6 +84,6 @@
|
||||||
(cond ((eq major-mode 'magit-status-mode)
|
(cond ((eq major-mode 'magit-status-mode)
|
||||||
#'magit-section-toggle)
|
#'magit-section-toggle)
|
||||||
((+evil-fold-p)
|
((+evil-fold-p)
|
||||||
#'+evil/fold-toggle)
|
#'+evil:fold-toggle)
|
||||||
(t
|
(t
|
||||||
#'evilmi-jump-items)))))
|
#'evilmi-jump-items)))))
|
||||||
|
|
|
@ -82,12 +82,12 @@
|
||||||
:map wgrep-mode-map [remap evil-delete] #'+evil-delete)
|
:map wgrep-mode-map [remap evil-delete] #'+evil-delete)
|
||||||
|
|
||||||
;; replace native folding commands
|
;; replace native folding commands
|
||||||
:n "zo" #'+evil/fold-open
|
:n "zo" #'+evil:fold-open
|
||||||
:n "zO" #'+evil/fold-open
|
:n "zO" #'+evil:fold-open
|
||||||
:n "zc" #'+evil/fold-close
|
:n "zc" #'+evil:fold-close
|
||||||
:n "za" #'+evil/fold-toggle
|
:n "za" #'+evil:fold-toggle
|
||||||
:n "zr" #'+evil/fold-open-all
|
:n "zr" #'+evil:fold-open-all
|
||||||
:n "zm" #'+evil/fold-close-all)
|
:n "zm" #'+evil:fold-close-all)
|
||||||
|
|
||||||
|
|
||||||
;; --- evil hacks -------------------------
|
;; --- evil hacks -------------------------
|
||||||
|
@ -341,31 +341,12 @@ the new algorithm is confusing, like in python or ruby."
|
||||||
:config (global-evil-surround-mode 1))
|
:config (global-evil-surround-mode 1))
|
||||||
|
|
||||||
|
|
||||||
(def-package! evil-vimish-fold :demand t
|
(def-package! evil-vimish-fold
|
||||||
|
:commands evil-vimish-fold-mode
|
||||||
:init
|
:init
|
||||||
(setq vimish-fold-dir (concat doom-cache-dir "vimish-fold/")
|
(setq vimish-fold-dir (concat doom-cache-dir "vimish-fold/")
|
||||||
vimish-fold-indication-mode 'right-fringe)
|
vimish-fold-indication-mode 'right-fringe)
|
||||||
|
(add-hook 'emacs-startup-hook #'evil-vimish-fold-mode t))
|
||||||
: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)))
|
|
||||||
|
|
||||||
|
|
||||||
;; Without `evil-visualstar', * and # grab the word at point and search, no
|
;; Without `evil-visualstar', * and # grab the word at point and search, no
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue