diff --git a/modules/editor/fold/autoload/fold.el b/modules/editor/fold/autoload/fold.el index 1052374bb..8e3e8cf34 100644 --- a/modules/editor/fold/autoload/fold.el +++ b/modules/editor/fold/autoload/fold.el @@ -78,6 +78,18 @@ Targets `vimmish-fold', `hideshow', `ts-fold' and `outline' folds." ((+fold--hideshow-fold-p) (+fold-from-eol (hs-toggle-hiding))) ((+fold--ts-fold-p) (ts-fold-toggle))))) +;;;###autoload +(defun +fold/open-rec () + "Recursively open the folded region at point. + +Targets `vimmish-fold', `hideshow', `ts-fold' and `outline' folds." + (interactive) + (save-excursion + (cond ((+fold--vimish-fold-p) (vimish-fold-unfold)) + ((+fold--outline-fold-p) (outline-show-subtree)) + ((+fold--hideshow-fold-p) (+fold-from-eol (hs-show-block))) + ((+fold--ts-fold-p) (ts-fold-open))))) + ;;;###autoload (defun +fold/open () "Open the folded region at point. @@ -87,7 +99,7 @@ Targets `vimmish-fold', `hideshow', `ts-fold' and `outline' folds." (save-excursion (cond ((+fold--vimish-fold-p) (vimish-fold-unfold)) ((+fold--outline-fold-p) - (outline-show-children) + (outline-show-branches) (outline-show-entry)) ((+fold--hideshow-fold-p) (+fold-from-eol (hs-show-block))) ((+fold--ts-fold-p) (ts-fold-open))))) @@ -111,7 +123,7 @@ Targets `vimmish-fold', `hideshow', `ts-fold' and `outline' folds." (list (if current-prefix-arg (prefix-numeric-value current-prefix-arg)))) (cond ((+fold--ts-fold-p) (ts-fold-open-all)) - ((featurep 'vimish-fold) + ((and (featurep 'vimish-fold) (+fold--vimish-fold-p)) (vimish-fold-unfold-all)) ((save-excursion (+fold--ensure-hideshow-mode) @@ -138,8 +150,12 @@ Targets `vimmish-fold', `hideshow', `ts-fold' and `outline' folds." (+fold--ensure-hideshow-mode) (hs-life-goes-on (if (integerp level) - (hs-hide-level-recursive (1- level) (point-min) (point-max)) - (hs-hide-all))))))) + (progn + (outline--show-headings-up-to-level (1+ level)) + (hs-hide-level-recursive (1- level) (point-min) (point-max))) + (hs-hide-all) + (when (fboundp 'outline-hide-sublevels) + (outline-show-only-headings)))))))) ;;;###autoload (defun +fold/next (count) diff --git a/modules/editor/fold/config.el b/modules/editor/fold/config.el index c30b5a80e..e1f7dc21c 100644 --- a/modules/editor/fold/config.el +++ b/modules/editor/fold/config.el @@ -6,7 +6,7 @@ [remap evil-toggle-fold] #'+fold/toggle [remap evil-close-fold] #'+fold/close [remap evil-open-fold] #'+fold/open - [remap evil-open-fold-rec] #'+fold/open + [remap evil-open-fold-rec] #'+fold/open-rec [remap evil-close-folds] #'+fold/close-all [remap evil-open-folds] #'+fold/open-all) (after! evil