;;; editor/fold/config.el -*- lexical-binding: t; -*- (when (featurep! :editor evil) ;; Add vimish-fold, outline-mode & hideshow support to folding commands (define-key! 'global [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-close-folds] #'+fold/close-all [remap evil-open-folds] #'+fold/open-all) (evil-define-key* 'motion 'global "zj" #'+fold/next "zk" #'+fold/previous)) ;; ;; Packages (use-package! hideshow ; built-in :commands (hs-toggle-hiding hs-hide-block hs-hide-level hs-show-all hs-hide-all) :config (setq hs-hide-comments-when-hiding-all nil ;; Nicer code-folding overlays (with fringe indicators) hs-set-up-overlay #'+fold-hideshow-set-up-overlay-fn) (defadvice! +fold--hideshow-ensure-mode-a (&rest _) "Ensure `hs-minor-mode' is enabled." :before '(hs-toggle-hiding hs-hide-block hs-hide-level hs-show-all hs-hide-all) (unless (bound-and-true-p hs-minor-mode) (hs-minor-mode +1))) ;; extra folding support for more languages (unless (assq 't hs-special-modes-alist) (setq hs-special-modes-alist (append '((vimrc-mode "{{{" "}}}" "\"") (yaml-mode "\\s-*\\_<\\(?:[^:]+\\)\\_>" "" "#" +fold-hideshow-forward-block-by-indent-fn nil) (haml-mode "[#.%]" "\n" "/" +fold-hideshow-haml-forward-sexp-fn nil) (ruby-mode "class\\|d\\(?:ef\\|o\\)\\|module\\|[[{]" "end\\|[]}]" "#\\|=begin" ruby-forward-sexp) (enh-ruby-mode "class\\|d\\(?:ef\\|o\\)\\|module\\|[[{]" "end\\|[]}]" "#\\|=begin" enh-ruby-forward-sexp nil) (matlab-mode "if\\|switch\\|case\\|otherwise\\|while\\|for\\|try\\|catch" "end" nil (lambda (_arg) (matlab-forward-sexp))) (nxml-mode "\\|]*[^/]>" "