core: spacemacs/evilify-map is now a macro

Add support for additional key bindings
This commit is contained in:
syl20bnr 2015-06-30 23:10:33 -04:00
parent fb00bb560b
commit 83c0d95195
3 changed files with 99 additions and 73 deletions

View file

@ -50,46 +50,69 @@
:config
(progn
;; mode maps
(spacemacs/evilify-map 'magit-mode-map)
(spacemacs/evilify-map 'magit-status-mode-map 'magit-status-mode)
(spacemacs/evilify-map 'magit-refs-mode-map 'magit-refs-mode)
(spacemacs/evilify-map 'magit-blame-mode-map 'magit-blame-mode)
(spacemacs/evilify-map 'magit-diff-mode-map 'magit-diff-mode)
(spacemacs/evilify-map 'magit-log-read-revs-map 'magit-log-read-revs)
(spacemacs/evilify-map 'magit-log-mode-map 'magit-log-mode)
(spacemacs/evilify-map 'magit-log-select-mode-map 'magit-log-select-mode)
(spacemacs/evilify-map 'magit-cherry-mode-map 'magit-cherry-mode)
(spacemacs/evilify-map 'magit-reflog-mode-map 'magit-reflog-mode)
(spacemacs/evilify-map 'magit-process-mode-map 'magit-process-mode)
(spacemacs|evilify-map magit-mode-map)
(spacemacs|evilify-map magit-status-mode-map
:mode magit-status-mode)
(spacemacs|evilify-map magit-refs-mode-map
:mode magit-refs-mode)
(spacemacs|evilify-map magit-blame-mode-map
:mode magit-blame-mode)
(spacemacs|evilify-map magit-diff-mode-map
:mode magit-diff-mode)
(spacemacs|evilify-map magit-log-read-revs-map
:mode magit-log-read-revs)
(spacemacs|evilify-map magit-log-mode-map
:mode magit-log-mode)
(spacemacs|evilify-map magit-log-select-mode-map
:mode magit-log-select-mode)
(spacemacs|evilify-map magit-cherry-mode-map
:mode magit-cherry-mode)
(spacemacs|evilify-map magit-reflog-mode-map
:mode magit-reflog-mode)
(spacemacs|evilify-map magit-process-mode-map
:mode magit-process-mode)
(spacemacs|evilify-map git-rebase-mode-map
:mode git-rebase-mode
:bindings
"J" 'git-rebase-move-line-down
"K" 'git-rebase-move-line-up
"u" 'git-rebase-undo
"y" 'git-rebase-insert)
;; default state for additional modes
(dolist (mode '(magit-popup-mode
magit-popup-sequence-mode))
(add-to-list 'evil-emacs-state-modes mode))
(spacemacs/evilify-configure-default-state 'magit-revision-mode)
;; section maps
(spacemacs/evilify-map 'magit-tag-section-map)
(spacemacs/evilify-map 'magit-untracked-section-map)
(spacemacs/evilify-map 'magit-branch-section-map)
(spacemacs/evilify-map 'magit-remote-section-map)
(spacemacs/evilify-map 'magit-file-section-map)
(spacemacs/evilify-map 'magit-hunk-section-map)
(spacemacs/evilify-map 'magit-unstaged-section-map)
(spacemacs/evilify-map 'magit-staged-section-map)
(spacemacs/evilify-map 'magit-commit-section-map)
(spacemacs/evilify-map 'magit-module-commit-section-map)
(spacemacs/evilify-map 'magit-unpulled-section-map)
(spacemacs/evilify-map 'magit-unpushed-section-map)
(spacemacs/evilify-map 'magit-stashes-section-map)
(spacemacs/evilify-map 'magit-stash-section-map)
(spacemacs|evilify-map magit-tag-section-map)
(spacemacs|evilify-map magit-untracked-section-map)
(spacemacs|evilify-map magit-branch-section-map)
(spacemacs|evilify-map magit-remote-section-map)
(spacemacs|evilify-map magit-file-section-map)
(spacemacs|evilify-map magit-hunk-section-map)
(spacemacs|evilify-map magit-unstaged-section-map)
(spacemacs|evilify-map magit-staged-section-map)
(spacemacs|evilify-map magit-commit-section-map)
(spacemacs|evilify-map magit-module-commit-section-map)
(spacemacs|evilify-map magit-unpulled-section-map)
(spacemacs|evilify-map magit-unpushed-section-map)
(spacemacs|evilify-map magit-stashes-section-map)
(spacemacs|evilify-map magit-stash-section-map)
;; full screen magit-status
(when git-magit-status-fullscreen
(setq magit-restore-window-configuration t)
(setq magit-status-buffer-switch-function
(lambda (buffer)
(pop-to-buffer buffer)
(delete-other-windows))))
(setq magit-restore-window-configuration t)
(setq magit-status-buffer-switch-function
(lambda (buffer)
(pop-to-buffer buffer)
(delete-other-windows))))
;; rebase mode
(evil-leader/set-key-for-mode 'git-rebase-mode
"mcc" 'git-rebase-server-edit
"mk" 'git-rebase-abort)
;; whitespace
(defun magit-toggle-whitespace ()
(interactive)
(if (member "-w" (if (derived-mode-p 'magit-diff-mode)
@ -97,23 +120,17 @@
magit-diff-section-arguments))
(magit-dont-ignore-whitespace)
(magit-ignore-whitespace)))
(defun magit-ignore-whitespace ()
(interactive)
(add-to-list (if (derived-mode-p 'magit-diff-mode)
'magit-refresh-args
'magit-diff-section-arguments)
"-w")
'magit-refresh-args 'magit-diff-section-arguments) "-w")
(magit-refresh))
(defun magit-dont-ignore-whitespace ()
(interactive)
(setq magit-diff-options
(remove "-w"
(if (derived-mode-p 'magit-diff-mode)
magit-refresh-args
magit-diff-section-arguments)))
(magit-refresh))
(remove "-w"
(if (derived-mode-p 'magit-diff-mode)
magit-refresh-args
magit-diff-section-arguments))) (magit-refresh))
(define-key magit-status-mode-map (kbd "C-S-w")
'magit-toggle-whitespace))))

View file

@ -9,19 +9,27 @@
;; This file is not part of GNU Emacs.
;;
;;; License: GPLv3
(defun spacemacs/evilify-map (map-symbol &optional mode evilified-map)
"Evilify map bound to MAP-SYMBOL."
(let ((sorted-map (spacemacs//evilify-sort-keymap
(or evilified-map evil-evilified-state-map)))
processed)
(mapc (lambda (map-entry)
(unless (member (car map-entry) processed)
(setq processed (spacemacs//evilify-event
(eval map-symbol) map-symbol
(car map-entry) (cdr map-entry)))))
sorted-map))
(when mode (spacemacs/evilify-configure-default-state mode)))
(defmacro spacemacs|evilify-map (map &rest props)
"Evilify MAP."
(declare (indent 1))
(let* ((mode (plist-get props :mode))
(evilified-map (plist-get props :evilified-map))
(bindings (spacemacs/mplist-get props :bindings))
(defkey (when bindings `(evil-define-key 'evilified ,map ,@bindings))))
`(progn
(let ((sorted-map (spacemacs//evilify-sort-keymap
(or ,evilified-map evil-evilified-state-map)))
processed)
(mapc (lambda (map-entry)
(unless (member (car map-entry) processed)
(setq processed (spacemacs//evilify-event
,map ',map
(car map-entry) (cdr map-entry)))))
sorted-map))
(unless ,(null defkey)
(,@defkey))
(unless ,(null mode)
(spacemacs/evilify-configure-default-state ',mode)))))
(defun spacemacs/evilify-configure-default-state (mode)
"Configure default state for the passed mode."

View file

@ -10,11 +10,12 @@
;;
;;; License: GPLv3
(require 'mocker)
(require 'core-funcs)
(require 'core-evilify-keymap)
(require 'core-spacemacs-buffer)
;; ---------------------------------------------------------------------------
;; spacemacs/evilify-map
;; spacemacs|evilify-map
;; ---------------------------------------------------------------------------
;; commands
@ -25,7 +26,7 @@
evil-map))
(input-map (make-sparse-keymap)))
(define-key input-map "s" 'func)
(spacemacs/evilify-map 'input-map)
(spacemacs|evilify-map input-map)
(should (equal '((115 . func-or-evil-func--evilified-input-map-s)
(83 . func--evilified-input-map-S))
(spacemacs//evilify-sort-keymap input-map)))))
@ -37,7 +38,7 @@
evil-map))
(input-map (make-sparse-keymap)))
(define-key input-map "s" 'func)
(spacemacs/evilify-map 'input-map)
(spacemacs|evilify-map input-map)
(should (equal '((115 . func-or-evil-func--evilified-input-map-s)
(83 . evil-func2--evilified-input-map-S)
(19 . func--evilified-input-map-C-s))
@ -50,7 +51,7 @@
(input-map (make-sparse-keymap)))
(define-key input-map "s" 'func1)
(define-key input-map "S" 'func2)
(spacemacs/evilify-map 'input-map)
(spacemacs|evilify-map input-map)
(should (equal '((115 . func1-or-evil-func--evilified-input-map-s)
(83 . func2-or-func1--evilified-input-map-S)
(19 . func2--evilified-input-map-C-s))
@ -63,7 +64,7 @@
(input-map (make-sparse-keymap)))
(define-key input-map "S" 'func2)
(define-key input-map "s" 'func1)
(spacemacs/evilify-map 'input-map)
(spacemacs|evilify-map input-map)
(should (equal '((115 . func1-or-evil-func--evilified-input-map-s)
(83 . func2-or-func1--evilified-input-map-S)
(19 . func2--evilified-input-map-C-s))
@ -77,7 +78,7 @@
(input-map (make-sparse-keymap)))
(define-key input-map "s" 'func1)
(define-key input-map "S" 'func2)
(spacemacs/evilify-map 'input-map)
(spacemacs|evilify-map input-map)
(should (equal '((115 . func1-or-evil-func1--evilified-input-map-s)
(83 . func2-or-evil-func2--evilified-input-map-S)
(19 . func1--evilified-input-map-C-s)
@ -92,7 +93,7 @@
(input-map (make-sparse-keymap)))
(define-key input-map "S" 'func2)
(define-key input-map "s" 'func1)
(spacemacs/evilify-map 'input-map)
(spacemacs|evilify-map input-map)
(should (equal '((115 . func1-or-evil-func1--evilified-input-map-s)
(83 . func2-or-evil-func2--evilified-input-map-S)
(19 . func1--evilified-input-map-C-s)
@ -107,7 +108,7 @@
(define-key input-map "s" 'func1)
(define-key input-map "S" 'func2)
(define-key input-map (kbd "C-s") 'func3)
(spacemacs/evilify-map 'input-map)
(spacemacs|evilify-map input-map)
(should (equal '((115 . func1-or-evil-func--evilified-input-map-s)
(83 . func2-or-func1--evilified-input-map-S)
(19 . func3-or-func2--evilified-input-map-C-s)
@ -122,7 +123,7 @@
(define-key input-map "s" 'func1)
(define-key input-map (kbd "C-s") 'func3)
(define-key input-map "S" 'func2)
(spacemacs/evilify-map 'input-map)
(spacemacs|evilify-map input-map)
(should (equal '((115 . func1-or-evil-func--evilified-input-map-s)
(83 . func2-or-func1--evilified-input-map-S)
(19 . func3-or-func2--evilified-input-map-C-s)
@ -142,7 +143,7 @@
((spacemacs-buffer/warning (msg &rest args)
((:record-cls 'mocker-stub-record
:output nil :occur 1))))
(spacemacs/evilify-map 'input-map)
(spacemacs|evilify-map input-map)
(should (equal '((115 . func1-or-evil-func1--evilified-input-map-s)
(83 . func2-or-evil-func2--evilified-input-map-S)
(19 . func3-or-func1--evilified-input-map-C-s)
@ -162,7 +163,7 @@
((spacemacs-buffer/warning (msg &rest args)
((:record-cls 'mocker-stub-record
:output nil :occur 1))))
(spacemacs/evilify-map 'input-map)
(spacemacs|evilify-map input-map)
(should (equal '((115 . func1-or-evil-func1--evilified-input-map-s)
(83 . func2-or-evil-func2--evilified-input-map-S)
(19 . func3-or-func1--evilified-input-map-C-s)
@ -179,7 +180,7 @@
(submap (make-sparse-keymap)))
(define-key input-map "s" submap)
(define-key submap "t" 'func)
(spacemacs/evilify-map 'input-map)
(spacemacs|evilify-map input-map)
(should (equal '((115 . keymap-s-or-evil-func--evilified-input-map-s)
(83 . keymap-s--evilified-input-map-S))
(spacemacs//evilify-sort-keymap input-map)))))
@ -193,7 +194,7 @@
(submap (make-sparse-keymap)))
(define-key input-map "s" submap)
(define-key submap "t" 'func)
(spacemacs/evilify-map 'input-map)
(spacemacs|evilify-map input-map)
(should (equal '((115 . keymap-s-or-evil-func1--evilified-input-map-s)
(83 . evil-func2--evilified-input-map-S)
(19 . keymap-s--evilified-input-map-C-s))
@ -208,7 +209,7 @@
(define-key input-map "s" submap)
(define-key input-map "S" submap)
(define-key submap "t" 'func)
(spacemacs/evilify-map 'input-map)
(spacemacs|evilify-map input-map)
(should (equal '((115 . keymap-s-or-evil-func--evilified-input-map-s)
(83 . keymap-S-or-keymap-s--evilified-input-map-S)
(19 . keymap-S--evilified-input-map-C-s))
@ -224,7 +225,7 @@
(define-key input-map "s" submap)
(define-key input-map "S" submap)
(define-key submap "t" 'func)
(spacemacs/evilify-map 'input-map)
(spacemacs|evilify-map input-map)
(should (equal '((115 . keymap-s-or-evil-func1--evilified-input-map-s)
(83 . keymap-S-or-evil-func2--evilified-input-map-S)
(19 . keymap-s--evilified-input-map-C-s)
@ -241,7 +242,7 @@
(define-key input-map "S" submap)
(define-key input-map (kbd "C-s") submap)
(define-key submap "t" 'func)
(spacemacs/evilify-map 'input-map)
(spacemacs|evilify-map input-map)
(should (equal '((115 . keymap-s-or-evil-func--evilified-input-map-s)
(83 . keymap-S-or-keymap-s--evilified-input-map-S)
(19 . keymap-C-s-or-keymap-S--evilified-input-map-C-s)
@ -263,7 +264,7 @@
((spacemacs-buffer/warning (msg &rest args)
((:record-cls 'mocker-stub-record
:output nil :occur 1))))
(spacemacs/evilify-map 'input-map)
(spacemacs|evilify-map input-map)
(should (equal '((115 . keymap-s-or-evil-func1--evilified-input-map-s)
(83 . keymap-S-or-evil-func2--evilified-input-map-S)
(19 . keymap-C-s-or-keymap-s--evilified-input-map-C-s)
@ -281,7 +282,7 @@
(define-key input-map "s" 'func)
(define-key input-map "S" submap)
(define-key submap "t" 'func)
(spacemacs/evilify-map 'input-map)
(spacemacs|evilify-map input-map)
(should (equal '((115 . func-or-evil-func--evilified-input-map-s)
(83 . keymap-S-or-func--evilified-input-map-S)
(19 . keymap-S--evilified-input-map-C-s))
@ -301,7 +302,7 @@
(define-key input-map "S" submap)
(define-key submap "t" 'func)
(dotimes (_ 10)
(spacemacs/evilify-map 'input-map))
(spacemacs|evilify-map input-map))
(should (equal '((115 . func2-or-evil-func--evilified-input-map-s)
(101 . func1)
(83 . keymap-S-or-func2--evilified-input-map-S)