0f65b000da
problem: The following error messages are shown. When trying to move, select or swap the current buffer, to a window nr greater than the total number of open windows. For example: With only one window open. `SPC b 2` >ad-Advice-select-window: Wrong type argument: window-live-p, nil In the Buffer Transient State (`SPC b .`): - `C-2` (`spacemacs/buffer-transient-state/winum-select-window-2`) >Wrong type argument: window-valid-p, #<window 12> - `2` (`spacemacs/buffer-transient-state/move-buffer-window-no-follow-2`) >Wrong type argument: window-live-p, #<window 14> - `M-2` (`spacemacs/buffer-transient-state/swap-buffer-window-no-follow-2`) >Wrong type argument: stringp, nil Solution: Show a descriptive message, if the target window nr is greater than the number of open windows. And ignore the LV buffer (hydra).
458 lines
16 KiB
EmacsLisp
458 lines
16 KiB
EmacsLisp
;;; packages.el --- Spacemacs Navigation Layer packages File
|
|
;;
|
|
;; Copyright (c) 2012-2020 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-navigation-packages
|
|
'(ace-link
|
|
ace-window
|
|
auto-highlight-symbol
|
|
centered-cursor-mode
|
|
(compile :location built-in)
|
|
(doc-view :location built-in)
|
|
(view :location built-in)
|
|
golden-ratio
|
|
(grep :location built-in)
|
|
(info+ :location local)
|
|
open-junk-file
|
|
paradox
|
|
restart-emacs
|
|
(smooth-scrolling :location built-in)
|
|
symbol-overlay
|
|
winum))
|
|
|
|
(defun spacemacs-navigation/init-ace-link ()
|
|
(use-package ace-link
|
|
:commands spacemacs/ace-buffer-links
|
|
:init
|
|
(progn
|
|
(define-key spacemacs-buffer-mode-map "o" 'spacemacs/ace-buffer-links)
|
|
(with-eval-after-load 'info
|
|
(define-key Info-mode-map "o" 'ace-link-info))
|
|
(with-eval-after-load 'help-mode
|
|
(define-key help-mode-map "o" 'ace-link-help))
|
|
(with-eval-after-load 'eww
|
|
(define-key eww-link-keymap "o" 'ace-link-eww)
|
|
(define-key eww-mode-map "o" 'ace-link-eww)))))
|
|
|
|
(defun spacemacs-navigation/init-ace-window ()
|
|
(use-package ace-window
|
|
:defer t
|
|
:init
|
|
(progn
|
|
(spacemacs/set-leader-keys
|
|
"bD" 'spacemacs/ace-kill-this-buffer
|
|
;; FIXME: Needs new binding.
|
|
;; "wC" 'spacemacs/ace-center-window
|
|
"wD" 'spacemacs/ace-delete-window
|
|
"wM" 'ace-swap-window
|
|
"wW" 'ace-window)
|
|
;; set ace-window keys to home-row
|
|
(setq aw-keys '(?a ?s ?d ?f ?g ?h ?j ?k ?l)))))
|
|
|
|
(defun spacemacs-navigation/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_] prev [_d_/_D_] next/prev def [_r_] range [_R_] reset [_z_] recenter
|
|
[_e_] iedit")
|
|
|
|
;; 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)
|
|
|
|
(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))
|
|
|
|
(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))))))
|
|
|
|
;; transient state
|
|
(spacemacs|define-transient-state symbol-highlight
|
|
:title "Symbol Highlight Transient State"
|
|
:hint-is-doc t
|
|
:dynamic-hint (spacemacs//symbol-highlight-ts-doc)
|
|
:before-exit (spacemacs//ahs-ts-on-exit)
|
|
:bindings
|
|
("d" ahs-forward-definition)
|
|
("D" ahs-backward-definition)
|
|
("e" spacemacs/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)
|
|
("z" (progn (recenter-top-bottom)
|
|
(spacemacs/symbol-highlight)))
|
|
("q" nil :exit t)))))
|
|
|
|
(defun spacemacs-navigation/init-centered-cursor-mode ()
|
|
(use-package centered-cursor-mode
|
|
:commands (centered-cursor-mode
|
|
global-centered-cursor-mode)
|
|
:init
|
|
(progn
|
|
(spacemacs|add-toggle centered-point
|
|
:mode centered-cursor-mode
|
|
:documentation
|
|
"Keep point at the center of the window."
|
|
:evil-leader "t-")
|
|
(spacemacs|add-toggle centered-point-globally
|
|
:mode global-centered-cursor-mode
|
|
:documentation
|
|
"Keep point at the center of the window globally."
|
|
:evil-leader "t C--"))
|
|
:config
|
|
(progn
|
|
(setq ccm-recenter-at-end-of-file t
|
|
ccm-ignored-commands '(mouse-drag-region
|
|
mouse-set-point
|
|
mouse-set-region
|
|
widget-button-click
|
|
scroll-bar-toolkit-scroll
|
|
evil-mouse-drag-region))
|
|
(spacemacs|diminish centered-cursor-mode " ⊝" " -"))))
|
|
|
|
(defun spacemacs-navigation/init-compile ()
|
|
(use-package compile
|
|
:defer t
|
|
:config
|
|
(define-key compilation-mode-map "h" nil)))
|
|
|
|
(defun spacemacs-navigation/init-doc-view ()
|
|
(use-package doc-view
|
|
:defer t
|
|
:init
|
|
(evilified-state-evilify doc-view-mode doc-view-mode-map
|
|
"/" 'spacemacs/doc-view-search-new-query
|
|
"?" 'spacemacs/doc-view-search-new-query-backward
|
|
"gg" 'doc-view-first-page
|
|
"G" 'spacemacs/doc-view-goto-page
|
|
"gt" 'doc-view-goto-page
|
|
"h" 'doc-view-previous-page
|
|
"j" 'doc-view-next-line-or-next-page
|
|
"k" 'doc-view-previous-line-or-previous-page
|
|
"K" 'doc-view-kill-proc-and-buffer
|
|
"l" 'doc-view-next-page
|
|
"n" 'doc-view-search
|
|
"N" 'doc-view-search-backward
|
|
(kbd "C-d") 'doc-view-scroll-up-or-next-page
|
|
(kbd "C-k") 'doc-view-kill-proc
|
|
(kbd "C-u") 'doc-view-scroll-down-or-previous-page)
|
|
:config
|
|
(progn
|
|
;; fixed a weird issue where toggling display does not
|
|
;; swtich to text mode
|
|
(defadvice doc-view-toggle-display
|
|
(around spacemacs/doc-view-toggle-display activate)
|
|
(if (eq major-mode 'doc-view-mode)
|
|
(progn
|
|
ad-do-it
|
|
(text-mode)
|
|
(doc-view-minor-mode))
|
|
ad-do-it)))))
|
|
|
|
(defun spacemacs-navigation/init-view ()
|
|
(use-package view
|
|
:defer t
|
|
:init
|
|
;; Add binding via mode symbole to have a local binding set
|
|
;; after loading view mode. If not done this way the new bindings
|
|
;; will only be affective after the user pressing `q' once.
|
|
(evil-define-key 'normal 'view-mode
|
|
"q" #'View-quit)))
|
|
|
|
(defun spacemacs-navigation/init-golden-ratio ()
|
|
(use-package golden-ratio
|
|
:defer t
|
|
:init
|
|
(progn
|
|
(spacemacs/transient-state-register-add-bindings 'window
|
|
'(("g" spacemacs/toggle-golden-ratio)))
|
|
(spacemacs|add-toggle golden-ratio
|
|
:status golden-ratio-mode
|
|
:on (golden-ratio-mode) (golden-ratio)
|
|
:off (golden-ratio-mode -1) (balance-windows)
|
|
:documentation "Resize the focused window using the golden ratio."
|
|
:evil-leader "tg"))
|
|
:config
|
|
(progn
|
|
;; golden-ratio-exclude-modes
|
|
(dolist (m '("bs-mode"
|
|
"calc-mode"
|
|
"ediff-mode"
|
|
"dired-mode"
|
|
"gud-mode"
|
|
"gdb-locals-mode"
|
|
"gdb-registers-mode"
|
|
"gdb-breakpoints-mode"
|
|
"gdb-threads-mode"
|
|
"gdb-frames-mode"
|
|
"gdb-inferior-io-mode"
|
|
"gdb-disassembly-mode"
|
|
"gdb-memory-mode"
|
|
"ranger-mode"
|
|
"speedbar-mode"))
|
|
|
|
(add-to-list 'golden-ratio-exclude-modes m))
|
|
|
|
(add-to-list 'golden-ratio-exclude-buffer-regexp "^\\*[hH]elm.*")
|
|
|
|
;; golden-ratio-extra-commands
|
|
(dolist (f '(ace-window
|
|
ace-delete-window
|
|
ace-select-window
|
|
ace-swap-window
|
|
ace-maximize-window
|
|
avy-pop-mark
|
|
buf-move-left
|
|
buf-move-right
|
|
buf-move-up
|
|
buf-move-down
|
|
evil-avy-goto-word-or-subword-1
|
|
evil-avy-goto-line
|
|
evil-window-delete
|
|
evil-window-split
|
|
evil-window-vsplit
|
|
evil-window-left
|
|
evil-window-right
|
|
evil-window-up
|
|
evil-window-down
|
|
evil-window-bottom-right
|
|
evil-window-top-left
|
|
evil-window-mru
|
|
evil-window-next
|
|
evil-window-prev
|
|
evil-window-new
|
|
evil-window-vnew
|
|
evil-window-rotate-upwards
|
|
evil-window-rotate-downwards
|
|
evil-window-move-very-top
|
|
evil-window-move-far-left
|
|
evil-window-move-far-right
|
|
evil-window-move-very-bottom
|
|
next-multiframe-window
|
|
previous-multiframe-window
|
|
quit-window
|
|
winum-select-window-0-or-10
|
|
winum-select-window-1
|
|
winum-select-window-2
|
|
winum-select-window-3
|
|
winum-select-window-4
|
|
winum-select-window-5
|
|
winum-select-window-6
|
|
winum-select-window-7
|
|
winum-select-window-8
|
|
winum-select-window-9
|
|
windmove-left
|
|
windmove-right
|
|
windmove-up
|
|
windmove-down))
|
|
(add-to-list 'golden-ratio-extra-commands f))
|
|
|
|
;; golden-ratio-exclude-buffer-names
|
|
(dolist (n '(" *NeoTree*"
|
|
"*LV*"
|
|
" *which-key*"))
|
|
(add-to-list 'golden-ratio-exclude-buffer-names n))
|
|
|
|
(add-to-list 'golden-ratio-inhibit-functions
|
|
'spacemacs/no-golden-ratio-guide-key)
|
|
|
|
(spacemacs|diminish golden-ratio-mode " ⓖ" " g"))))
|
|
|
|
(defun spacemacs-navigation/init-grep ()
|
|
(use-package grep
|
|
:defer t
|
|
:config
|
|
(define-key grep-mode-map "h" nil)))
|
|
|
|
(defun spacemacs-navigation/init-info+ ()
|
|
(use-package info+
|
|
:defer t
|
|
:init
|
|
(progn
|
|
(setq Info-fontify-angle-bracketed-flag nil)
|
|
(add-hook 'Info-mode-hook (lambda () (require 'info+))))))
|
|
|
|
(defun spacemacs-navigation/init-open-junk-file ()
|
|
(use-package open-junk-file
|
|
:defer t
|
|
:commands (open-junk-file)
|
|
:init
|
|
(progn
|
|
(setq open-junk-file-format (concat spacemacs-cache-directory "junk/%Y/%m/%d-%H%M%S."))
|
|
(spacemacs/set-leader-keys "fJ" 'spacemacs/open-junk-file)
|
|
;; function to run open-junk-file hooks is buggy when opening a large file
|
|
;; and Emacs warns about it.
|
|
;; Since this is not really useful to add hooks to open-junk-files lets remove
|
|
;; it
|
|
(remove-hook 'find-file-hook 'find-file-hook--open-junk-file))))
|
|
|
|
(defun spacemacs-navigation/init-paradox ()
|
|
(use-package paradox
|
|
:commands paradox-list-packages
|
|
:init
|
|
(progn
|
|
(setq paradox-execute-asynchronously nil)
|
|
(evilified-state-evilify paradox-menu-mode paradox-menu-mode-map
|
|
"H" 'paradox-menu-quick-help
|
|
"J" 'paradox-next-describe
|
|
"K" 'paradox-previous-describe
|
|
"L" 'paradox-menu-view-commit-list
|
|
"o" 'paradox-menu-visit-homepage)
|
|
(spacemacs/set-leader-keys
|
|
"ak" 'spacemacs/paradox-list-packages))))
|
|
|
|
(defun spacemacs-navigation/init-restart-emacs ()
|
|
(use-package restart-emacs
|
|
:defer t
|
|
:init
|
|
(spacemacs/set-leader-keys
|
|
"qd" 'spacemacs/restart-emacs-debug-init
|
|
"qD" 'spacemacs/restart-stock-emacs-with-packages
|
|
"qr" 'spacemacs/restart-emacs-resume-layouts
|
|
"qR" 'spacemacs/restart-emacs
|
|
"qt" 'spacemacs/restart-emacs-timed-requires
|
|
"qT" 'spacemacs/restart-emacs-adv-timers)))
|
|
|
|
(defun spacemacs-navigation/init-smooth-scrolling ()
|
|
(setq scroll-preserve-screen-position t
|
|
scroll-margin 0
|
|
scroll-conservatively (if dotspacemacs-smooth-scrolling 101 0))
|
|
(spacemacs|add-toggle smooth-scrolling
|
|
:status (= 101 scroll-conservatively)
|
|
:on (spacemacs/enable-smooth-scrolling)
|
|
:off (spacemacs/disable-smooth-scrolling)
|
|
: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
|
|
(progn
|
|
(setq winum-auto-assign-0-to-minibuffer nil
|
|
winum-auto-setup-mode-line nil
|
|
winum-ignored-buffers '(" *LV*" " *which-key*"))
|
|
(spacemacs/set-leader-keys
|
|
"`" 'winum-select-window-by-number
|
|
"²" 'winum-select-window-by-number
|
|
"0" 'winum-select-window-0-or-10
|
|
"1" 'winum-select-window-1
|
|
"2" 'winum-select-window-2
|
|
"3" 'winum-select-window-3
|
|
"4" 'winum-select-window-4
|
|
"5" 'winum-select-window-5
|
|
"6" 'winum-select-window-6
|
|
"7" 'winum-select-window-7
|
|
"8" 'winum-select-window-8
|
|
"9" 'winum-select-window-9)
|
|
(define-key winum-keymap (kbd "M-0") 'winum-select-window-0-or-10)
|
|
(define-key winum-keymap (kbd "M-1") 'winum-select-window-1)
|
|
(define-key winum-keymap (kbd "M-2") 'winum-select-window-2)
|
|
(define-key winum-keymap (kbd "M-3") 'winum-select-window-3)
|
|
(define-key winum-keymap (kbd "M-4") 'winum-select-window-4)
|
|
(define-key winum-keymap (kbd "M-5") 'winum-select-window-5)
|
|
(define-key winum-keymap (kbd "M-6") 'winum-select-window-6)
|
|
(define-key winum-keymap (kbd "M-7") 'winum-select-window-7)
|
|
(define-key winum-keymap (kbd "M-8") 'winum-select-window-8)
|
|
(define-key winum-keymap (kbd "M-9") 'winum-select-window-9)
|
|
(winum-mode))))
|