emacs/lisp/+hideshow.el

45 lines
1.2 KiB
EmacsLisp

;;; +hideshow.el -*- lexical-binding: t; -*-
;;; Commentary:
;; initiated by https://karthinks.com/software/simple-folding-with-hideshow/
;;; Code:
(defun +hs-cycle (&optional level)
(interactive "p")
(let (message-log-max
(inhibit-message t))
(if (= level 1)
(pcase last-command
('+hs-cycle
(hs-hide-level 1)
(setq this-command 'hs-cycle-children))
('hs-cycle-children
;; TODO: Fix this case. `hs-show-block' needs to be
;; called twice to open all folds of the parent
;; block.
(save-excursion (hs-show-block))
(hs-show-block)
(setq this-command 'hs-cycle-subtree))
('hs-cycle-subtree
(hs-hide-block))
(_
(if (not (hs-already-hidden-p))
(hs-hide-block)
(hs-hide-level 1)
(setq this-command 'hs-cycle-children))))
(hs-hide-level level)
(setq this-command 'hs-hide-level))))
(defun +hs-global-cycle ()
(interactive)
(pcase last-command
('+hs-global-cycle
(save-excursion (hs-show-all))
(setq this-command 'hs-global-show))
(_ (hs-hide-all))))
(provide '+hideshow)
;;; +hideshow.el ends here