e0b751bee3
Replace push with add-to-list in layer init functions and related code. Modify spacemacs|add-toggle to check for and update an existing toggle in spacemacs-toggles and only create a new toggle if none already existed. Replace a conditional push onto erc-packages with use of :toggle. When initializing which-key, set which-key-replacement-alist to its default or customized setting before adding all the Spacemacs replacements. We want to keep the stock replacements but avoid adding duplicates of the Spacemacs replacements. Replace the emacs-lisp-mode-hook lambda with a named function to avoid adding duplicate hooks (which can add duplicate definitions of the evil-surround pair).
549 lines
22 KiB
EmacsLisp
549 lines
22 KiB
EmacsLisp
;;; packages.el --- Mandatory Bootstrap Layer packages File
|
||
;;
|
||
;; Copyright (c) 2012-2018 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-bootstrap-packages
|
||
'(
|
||
;; bootstrap packages,
|
||
;; `use-package' cannot be used for bootstrap packages configuration
|
||
(async :step bootstrap)
|
||
(bind-map :step bootstrap)
|
||
(bind-key :step bootstrap)
|
||
(diminish :step bootstrap)
|
||
(evil :step bootstrap)
|
||
(exec-path-from-shell :step bootstrap
|
||
:toggle (or (spacemacs/system-is-mac)
|
||
(spacemacs/system-is-linux)
|
||
(eq window-system 'x)))
|
||
(hydra :step bootstrap)
|
||
(use-package :step bootstrap)
|
||
(which-key :step bootstrap)
|
||
;; pre packages, initialized aftert the bootstrap packages
|
||
;; these packages can use use-package
|
||
(evil-evilified-state :location local :step pre :protected t)
|
||
(pcre2el :step pre)
|
||
(holy-mode :location local :step pre)
|
||
(hybrid-mode :location local :step pre)
|
||
(spacemacs-theme :location built-in)
|
||
))
|
||
|
||
|
||
;; bootstrap packages
|
||
|
||
(defun spacemacs-bootstrap/init-async ())
|
||
|
||
(defun spacemacs-bootstrap/init-bind-key ())
|
||
|
||
(defun spacemacs-bootstrap/init-diminish ()
|
||
(when (not (configuration-layer/package-used-p 'spaceline))
|
||
(add-hook 'after-load-functions 'spacemacs/diminish-hook)))
|
||
|
||
(defun spacemacs-bootstrap/init-bind-map ()
|
||
(require 'bind-map)
|
||
(bind-map spacemacs-default-map
|
||
:prefix-cmd spacemacs-cmds
|
||
:keys (dotspacemacs-emacs-leader-key)
|
||
:evil-keys (dotspacemacs-leader-key)
|
||
:override-minor-modes t
|
||
:override-mode-name spacemacs-leader-override-mode))
|
||
|
||
(defun spacemacs-bootstrap/init-evil ()
|
||
;; ensure that the search module is set at startup
|
||
;; must be called before evil is required to really take effect.
|
||
(spacemacs/set-evil-search-module dotspacemacs-editing-style)
|
||
(add-hook 'spacemacs-editing-style-hook 'spacemacs/set-evil-search-module)
|
||
|
||
;; evil-mode is mandatory for Spacemacs to work properly
|
||
;; evil must be require explicitly, the autoload seems to not
|
||
;; work properly sometimes.
|
||
(require 'evil)
|
||
(evil-mode 1)
|
||
|
||
;; Use evil as a default jump handler
|
||
(add-to-list 'spacemacs-default-jump-handlers 'evil-goto-definition)
|
||
|
||
(require 'cl)
|
||
;; State cursors
|
||
(cl-loop for (state color shape) in spacemacs-evil-cursors
|
||
do (spacemacs/add-evil-cursor state color shape))
|
||
(add-hook 'spacemacs-post-theme-change-hook 'spacemacs/set-state-faces)
|
||
|
||
;; evil ex-command
|
||
(define-key evil-normal-state-map (kbd dotspacemacs-ex-command-key) 'evil-ex)
|
||
(define-key evil-visual-state-map (kbd dotspacemacs-ex-command-key) 'evil-ex)
|
||
(define-key evil-motion-state-map (kbd dotspacemacs-ex-command-key) 'evil-ex)
|
||
(setq evil-ex-substitute-global dotspacemacs-ex-substitute-global)
|
||
|
||
;; evil-want-Y-yank-to-eol must be set via customize to have an effect
|
||
(customize-set-variable 'evil-want-Y-yank-to-eol dotspacemacs-remap-Y-to-y$)
|
||
|
||
;; bind evil-jump-forward for GUI only.
|
||
(define-key evil-motion-state-map [C-i] 'evil-jump-forward)
|
||
|
||
;; Make the current definition and/or comment visible.
|
||
(define-key evil-normal-state-map "zf" 'reposition-window)
|
||
;; toggle maximize buffer
|
||
(define-key evil-window-map (kbd "o") 'spacemacs/toggle-maximize-buffer)
|
||
(define-key evil-window-map (kbd "C-o") 'spacemacs/toggle-maximize-buffer)
|
||
;; make cursor keys work
|
||
(define-key evil-window-map (kbd "<left>") 'evil-window-left)
|
||
(define-key evil-window-map (kbd "<right>") 'evil-window-right)
|
||
(define-key evil-window-map (kbd "<up>") 'evil-window-up)
|
||
(define-key evil-window-map (kbd "<down>") 'evil-window-down)
|
||
(spacemacs/set-leader-keys "re" 'evil-show-registers)
|
||
;; motions keys for help buffers
|
||
(evil-define-key 'motion help-mode-map (kbd "<escape>") 'quit-window)
|
||
(evil-define-key 'motion help-mode-map (kbd "<tab>") 'forward-button)
|
||
(evil-define-key 'motion help-mode-map (kbd "S-<tab>") 'backward-button)
|
||
(evil-define-key 'motion help-mode-map (kbd "]") 'help-go-forward)
|
||
(evil-define-key 'motion help-mode-map (kbd "gf") 'help-go-forward)
|
||
(evil-define-key 'motion help-mode-map (kbd "[") 'help-go-back)
|
||
(evil-define-key 'motion help-mode-map (kbd "gb") 'help-go-back)
|
||
(evil-define-key 'motion help-mode-map (kbd "gh") 'help-follow-symbol)
|
||
|
||
;; It's better that the default value is too small than too big
|
||
(setq-default evil-shift-width 2)
|
||
;; After major mode has changed, reset evil-shift-width
|
||
(add-hook 'after-change-major-mode-hook 'spacemacs//set-evil-shift-width 'append)
|
||
|
||
;; Keep the region active when shifting
|
||
(when dotspacemacs-retain-visual-state-on-shift
|
||
(evil-map visual "<" "<gv")
|
||
(evil-map visual ">" ">gv"))
|
||
|
||
;; move selection up and down
|
||
(when dotspacemacs-visual-line-move-text
|
||
(define-key evil-visual-state-map "J" (concat ":m '>+1" (kbd "RET") "gv=gv"))
|
||
(define-key evil-visual-state-map "K" (concat ":m '<-2" (kbd "RET") "gv=gv")))
|
||
|
||
(evil-ex-define-cmd "enew" 'spacemacs/new-empty-buffer)
|
||
|
||
(define-key evil-normal-state-map (kbd "K") 'spacemacs/evil-smart-doc-lookup)
|
||
(define-key evil-normal-state-map (kbd "gd") 'spacemacs/jump-to-definition)
|
||
(define-key evil-normal-state-map (kbd "gD") 'spacemacs/jump-to-definition-other-window)
|
||
|
||
;; scrolling transient state
|
||
(spacemacs|define-transient-state scroll
|
||
:title "Scrolling Transient State"
|
||
:doc "
|
||
Buffer^^^^ Full page^^^^ Half page^^^^ Line/column^^^^
|
||
──────^^^^───────────── ─────────^^^^──── ─────────^^^^─────── ───────────^^^^─────
|
||
[_<_/_>_] beginning/end [_f_/_b_] down/up [_J_/_K_] down/up [_j_/_k_] down/up
|
||
^ ^ ^ ^ ^ ^ ^ ^ [_H_/_L_] left/right [_h_/_l_] left/right
|
||
^ ^ ^ ^ ^ ^ ^ ^ [_d_/_u_] down/up ^ ^ ^ ^"
|
||
:bindings
|
||
;; buffer
|
||
("<" evil-goto-first-line)
|
||
(">" evil-goto-line)
|
||
;; full page
|
||
("f" evil-scroll-page-down)
|
||
("b" evil-scroll-page-up)
|
||
;; half page
|
||
("d" evil-scroll-down)
|
||
("u" evil-scroll-up)
|
||
("J" evil-scroll-down)
|
||
("K" evil-scroll-up)
|
||
("H" evil-scroll-left)
|
||
("L" evil-scroll-right)
|
||
;; lines and columns
|
||
("j" evil-scroll-line-down)
|
||
("k" evil-scroll-line-up)
|
||
("h" evil-scroll-column-left)
|
||
("l" evil-scroll-column-right))
|
||
(spacemacs/set-leader-keys
|
||
;; buffer
|
||
"N<" 'spacemacs/scroll-transient-state/evil-goto-first-line
|
||
"N>" 'spacemacs/scroll-transient-state/evil-goto-line
|
||
;; full page
|
||
"Nf" 'spacemacs/scroll-transient-state/evil-scroll-page-down
|
||
"Nb" 'spacemacs/scroll-transient-state/evil-scroll-page-up
|
||
;; half page
|
||
"Nd" 'spacemacs/scroll-transient-state/evil-scroll-down
|
||
"Nu" 'spacemacs/scroll-transient-state/evil-scroll-up
|
||
"NJ" 'spacemacs/scroll-transient-state/evil-scroll-down
|
||
"NK" 'spacemacs/scroll-transient-state/evil-scroll-up
|
||
"NH" 'spacemacs/scroll-transient-state/evil-scroll-left
|
||
"NL" 'spacemacs/scroll-transient-state/evil-scroll-right
|
||
;; lines and columns
|
||
"Nj" 'spacemacs/scroll-transient-state/evil-scroll-line-down
|
||
"Nk" 'spacemacs/scroll-transient-state/evil-scroll-line-up
|
||
"Nh" 'spacemacs/scroll-transient-state/evil-scroll-column-left
|
||
"Nl" 'spacemacs/scroll-transient-state/evil-scroll-column-right)
|
||
|
||
;; pasting transient-state
|
||
(evil-define-command spacemacs//transient-state-0 ()
|
||
:keep-visual t
|
||
:repeat nil
|
||
(interactive)
|
||
(if current-prefix-arg
|
||
(progn
|
||
(setq this-command #'digit-argument)
|
||
(call-interactively #'digit-argument))
|
||
(setq this-command #'evil-beginning-of-line
|
||
hydra-deactivate t)
|
||
(call-interactively #'evil-beginning-of-line)))
|
||
|
||
(spacemacs|define-transient-state paste
|
||
:title "Pasting Transient State"
|
||
:doc "\n[%s(length kill-ring-yank-pointer)/%s(length kill-ring)] \
|
||
[_C-j_/_C-k_] cycles through yanked text, [_p_/_P_] pastes the same text \
|
||
above or below. Anything else exits."
|
||
:bindings
|
||
("C-j" evil-paste-pop)
|
||
("C-k" evil-paste-pop-next)
|
||
("p" evil-paste-after)
|
||
("P" evil-paste-before)
|
||
("0" spacemacs//transient-state-0))
|
||
|
||
(when dotspacemacs-enable-paste-transient-state
|
||
(define-key evil-normal-state-map
|
||
"p" 'spacemacs/paste-transient-state/evil-paste-after)
|
||
(define-key evil-normal-state-map
|
||
"P" 'spacemacs/paste-transient-state/evil-paste-before))
|
||
;; fold transient state
|
||
(when (eq 'evil dotspacemacs-folding-method)
|
||
(spacemacs|define-transient-state fold
|
||
:title "Code Fold Transient State"
|
||
:doc "
|
||
Close^^ Open^^ Toggle^^ Other^^
|
||
───────^^────── ─────^^─────────── ─────^^──────────── ─────^^───
|
||
[_c_] at point [_o_] at point [_a_] around point [_q_] quit
|
||
^^ [_O_] recursively ^^
|
||
[_m_] all [_r_] all"
|
||
:foreign-keys run
|
||
:bindings
|
||
("a" evil-toggle-fold)
|
||
("c" evil-close-fold)
|
||
("o" evil-open-fold)
|
||
("O" evil-open-fold-rec)
|
||
("r" evil-open-folds)
|
||
("m" evil-close-folds)
|
||
("q" nil :exit t)
|
||
("C-g" nil :exit t)
|
||
("<SPC>" nil :exit t)))
|
||
(spacemacs/set-leader-keys "z." 'spacemacs/fold-transient-state/body)
|
||
|
||
;; define text objects
|
||
(spacemacs|define-text-object "$" "dollar" "$" "$")
|
||
(spacemacs|define-text-object "*" "star" "*" "*")
|
||
(spacemacs|define-text-object "8" "block-star" "/*" "*/")
|
||
(spacemacs|define-text-object "|" "bar" "|" "|")
|
||
(spacemacs|define-text-object "%" "percent" "%" "%")
|
||
(spacemacs|define-text-object "/" "slash" "/" "/")
|
||
(spacemacs|define-text-object "_" "underscore" "_" "_")
|
||
(spacemacs|define-text-object "-" "hyphen" "-" "-")
|
||
(spacemacs|define-text-object "~" "tilde" "~" "~")
|
||
(spacemacs|define-text-object "=" "equal" "=" "=")
|
||
(spacemacs|define-text-object "«" "double-angle-bracket" "«" "»")
|
||
(spacemacs|define-text-object "「" "corner-bracket" "「" "」")
|
||
(spacemacs|define-text-object "‘" "single-quotation-mark" "‘" "’")
|
||
(spacemacs|define-text-object "“" "double-quotation-mark" "“" "”")
|
||
(evil-define-text-object evil-pasted (count &rest args)
|
||
(list (save-excursion (evil-goto-mark ?\[) (point))
|
||
(save-excursion (evil-goto-mark ?\]) (1+ (point)))))
|
||
(define-key evil-inner-text-objects-map "P" 'evil-pasted)
|
||
;; define text-object for entire buffer
|
||
(evil-define-text-object evil-inner-buffer (count &optional beg end type)
|
||
(list (point-min) (point-max)))
|
||
(define-key evil-inner-text-objects-map "g" 'evil-inner-buffer)
|
||
|
||
;; turn off evil in corelv buffers
|
||
(add-to-list 'evil-buffer-regexps '("\\*LV\\*"))
|
||
|
||
;; replace `dired-goto-file' with `helm-find-files', since `helm-find-files'
|
||
;; can do the same thing and with fuzzy matching and other features.
|
||
(with-eval-after-load 'dired
|
||
(evil-define-key 'normal dired-mode-map "J" 'spacemacs/helm-find-files)
|
||
(define-key dired-mode-map "j" 'spacemacs/helm-find-files)
|
||
(evil-define-key 'normal dired-mode-map (kbd dotspacemacs-leader-key)
|
||
spacemacs-default-map))
|
||
|
||
;; support smart 1parens-strict-mode
|
||
(when (configuration-layer/package-used-p 'smartparens)
|
||
(defadvice evil-delete-backward-char-and-join
|
||
(around spacemacs/evil-delete-backward-char-and-join activate)
|
||
(if (bound-and-true-p smartparens-strict-mode)
|
||
(call-interactively 'sp-backward-delete-char)
|
||
ad-do-it)))
|
||
|
||
;; Define history commands for comint
|
||
(when (eq dotspacemacs-editing-style 'vim)
|
||
(evil-define-key 'insert comint-mode-map
|
||
(kbd "C-k") 'comint-previous-input
|
||
(kbd "C-j") 'comint-next-input))
|
||
(evil-define-key 'normal comint-mode-map
|
||
(kbd "C-k") 'comint-previous-input
|
||
(kbd "C-j") 'comint-next-input)
|
||
|
||
;; ignore repeat
|
||
(evil-declare-ignore-repeat 'spacemacs/next-error)
|
||
(evil-declare-ignore-repeat 'spacemacs/previous-error))
|
||
|
||
(defun spacemacs-bootstrap/init-exec-path-from-shell ()
|
||
(require 'exec-path-from-shell)
|
||
(exec-path-from-shell-initialize))
|
||
|
||
(defun spacemacs-bootstrap/init-hydra ()
|
||
(require 'hydra)
|
||
(setq hydra-key-doc-function 'spacemacs//hydra-key-doc-function
|
||
hydra-head-format "[%s] "))
|
||
|
||
(defun spacemacs-bootstrap/init-use-package ()
|
||
(require 'use-package)
|
||
(setq use-package-verbose init-file-debug
|
||
;; inject use-package hooks for easy customization of stock package
|
||
;; configuration
|
||
use-package-inject-hooks t))
|
||
|
||
(defun spacemacs-bootstrap/init-which-key ()
|
||
(require 'which-key)
|
||
|
||
(spacemacs|add-toggle which-key
|
||
:mode which-key-mode
|
||
:documentation
|
||
"Display a buffer with available key bindings."
|
||
:evil-leader "tK")
|
||
|
||
(spacemacs/set-leader-keys "hk" 'which-key-show-top-level)
|
||
|
||
;; Needed to avoid nil variable error before update to recent which-key
|
||
(defvar which-key-replacement-alist nil)
|
||
;; Reset to the default or customized value before adding our values in order
|
||
;; to make this initialization code idempotent.
|
||
(custom-reevaluate-setting 'which-key-replacement-alist)
|
||
;; Replace rules for better naming of functions
|
||
(let ((new-descriptions
|
||
;; being higher in this list means the replacement is applied later
|
||
'(
|
||
("spacemacs/\\(.+\\)" . "\\1")
|
||
("spacemacs/toggle-\\(.+\\)" . "\\1")
|
||
("spacemacs/alternate-buffer" . "last buffer")
|
||
("spacemacs/toggle-mode-line-\\(.+\\)" . "\\1")
|
||
("avy-goto-word-or-subword-1" . "avy word")
|
||
("shell-command" . "shell cmd")
|
||
("spacemacs/default-pop-shell" . "open shell")
|
||
("spacemacs/helm-project-smart-do-search-region-or-symbol" . "smart search w/input")
|
||
("spacemacs/helm-project-smart-do-search" . "smart search")
|
||
("spacemacs/search-project-auto-region-or-symbol" . "search project w/input")
|
||
("spacemacs/search-project-auto" . "search project")
|
||
("helm-descbinds" . "show keybindings")
|
||
("sp-split-sexp" . "split sexp")
|
||
("avy-goto-line" . "avy line")
|
||
("universal-argument" . "universal arg")
|
||
("er/expand-region" . "expand region")
|
||
("helm-apropos" . "apropos")
|
||
("spacemacs/toggle-hybrid-mode" . "hybrid (hybrid-mode)")
|
||
("spacemacs/toggle-holy-mode" . "emacs (holy-mode)")
|
||
("evil-lisp-state-\\(.+\\)" . "\\1")
|
||
("spacemacs/\\(.+\\)-transient-state/\\(.+\\)" . "\\2")
|
||
("spacemacs/\\(.+\\)-transient-state/body" . "\\1-transient-state")
|
||
("helm-mini\\|ivy-switch-buffer" . "list-buffers")
|
||
("spacemacs-layouts/non-restricted-buffer-list-\\(helm\\|ivy\\)" . "global-list-buffers"))))
|
||
(dolist (nd new-descriptions)
|
||
;; ensure the target matches the whole string
|
||
(push (cons (cons nil (concat "\\`" (car nd) "\\'")) (cons nil (cdr nd)))
|
||
which-key-replacement-alist)))
|
||
|
||
;; Group together sequence and identical key entries in the which-key popup
|
||
;; SPC h k- Top-level bindings
|
||
;; Remove spaces around the two dots ".."
|
||
(push '(("\\(.*\\)1 .. 9" . "digit-argument") .
|
||
("\\11..9" . "digit-argument"))
|
||
which-key-replacement-alist)
|
||
|
||
;; And remove the modifier key(s) before the last nr in the sequence
|
||
(push '(("\\(.*\\)C-0 .. C-5" . "digit-argument") .
|
||
("\\1C-0..5" . "digit-argument"))
|
||
which-key-replacement-alist)
|
||
|
||
(push '(("\\(.*\\)C-7 .. C-9" . "digit-argument") .
|
||
("\\1C-7..9" . "digit-argument"))
|
||
which-key-replacement-alist)
|
||
|
||
(push '(("\\(.*\\)C-M-0 .. C-M-9" . "digit-argument") .
|
||
("\\1C-M-0..9" . "digit-argument"))
|
||
which-key-replacement-alist)
|
||
|
||
;; Rename the entry for M-0 in the SPC h k Top-level bindings,
|
||
;; and for 0 in the SPC- Spacemacs root
|
||
(push '(("\\(.*\\)0" . "winum-select-window-0-or-10") .
|
||
("\\10" . "select window 0 or 10"))
|
||
which-key-replacement-alist)
|
||
|
||
;; Rename the entry for M-1 in the SPC h k Top-level bindings,
|
||
;; and for 1 in the SPC- Spacemacs root, to 1..9
|
||
(push '(("\\(.*\\)1" . "winum-select-window-1") .
|
||
("\\11..9" . "select window 1..9"))
|
||
which-key-replacement-alist)
|
||
|
||
;; Hide the entries for M-[2-9] in the SPC h k Top-level bindings,
|
||
;; and for [2-9] in the SPC- Spacemacs root
|
||
(push '((nil . "winum-select-window-[2-9]") . t)
|
||
which-key-replacement-alist)
|
||
|
||
;; SPC- Spacemacs root
|
||
;; Combine the ` (backtick) and ² (superscript 2) key entries
|
||
(push '(("\\(.*\\)`" . "winum-select-window-by-number") .
|
||
("\\1`,²" . "select window by number"))
|
||
which-key-replacement-alist)
|
||
|
||
;; hide the "² -> winum-select-window-by-number" entry
|
||
(push '(("\\(.*\\)²" . nil) . t)
|
||
which-key-replacement-alist)
|
||
|
||
;; SPC b- buffers
|
||
;; rename the buffer-to-window-1 entry, to 1..9
|
||
(push '(("\\(.*\\)1" . "buffer-to-window-1") .
|
||
("\\11..9" . "buffer to window 1..9"))
|
||
which-key-replacement-alist)
|
||
|
||
;; hide the "[2-9] -> buffer-to-window-[2-9]" entries
|
||
(push '((nil . "buffer-to-window-[2-9]") . t)
|
||
which-key-replacement-alist)
|
||
|
||
;; SPC k- lisp
|
||
;; rename "1 .. 9 -> digit-argument" to "1..9 -> digit-argument"
|
||
(push '(("\\(.*\\)1 .. 9" . "evil-lisp-state-digit-argument") .
|
||
("\\11..9" . "digit-argument"))
|
||
which-key-replacement-alist)
|
||
|
||
;; SPC x i- inflection
|
||
;; rename "k -> string-inflection-kebab-case"
|
||
;; to "k,- -> string-inflection-kebab-case"
|
||
(push '(("\\(.*\\)k" . "string-inflection-kebab-case") .
|
||
("\\1k,-" . "string-inflection-kebab-case"))
|
||
which-key-replacement-alist)
|
||
|
||
;; hide the "- -> string-inflection-kebab-case" entry
|
||
(push '(("\\(.*\\)-" . "string-inflection-kebab-case") . t)
|
||
which-key-replacement-alist)
|
||
|
||
;; rename "u -> string-inflection-underscore"
|
||
;; to "u,_ -> string-inflection-underscore"
|
||
(push '(("\\(.*\\)u" . "string-inflection-underscore") .
|
||
("\\1u,_" . "string-inflection-underscore"))
|
||
which-key-replacement-alist)
|
||
|
||
;; hide the "_ -> string-inflection-underscore" entry
|
||
(push '(("\\(.*\\)_" . "string-inflection-underscore") . t)
|
||
which-key-replacement-alist)
|
||
|
||
;; C-c C-w-
|
||
;; rename the eyebrowse-switch-to-window-config-0 entry, to 0..9
|
||
(push '(("\\(.*\\)0" . "eyebrowse-switch-to-window-config-0") .
|
||
("\\10..9" . "eyebrowse-switch-to-window-config-0..9"))
|
||
which-key-replacement-alist)
|
||
|
||
;; hide the "[1-9] -> eyebrowse-switch-to-window-config-[1-9]" entries
|
||
(push '((nil . "eyebrowse-switch-to-window-config-[1-9]") . t)
|
||
which-key-replacement-alist)
|
||
|
||
;; Combine the c and C-c key entries
|
||
(push '(("\\(.*\\)C-c C-w c" . "eyebrowse-create-window-config") .
|
||
("\\1c,C-c" . "eyebrowse-create-window-config"))
|
||
which-key-replacement-alist)
|
||
|
||
;; hide the "C-c -> eyebrowse-create-window-config" entry
|
||
(push '(("\\(.*\\)C-c C-w C-c" . "eyebrowse-create-window-config") . t)
|
||
which-key-replacement-alist)
|
||
|
||
;; C-c C-d-
|
||
;; Combine the d and C-d key entries
|
||
(push '(("\\(.*\\)C-c C-d d" . "elisp-slime-nav-describe-elisp-thing-at-point") .
|
||
("\\1d,C-d" . "elisp-slime-nav-describe-elisp-thing-at-point"))
|
||
which-key-replacement-alist)
|
||
|
||
;; hide the "C-d -> elisp-slime-nav-describe-elisp-thing-at-point" entry
|
||
(push '(("\\(.*\\)C-c C-d C-d" . "elisp-slime-nav-describe-elisp-thing-at-point") . t)
|
||
which-key-replacement-alist)
|
||
|
||
(dolist (leader-key `(,dotspacemacs-leader-key ,dotspacemacs-emacs-leader-key))
|
||
(which-key-add-key-based-replacements
|
||
(concat leader-key " m") "major mode commands"
|
||
(concat leader-key " " dotspacemacs-emacs-command-key) "M-x"))
|
||
|
||
(which-key-add-key-based-replacements
|
||
dotspacemacs-leader-key '("root" . "Spacemacs root")
|
||
dotspacemacs-emacs-leader-key '("root" . "Spacemacs root")
|
||
(concat dotspacemacs-leader-key " m")
|
||
'("major-mode-cmd" . "Major mode commands")
|
||
(concat dotspacemacs-emacs-leader-key " m")
|
||
'("major-mode-cmd" . "Major mode commands"))
|
||
|
||
;; disable special key handling for spacemacs, since it can be
|
||
;; disorienting if you don't understand it
|
||
(pcase dotspacemacs-which-key-position
|
||
(`right (which-key-setup-side-window-right))
|
||
(`bottom (which-key-setup-side-window-bottom))
|
||
(`right-then-bottom (which-key-setup-side-window-right-bottom)))
|
||
|
||
(setq which-key-special-keys nil
|
||
which-key-use-C-h-for-paging t
|
||
which-key-prevent-C-h-from-cycling t
|
||
which-key-echo-keystrokes 0.02
|
||
which-key-max-description-length 32
|
||
which-key-sort-order 'which-key-key-order-alpha
|
||
which-key-idle-delay dotspacemacs-which-key-delay
|
||
which-key-idle-secondary-delay 0.01
|
||
which-key-allow-evil-operators t)
|
||
|
||
(which-key-mode)
|
||
(spacemacs|diminish which-key-mode " Ⓚ" " K"))
|
||
|
||
;; pre packages
|
||
|
||
(defun spacemacs-bootstrap/init-evil-evilified-state ()
|
||
(use-package evil-evilified-state)
|
||
(define-key evil-evilified-state-map (kbd dotspacemacs-leader-key)
|
||
spacemacs-default-map))
|
||
|
||
;; we own pcre2el here, so that it's always available to ivy and helm
|
||
;; (necessary when using spacemacs-base distribution)
|
||
(defun spacemacs-bootstrap/init-pcre2el ()
|
||
(use-package pcre2el :defer t))
|
||
|
||
(defun spacemacs-bootstrap/init-holy-mode ()
|
||
(use-package holy-mode
|
||
:commands holy-mode
|
||
:init
|
||
(progn
|
||
(when (eq 'emacs dotspacemacs-editing-style)
|
||
(holy-mode))
|
||
(spacemacs|add-toggle holy-mode
|
||
:status holy-mode
|
||
:on (progn (when (bound-and-true-p hybrid-mode)
|
||
(hybrid-mode -1))
|
||
(holy-mode))
|
||
:off (holy-mode -1)
|
||
:documentation "Globally toggle holy mode."
|
||
:evil-leader "tEe")
|
||
(spacemacs|diminish holy-mode " Ⓔe" " Ee"))))
|
||
|
||
(defun spacemacs-bootstrap/init-hybrid-mode ()
|
||
(use-package hybrid-mode
|
||
:config
|
||
(progn
|
||
(when (eq 'hybrid dotspacemacs-editing-style) (hybrid-mode))
|
||
(spacemacs|add-toggle hybrid-mode
|
||
:status hybrid-mode
|
||
:on (progn (when (bound-and-true-p holy-mode)
|
||
(holy-mode -1))
|
||
(hybrid-mode))
|
||
:off (hybrid-mode -1)
|
||
:documentation "Globally toggle hybrid mode."
|
||
:evil-leader "tEh")
|
||
(spacemacs|diminish hybrid-mode " Ⓔh" " Eh"))))
|
||
|
||
(defun spacemacs-bootstrap/init-spacemacs-theme ()
|
||
(use-package spacemacs-theme
|
||
:defer t
|
||
:init (setq spacemacs-theme-keyword-italic t
|
||
spacemacs-theme-comment-bg t
|
||
spacemacs-theme-org-height t)))
|