410 lines
16 KiB
EmacsLisp
410 lines
16 KiB
EmacsLisp
;;; packages.el --- Spacemacs Editing Visual Layer packages File
|
|
;;
|
|
;; Copyright (c) 2012-2016 Sylvain Benner & Contributors
|
|
;;
|
|
;; Author: Sylvain Benner <sylvain.benner@gmail.com>
|
|
;; URL: https://github.com/syl20bnr/spacemacs
|
|
;;
|
|
;; This file is not part of GNU Emacs.
|
|
;;
|
|
;;; License: GPLv3
|
|
|
|
(setq spacemacs-editing-visual-packages
|
|
'(
|
|
;; default
|
|
adaptive-wrap
|
|
auto-highlight-symbol
|
|
column-enforce-mode
|
|
hide-comnt
|
|
highlight-indentation
|
|
highlight-numbers
|
|
highlight-parentheses
|
|
;; waiting for an overlay bug to be fixed
|
|
;; see https://github.com/syl20bnr/spacemacs/issues/2529
|
|
(hl-anything :excluded t)
|
|
indent-guide
|
|
rainbow-delimiters
|
|
volatile-highlights
|
|
))
|
|
|
|
;; Initialization of packages
|
|
|
|
(defun spacemacs-editing-visual/init-adaptive-wrap ()
|
|
(use-package adaptive-wrap
|
|
:config
|
|
(progn
|
|
(add-hook 'visual-line-mode-hook 'adaptive-wrap-prefix-mode))))
|
|
|
|
(defun spacemacs-editing-visual/init-auto-highlight-symbol ()
|
|
(use-package auto-highlight-symbol
|
|
:defer t
|
|
:init
|
|
(progn
|
|
(setq ahs-case-fold-search nil
|
|
ahs-default-range 'ahs-range-whole-buffer
|
|
;; by default disable auto-highlight of symbol
|
|
;; current symbol can always be highlighted with `SPC s h'
|
|
ahs-idle-timer 0
|
|
ahs-idle-interval 0.25
|
|
ahs-inhibit-face-list nil
|
|
spacemacs--symbol-highlight-transient-state-doc
|
|
"
|
|
%s [_n_] next [_N_/_p_] previous [_r_] change range [_R_] reset [_e_] iedit
|
|
%s [_d_/_D_] next/previous definition")
|
|
|
|
;; since we are creating our own maps,
|
|
;; prevent the default keymap from getting created
|
|
(setq auto-highlight-symbol-mode-map (make-sparse-keymap))
|
|
|
|
(spacemacs|add-toggle automatic-symbol-highlight
|
|
:status (timerp ahs-idle-timer)
|
|
:on (progn
|
|
(auto-highlight-symbol-mode)
|
|
(setq ahs-idle-timer
|
|
(run-with-idle-timer ahs-idle-interval t
|
|
'ahs-idle-function)))
|
|
:off (when (timerp ahs-idle-timer)
|
|
(auto-highlight-symbol-mode)
|
|
(cancel-timer ahs-idle-timer)
|
|
(setq ahs-idle-timer 0))
|
|
:documentation "Automatic highlight of current symbol."
|
|
:evil-leader "tha")
|
|
(spacemacs/add-to-hooks 'auto-highlight-symbol-mode '(prog-mode-hook
|
|
markdown-mode-hook)))
|
|
:config
|
|
(progn
|
|
(spacemacs|hide-lighter auto-highlight-symbol-mode)
|
|
(defvar-local spacemacs-last-ahs-highlight-p nil
|
|
"Info on the last searched highlighted symbol.")
|
|
(defvar-local spacemacs--ahs-searching-forward t)
|
|
|
|
(defun spacemacs/goto-last-searched-ahs-symbol ()
|
|
"Go to the last known occurrence of the last symbol searched with
|
|
`auto-highlight-symbol'."
|
|
(interactive)
|
|
(if spacemacs-last-ahs-highlight-p
|
|
(progn (goto-char (nth 1 spacemacs-last-ahs-highlight-p))
|
|
(spacemacs/ahs-highlight-now-wrapper)
|
|
(spacemacs/symbol-highlight-transient-state/body))
|
|
(message "No symbol has been searched for now.")))
|
|
|
|
(defun spacemacs/integrate-evil-search (forward)
|
|
;; isearch-string is last searched item. Next time
|
|
;; "n" is hit we will use this.
|
|
(let* ((symbol (evil-find-thing forward 'symbol))
|
|
(regexp (concat "\\<" symbol "\\>")))
|
|
(setq isearch-string regexp
|
|
isearch-regexp regexp
|
|
evil-ex-search-pattern (evil-ex-make-search-pattern regexp)))
|
|
;; Next time "n" is hit, go the correct direction.
|
|
(setq isearch-forward forward)
|
|
;; ahs does a case sensitive search. We could set
|
|
;; this, but it would break the user's current
|
|
;; sensitivity settings. We could save the setting,
|
|
;; then next time the user starts a search we could
|
|
;; restore the setting.
|
|
;;(setq case-fold-search nil)
|
|
;; Place the search term into the search rings.
|
|
(isearch-update-ring isearch-string t)
|
|
(evil-push-search-history isearch-string forward)
|
|
;; Use this search term for empty pattern "%s//replacement/"
|
|
;; Append case sensitivity
|
|
(setq evil-ex-last-was-search nil
|
|
evil-ex-substitute-pattern `(,(concat isearch-string "\\C")
|
|
nil (0 0))))
|
|
|
|
(defun spacemacs/ensure-ahs-enabled-locally ()
|
|
"Ensures ahs is enabled for the local buffer."
|
|
(unless
|
|
(bound-and-true-p ahs-mode-line)
|
|
(auto-highlight-symbol-mode)
|
|
))
|
|
|
|
(defun spacemacs/ahs-highlight-now-wrapper ()
|
|
"Safe wrapper for ahs-highlight-now"
|
|
(eval '(progn
|
|
(spacemacs/ensure-ahs-enabled-locally)
|
|
(ahs-highlight-now)) nil))
|
|
|
|
(defun spacemacs/enter-ahs-forward ()
|
|
"Go to the next occurrence of symbol under point with
|
|
`auto-highlight-symbol'"
|
|
(interactive)
|
|
(setq spacemacs--ahs-searching-forward t)
|
|
(spacemacs/quick-ahs-forward))
|
|
|
|
(defun spacemacs/enter-ahs-backward ()
|
|
"Go to the previous occurrence of symbol under point with
|
|
`auto-highlight-symbol'"
|
|
(interactive)
|
|
(setq spacemacs--ahs-searching-forward nil)
|
|
(spacemacs/quick-ahs-forward))
|
|
|
|
(defun spacemacs/quick-ahs-forward ()
|
|
"Go to the next occurrence of symbol under point with
|
|
`auto-highlight-symbol'"
|
|
(interactive)
|
|
(spacemacs//quick-ahs-move t))
|
|
|
|
(defun spacemacs/quick-ahs-backward ()
|
|
"Go to the previous occurrence of symbol under point with
|
|
`auto-highlight-symbol'"
|
|
(interactive)
|
|
(spacemacs//quick-ahs-move nil))
|
|
|
|
(defun spacemacs//quick-ahs-move (forward)
|
|
"Go to the next occurrence of symbol under point with
|
|
`auto-highlight-symbol'"
|
|
|
|
(if (eq forward spacemacs--ahs-searching-forward)
|
|
(progn
|
|
(spacemacs/integrate-evil-search t)
|
|
(spacemacs/ahs-highlight-now-wrapper)
|
|
(evil-set-jump)
|
|
(spacemacs/symbol-highlight-transient-state/body)
|
|
(ahs-forward))
|
|
(progn
|
|
(spacemacs/integrate-evil-search nil)
|
|
(spacemacs/ahs-highlight-now-wrapper)
|
|
(evil-set-jump)
|
|
(spacemacs/symbol-highlight-transient-state/body)
|
|
(ahs-backward))))
|
|
|
|
(with-eval-after-load 'evil
|
|
(define-key evil-motion-state-map (kbd "*")
|
|
'spacemacs/enter-ahs-forward)
|
|
(define-key evil-motion-state-map (kbd "#")
|
|
'spacemacs/enter-ahs-backward))
|
|
|
|
(defun spacemacs/symbol-highlight ()
|
|
"Highlight the symbol under point with `auto-highlight-symbol'."
|
|
(interactive)
|
|
(spacemacs/ahs-highlight-now-wrapper)
|
|
(setq spacemacs-last-ahs-highlight-p (ahs-highlight-p))
|
|
(spacemacs/symbol-highlight-transient-state/body)
|
|
(spacemacs/integrate-evil-search nil))
|
|
|
|
(defun spacemacs//ahs-ms-on-exit ()
|
|
;; Restore user search direction state as ahs has exitted in a state
|
|
;; good for <C-s>, but not for 'n' and 'N'"
|
|
(setq isearch-forward spacemacs--ahs-searching-forward))
|
|
|
|
(defun spacemacs/symbol-highlight-reset-range ()
|
|
"Reset the range for `auto-highlight-symbol'."
|
|
(interactive)
|
|
(ahs-change-range ahs-default-range))
|
|
|
|
(spacemacs/set-leader-keys
|
|
"sh" 'spacemacs/symbol-highlight
|
|
"sH" 'spacemacs/goto-last-searched-ahs-symbol)
|
|
|
|
;; micro-state to easily jump from a highlighted symbol to the others
|
|
(dolist (sym '(ahs-forward
|
|
ahs-forward-definition
|
|
ahs-backward
|
|
ahs-backward-definition
|
|
ahs-back-to-start
|
|
ahs-change-range))
|
|
(let* ((advice (intern (format "spacemacs/%s" (symbol-name sym)))))
|
|
(eval `(defadvice ,sym (around ,advice activate)
|
|
(spacemacs/ahs-highlight-now-wrapper)
|
|
ad-do-it
|
|
(spacemacs/ahs-highlight-now-wrapper)
|
|
(setq spacemacs-last-ahs-highlight-p (ahs-highlight-p))))))
|
|
|
|
(defun symbol-highlight-doc ()
|
|
(let* ((i 0)
|
|
(overlay-count (length ahs-overlay-list))
|
|
(overlay (format "%s" (nth i ahs-overlay-list)))
|
|
(current-overlay (format "%s" ahs-current-overlay))
|
|
(st (ahs-stat))
|
|
(plighter (ahs-current-plugin-prop 'lighter))
|
|
(plugin (format "%s"
|
|
(cond ((string= plighter "HS") "Display")
|
|
((string= plighter "HSA") "Buffer")
|
|
((string= plighter "HSD") "Function"))))
|
|
(face (cond ((string= plighter "HS") ahs-plugin-defalt-face)
|
|
((string= plighter "HSA") ahs-plugin-whole-buffer-face)
|
|
((string= plighter "HSD") ahs-plugin-bod-face))))
|
|
(while (not (string= overlay current-overlay))
|
|
(setq i (1+ i))
|
|
(setq overlay (format "%s" (nth i ahs-overlay-list))))
|
|
(let* ((x/y (format "[%s/%s]" (- overlay-count i) overlay-count))
|
|
(hidden (if (< 0 (- overlay-count (nth 4 st))) "*" "")))
|
|
(concat
|
|
(propertize (format " %s " plugin) 'face face)
|
|
(propertize (format " %s%s " x/y hidden) 'face
|
|
`(:foreground "#ffffff" :background "#000000"))))))
|
|
|
|
(defun ahs-to-iedit ()
|
|
(interactive)
|
|
(cond
|
|
((and (not (eq dotspacemacs-editing-style 'emacs))
|
|
(configuration-layer/package-usedp 'evil-iedit-state))
|
|
(evil-iedit-state/iedit-mode)
|
|
(iedit-restrict-region (ahs-current-plugin-prop 'start)
|
|
(ahs-current-plugin-prop 'end)))
|
|
((and (eq dotspacemacs-editing-style 'emacs)
|
|
(configuration-layer/package-usedp 'iedit))
|
|
(iedit-mode)
|
|
(iedit-restrict-region (ahs-current-plugin-prop 'start)
|
|
(ahs-current-plugin-prop 'end)))
|
|
(t (ahs-edit-mode t))))
|
|
;; transient state
|
|
(defun spacemacs//symbol-highlight-ts-doc ()
|
|
(spacemacs//transient-state-make-doc
|
|
'symbol-highlight
|
|
(format spacemacs--symbol-highlight-transient-state-doc
|
|
(symbol-highlight-doc)
|
|
(make-string (length (symbol-highlight-doc)) 32))))
|
|
(spacemacs|define-transient-state symbol-highlight
|
|
:title "Symbol Highlight Transient State"
|
|
:dynamic-hint (spacemacs//symbol-highlight-ts-doc)
|
|
:before-exit (spacemacs//ahs-ms-on-exit)
|
|
:bindings
|
|
("d" ahs-forward-definition)
|
|
("D" ahs-backward-definition)
|
|
("e" ahs-to-iedit :exit t)
|
|
("n" spacemacs/quick-ahs-forward)
|
|
("N" spacemacs/quick-ahs-backward)
|
|
("p" spacemacs/quick-ahs-backward)
|
|
("R" ahs-back-to-start)
|
|
("r" ahs-change-range)
|
|
("q" nil :exit t)))))
|
|
|
|
(defun spacemacs-editing-visual/init-column-enforce-mode ()
|
|
(use-package column-enforce-mode
|
|
:commands (column-enforce-mode global-column-enforce-mode)
|
|
:init
|
|
(progn
|
|
(spacemacs|add-toggle highlight-long-lines
|
|
:status column-enforce-mode
|
|
:prefix columns
|
|
:on (column-enforce-n (or columns column-enforce-column))
|
|
:on-message (format "long-lines enabled for %s columns." (or columns column-enforce-column))
|
|
:off (column-enforce-mode -1)
|
|
:documentation "Highlight the characters past the 80th column."
|
|
:evil-leader "t8")
|
|
(spacemacs|add-toggle highlight-long-lines-globally
|
|
:mode global-column-enforce-mode
|
|
:documentation "Globally Highlight the characters past the 80th column."
|
|
:evil-leader "t C-8"))
|
|
:config (spacemacs|diminish column-enforce-mode "⑧" "8")))
|
|
|
|
(defun spacemacs-editing-visual/init-hide-comnt ()
|
|
(use-package hide-comnt
|
|
:commands hide/show-comments-toggle
|
|
:init (spacemacs/set-leader-keys "ch" 'hide/show-comments-toggle)))
|
|
|
|
(defun spacemacs-editing-visual/init-highlight-indentation ()
|
|
(use-package highlight-indentation
|
|
:defer t
|
|
:init
|
|
(progn
|
|
(spacemacs|add-toggle highlight-indentation
|
|
:mode highlight-indentation-mode
|
|
:documentation "Highlight indentation levels."
|
|
:evil-leader "thi")
|
|
(spacemacs|add-toggle highlight-indentation-current-column
|
|
:mode highlight-indentation-current-column-mode
|
|
:documentation "Highlight indentation level at point."
|
|
:evil-leader "thc"))
|
|
:config
|
|
(progn
|
|
(spacemacs|diminish highlight-indentation-mode " ⓗi" " hi")
|
|
(spacemacs|diminish highlight-indentation-current-column-mode " ⓗc" " hc"))))
|
|
|
|
(defun spacemacs-editing-visual/init-highlight-numbers ()
|
|
(use-package highlight-numbers
|
|
:defer t
|
|
:init
|
|
(progn
|
|
(add-hook 'prog-mode-hook 'highlight-numbers-mode)
|
|
(add-hook 'asm-mode-hook (lambda () (highlight-numbers-mode -1))))))
|
|
|
|
(defun spacemacs-editing-visual/init-highlight-parentheses ()
|
|
(use-package highlight-parentheses
|
|
:defer t
|
|
:init
|
|
(progn
|
|
(when (member dotspacemacs-highlight-delimiters '(all current))
|
|
(add-hook 'prog-mode-hook #'highlight-parentheses-mode))
|
|
(setq hl-paren-delay 0.2)
|
|
(spacemacs/set-leader-keys "tCp" 'highlight-parentheses-mode)
|
|
(setq hl-paren-colors '("Springgreen3"
|
|
"IndianRed1"
|
|
"IndianRed3"
|
|
"IndianRed4")))
|
|
:config
|
|
(spacemacs|hide-lighter highlight-parentheses-mode)
|
|
(set-face-attribute 'hl-paren-face nil :weight 'ultra-bold)))
|
|
|
|
(defun spacemacs-editing-visual/init-hl-anything ()
|
|
(use-package hl-anything
|
|
:init
|
|
(progn
|
|
(hl-highlight-mode)
|
|
(setq-default hl-highlight-save-file
|
|
(concat spacemacs-cache-directory ".hl-save"))
|
|
(spacemacs/set-leader-keys
|
|
"hc" 'hl-unhighlight-all-local
|
|
"hC" 'hl-unhighlight-all-global
|
|
"hh" 'hl-highlight-thingatpt-local
|
|
"hH" 'hl-highlight-thingatpt-global
|
|
"hn" 'hl-find-next-thing
|
|
"hN" 'hl-find-prev-thing
|
|
"hr" 'hl-restore-highlights
|
|
"hs" 'hl-save-highlights))
|
|
:config (spacemacs|hide-lighter hl-highlight-mode)))
|
|
|
|
(defun spacemacs-editing-visual/init-indent-guide ()
|
|
(use-package indent-guide
|
|
:defer t
|
|
:init
|
|
(progn
|
|
(setq indent-guide-delay 0.3)
|
|
(spacemacs|add-toggle indent-guide
|
|
:mode indent-guide-mode
|
|
:documentation
|
|
"Highlight indentation level at point. (alternative to highlight-indentation)."
|
|
:evil-leader "ti")
|
|
(spacemacs|add-toggle indent-guide-globally
|
|
:mode indent-guide-global-mode
|
|
:documentation
|
|
"Highlight indentation level at point globally. (alternative to highlight-indentation)."
|
|
:evil-leader "t TAB"))
|
|
:config
|
|
(spacemacs|diminish indent-guide-mode " ⓘ" " i")))
|
|
|
|
(defun spacemacs-editing-visual/init-rainbow-delimiters ()
|
|
(use-package rainbow-delimiters
|
|
:defer t
|
|
:init
|
|
(progn
|
|
(spacemacs/set-leader-keys "tCd" 'rainbow-delimiters-mode)
|
|
(when (member dotspacemacs-highlight-delimiters '(any all))
|
|
(spacemacs/add-to-hooks 'rainbow-delimiters-mode '(prog-mode-hook))))))
|
|
|
|
(defun spacemacs-editing-visual/init-volatile-highlights ()
|
|
(use-package volatile-highlights
|
|
:config
|
|
(progn
|
|
;; additional extensions
|
|
;; evil
|
|
(vhl/define-extension 'evil
|
|
'evil-move
|
|
'evil-paste-after
|
|
'evil-paste-before
|
|
'evil-paste-pop)
|
|
(with-eval-after-load 'evil
|
|
(vhl/install-extension 'evil)
|
|
(vhl/load-extension 'evil))
|
|
;; undo-tree
|
|
(vhl/define-extension 'undo-tree
|
|
'undo-tree-move
|
|
'undo-tree-yank)
|
|
(with-eval-after-load 'undo-tree
|
|
(vhl/install-extension 'undo-tree)
|
|
(vhl/load-extension 'undo-tree))
|
|
(volatile-highlights-mode)
|
|
(spacemacs|hide-lighter volatile-highlights-mode))))
|