dotfiles/.config/emacs/lisp/init-edit.el
2023-05-17 21:49:44 +09:00

132 lines
4.3 KiB
EmacsLisp

;;; init-edit.el -*- lexical-binding: t -*-
(require 'init-const)
(require 'init-func)
(use-package autorevert
:ensure nil
:diminish
:hook (after-init . global-auto-revert-mode))
(use-package avy
:hook (after-init . avy-setup-default)
:config
(setq avy-style 'pre
avy-all-windows t
avy-all-windows-alt nil
avy-background t))
;; Show number of matches in mode-line while searching
(use-package anzu
:diminish
;;:bind (([remap query-replace] . anzu-query-replace)
;; ([remap query-replace-regexp] . anzu-query-replace-regexp)
;; :map isearch-mode-map
;; ([remap isearch-query-replace] . anzu-isearch-query-replace)
;; ([remap isearch-query-replace-regexp] . anzu-isearch-query-replace-regexp))
:hook (after-init . global-anzu-mode))
(use-package ialign)
(use-package undo-tree
:diminish
:hook (after-init . global-undo-tree-mode)
:custom
(undo-tree-history-directory-alist
`(("." . ,(expand-file-name (file-name-as-directory "undo-tree-hist")
user-emacs-directory))))
:config
(setq undo-tree-visualizer-diff t
undo-tree-visualizer-timestamps t
undo-tree-auto-save-history t
undo-tree-enable-undo-in-region t
undo-limit (* 800 1024)
undo-strong-limit (* 12 1024 1024)
undo-outer-limit (* 128 1024 1024)))
(use-package hideshow
:ensure nil
:diminish hs-minor-mode
;;:pretty-hydra
;;((:title (pretty-hydra-title "HideShow" 'octicon "nf-oct-fold")
;; :color amaranth :quit-key ("q" "C-g"))
;; ("Fold"
;; (("t" hs-toggle-all "toggle all")
;; ("a" hs-show-all "show all")
;; ("i" hs-hide-all "hide all")
;; ("g" hs-toggle-hiding "toggle hiding")
;; ("c" hs-cycle "cycle block")
;; ("s" hs-show-block "show block")
;; ("h" hs-hide-block "hide block")
;; ("l" hs-hide-level "hide level"))
;; "Move"
;; (("C-a" mwim-beginning-of-code-or-line "⭰")
;; ("C-e" mwim-end-of-code-or-line "⭲")
;; ("C-b" backward-char "←")
;; ("C-n" next-line "↓")
;; ("C-p" previous-line "↑")
;; ("C-f" forward-char "→")
;; ("C-v" pager-page-down "↘")
;; ("M-v" pager-page-up "↖")
;; ("M-<" beginning-of-buffer "⭶")
;; ("M->" end-of-buffer "⭸"))))
;;:bind (:map hs-minor-mode-map
;; ("C-~" . hideshow-hydra/body)
;; ("C-S-<escape>" . hideshow-hydra/body))
:hook (prog-mode . hs-minor-mode)
:config
;; More functions
;; @see https://karthinks.com/software/simple-folding-with-hideshow/
(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
(save-excursion (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-toggle-all ()
"Toggle hide/show all."
(interactive)
(pcase last-command
('hs-toggle-all
(save-excursion (hs-show-all))
(setq this-command 'hs-global-show))
(_ (hs-hide-all))))
;; Display line counts
(defun hs-display-code-line-counts (ov)
"Display line counts when hiding codes."
(when (eq 'code (overlay-get ov 'hs))
(overlay-put ov 'display
(concat
" "
(propertize
(if (char-displayable-p ?⏷) "" "...")
'face 'shadow)
(propertize
(format " (%d lines)"
(count-lines (overlay-start ov)
(overlay-end ov)))
'face '(:inherit shadow :height 0.8))
" "))))
(setq hs-set-up-overlay #'hs-display-code-line-counts))
;; Hanlde minified code
(use-package so-long
:hook (after-init . global-so-long-mode))
(provide 'init-edit)
;;; init-edit.el ends here.