From 2e6817ef341dc683b14e065271b0639e857cdba3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BA=B7=E5=B0=8F=E5=B9=BF?= Date: Thu, 29 Nov 2018 06:29:47 -0500 Subject: [PATCH] Add symbol-overlay package to spacemacs/navigation layer Defines a transient state for symbol-overlay, and bind it to ~SPC s o~ and ~SPC s O~. Updates: * update due to the signature change of `symbol-overlay-get-list`. * align the docstring using `^^` and add `quit` button. --- CHANGELOG.develop | 23 ++++++++++ .../+spacemacs/spacemacs-navigation/funcs.el | 33 ++++++++++++++ .../spacemacs-navigation/packages.el | 43 +++++++++++++++++++ 3 files changed, 99 insertions(+) diff --git a/CHANGELOG.develop b/CHANGELOG.develop index 3d064959c..6bb0b3732 100644 --- a/CHANGELOG.develop +++ b/CHANGELOG.develop @@ -589,6 +589,8 @@ Other: - =help-fns+= - =font-lock+= - Remove package =adaptive-wrap= + - Added =symbol-overlay= to the =spacemacs-navigation= layer + (thanks to kenkangxgwe) - Key bindings: - New evil text objects =«=, =「=, =‘= and =“=. - Improved buffer transient state with extra bindings and new commands: @@ -746,6 +748,27 @@ Other: (thanks to Rich Alesi) - Improved =which-key= replacement regular expressions (thanks to duianto) - Added ~SPC o~ which-key prefix name: =user bindings= (thanks to duianto) + - Added =symbol-overlay= key bindings (thanks to kenkangxgwe): + - ~SPC s o~ calls =spacemacs/symbol-overlay= + - ~SPC s O~ calls =symbol-overlay-remove-all= + - New symbol overlay transient state, ~SPC s o~ on a symbol: + - ~b~ calls =symbol-overlay-switch-backward= + - ~c~ calls =symbol-overlay-save-symbol= + - ~d~ calls =symbol-overlay-jump-to-definition= + - ~e~ calls =symbol-overlay-echo-mark= + - ~f~ calls =symbol-overlay-switch-forward= + - ~n~ calls =symbol-overlay-jump-next= + - ~N~ calls =symbol-overlay-jump-prev= + - ~o~ calls =symbol-overlay-put= + - ~O~ calls =symbol-overlay-remove-all= + - ~p~ calls =symbol-overlay-jump-prev= + - ~r~ calls =symbol-overlay-query-replace= + - ~R~ calls =symbol-overlay-rename= + - ~s~ calls =symbol-overlay-isearch-literally= + - ~t~ calls =symbol-overlay-toggle-in-scope= + - ~z~ calls =recenter-top-bottom= + - ~q~ exits the transient state + (thanks to kenkangxgwe) - Improvements: - Rewrote window layout functions for ~SPC w 1~, ~SPC w 2~, ~SPC w 3~, and ~SPC w 4~ (thanks to Codruț Constantin Gușoi): diff --git a/layers/+spacemacs/spacemacs-navigation/funcs.el b/layers/+spacemacs/spacemacs-navigation/funcs.el index 808fead1f..71a37ce30 100644 --- a/layers/+spacemacs/spacemacs-navigation/funcs.el +++ b/layers/+spacemacs/spacemacs-navigation/funcs.el @@ -197,6 +197,39 @@ If the universal prefix argument is used then kill also the window." (format spacemacs--symbol-highlight-transient-state-doc (spacemacs//symbol-highlight-doc)))) + +;; symbol overlay + +(defun spacemacs/symbol-overlay () + "Start symbol-overlay-transient-state." + (interactive) + (symbol-overlay-put) + (spacemacs/symbol-overlay-transient-state/body)) + +(defun spacemacs//symbol-overlay-doc () + (let* ((symbol-at-point (symbol-overlay-get-symbol)) + (keyword (symbol-overlay-assoc symbol-at-point)) + (symbol (car keyword)) + (before (symbol-overlay-get-list -1 symbol)) + (after (symbol-overlay-get-list 1 symbol)) + (count (length before)) + (scope (format "%s" + (if (cadr keyword) + "Scope" + "Buffer"))) + (color (cddr keyword)) + (x/y (format "[%s/%s]" (+ count 1) (+ count (length after))))) + (concat + (propertize (format " %s " scope) 'face color)) + (propertize (format " %s " x/y) 'face + `(:foreground "#ffffff" :background "#000000")))) + +(defun spacemacs//symbol-overlay-ts-doc () + (spacemacs//transient-state-make-doc + 'symbol-overlay + (format spacemacs--symbol-overlay-transient-state-doc + (spacemacs//symbol-overlay-doc)))) + ;; golden ratio diff --git a/layers/+spacemacs/spacemacs-navigation/packages.el b/layers/+spacemacs/spacemacs-navigation/packages.el index 87cd8cb0a..b51841d69 100644 --- a/layers/+spacemacs/spacemacs-navigation/packages.el +++ b/layers/+spacemacs/spacemacs-navigation/packages.el @@ -23,6 +23,7 @@ paradox restart-emacs (smooth-scrolling :location built-in) + symbol-overlay winum)) (defun spacemacs-navigation/init-ace-link () @@ -370,6 +371,48 @@ :documentation "Smooth scrolling." :evil-leader "tv")) +(defun spacemacs-navigation/init-symbol-overlay () + (use-package symbol-overlay + :init + (progn + (setq spacemacs--symbol-overlay-transient-state-doc " +%s + [_n_] next [_N_/_p_] prev [_d_] def [_f_/_b_] switch [_t_] scope + [_e_] echo [_o_]^^ unoverlay [_O_] unoverlay all [_c_]^^ copy [_z_] center + [_s_] search [_r_]^^ replace [_R_] rename ^^^^ [_q_] quit") + + ;; since we are creating our own maps, + ;; prevent the default keymap from getting created + (setq symbol-overlay-map (make-sparse-keymap))) + :config + (progn + (spacemacs/set-leader-keys + "so" 'spacemacs/symbol-overlay + "sO" 'symbol-overlay-remove-all) + + ;; transient state + (spacemacs|define-transient-state symbol-overlay + :title "Symbol Overlay Transient State" + :hint-is-doc t + :dynamic-hint (spacemacs//symbol-overlay-ts-doc) + :bindings + ("b" symbol-overlay-switch-backward) + ("c" symbol-overlay-save-symbol) + ("d" symbol-overlay-jump-to-definition) + ("e" symbol-overlay-echo-mark) + ("f" symbol-overlay-switch-forward) + ("n" symbol-overlay-jump-next) + ("N" symbol-overlay-jump-prev) + ("o" symbol-overlay-put) + ("O" symbol-overlay-remove-all) + ("p" symbol-overlay-jump-prev) + ("r" symbol-overlay-query-replace) + ("R" symbol-overlay-rename) + ("s" symbol-overlay-isearch-literally) + ("t" symbol-overlay-toggle-in-scope) + ("z" recenter-top-bottom) + ("q" nil :exit t))))) + (defun spacemacs-navigation/init-winum () (use-package winum :config