branch: elpa/evil-lisp-state
commit dbb3870e2bfd081b51e785dc1451ab98b6081b93
Author: syl20bnr <[email protected]>
Commit: syl20bnr <[email protected]>
Version 7
- Remove regular vim hjkl and move HJKL commands on hjkl
- better mnemonic keys for slurping, absorbing and splicing
- remove extra key bindings that does not auto-switch to evil-lisp-state
---
evil-lisp-state.el | 138 +++++++++++++++++++++--------------------------------
1 file changed, 55 insertions(+), 83 deletions(-)
diff --git a/evil-lisp-state.el b/evil-lisp-state.el
index 5d44bc0311..bb0e2e7637 100644
--- a/evil-lisp-state.el
+++ b/evil-lisp-state.el
@@ -5,7 +5,7 @@
;; Author: Sylvain Benner <[email protected]>
;; Keywords: convenience editing evil smartparens lisp mnemonic
;; Created: 9 Oct 2014
-;; Version: 6.3
+;; Version: 7.0
;; Package-Requires: ((evil "1.0.9") (evil-leader "0.4.3") (smartparens
"1.6.1"))
;; URL: https://github.com/syl20bnr/evil-lisp-state
@@ -34,17 +34,12 @@
;; To execute a command while in normal state, the evil-leader is used.
;; By default, the prefix for each command is `<leader> m`.
-;; Some commands when executed set the current state to `lisp state`.
+;; Commands when executed set the current state to `lisp state`.
;; By example, to slurp three times while in normal state:
-;; <leader> m 3 n
+;; <leader> m 3 s
;; Or to wrap a symbol in parenthesis then slurping two times:
-;; <leader> m w 2 n
-
-;; Auto-switch to lisp state commands:
-;; ----------------------------------
-
-;; These commands switch the current state to `lisp state'.
+;; <leader> m w 2 s
;; Key Binding | Function
;; ---------------|------------------------------------------------------------
@@ -56,24 +51,27 @@
;; `leader m $' | go to the end of current sexp
;; `leader m 0' | go to the beginning of current sexp
;; `leader m a' | absorb expression
-;; `leader m A' | transpose expression
;; `leader m b' | forward barf expression
;; `leader m B' | backward barf expression
;; `leader m c' | convolute expression
-;; `leader m H' | previous symbol
+;; `leader m ds' | delete symbol
+;; `leader m dw' | delete word
+;; `leader m dx' | delete expression
+;; `leader m e' | (splice) unwrap current expression and kill all symbols
after point
+;; `leader m E' | (splice) unwrap current expression and kill all symbols
before point
+;; `leader m h' | previous symbol
;; `leader m i' | switch to `insert state`
;; `leader m I' | go to beginning of current expression and switch to
`insert state`
-;; `leader m J' | next closing parenthesis
-;; `leader m K' | previous opening parenthesis
-;; `leader m L' | next symbol
-;; `leader m m' | merge (join) expression
-;; `leader m n' | forwared slurp expression
-;; `leader m N' | backward slurp expression
+;; `leader m j' | next closing parenthesis
+;; `leader m J' | join expression
+;; `leader m k' | previous opening parenthesis
+;; `leader m l' | next symbol
;; `leader m p' | paste after
;; `leader m P' | paste before
-;; `leader m q' | (splice) unwrap current expression and kill all symbols
after point
-;; `leader m Q' | (splice) unwrap current expression and kill all symbols
before point
;; `leader m r' | raise expression (replace parent expression by current one)
+;; `leader m s' | forwared slurp expression
+;; `leader m S' | backward slurp expression
+;; `leader m t' | transpose expression
;; `leader m u' | undo
;; `leader m C-r' | redo
;; `leader m v' | switch to `visual state`
@@ -81,38 +79,8 @@
;; `leader m C-v' | switch to `visual block state`
;; `leader m w' | wrap expression with parenthesis
;; `leader m W' | unwrap expression
-;; `leader m xs' | delete symbol
-;; `leader m xw' | delete word
-;; `leader m xx' | delete expression
;; `leader m y' | copy expression
-;; Lisp state commands:
-;; --------------------
-
-;; These commands can be executed in `lisp state'.
-
-;; Key Binding | Function
-;; ---------------|------------------------------------------------------------
-;; `h' | backward char
-;; `j' | next visual line
-;; `k' | previous visual line
-;; `l' | forward char
-
-;; Other commands:
-;; ---------------
-
-;; These commands can be executed in any state.
-
-;; Key Binding | Function
-;; ---------------|------------------------------------------------------------
-;; `leader m e $' | go to end of line and evaluate last sexp
-;; `leader m e e' | evaluate last sexp
-;; `leader m e f' | evaluate current defun
-;; `leader m g g' | go to definition
-;; `leader m h h' | describe elisp thing at point (show documentation)
-;; `leader m t b' | execute buffer tests
-;; `leader m t q' | ask for test function to execute
-
;; Configuration:
;; --------------
@@ -120,6 +88,10 @@
;; It is possible to add major modes with the variable
;; `evil-lisp-state-major-modes'.
+;; It is also possible to define the key bindings globally by
+;; setting `evil-lisp-state-global' to t. In this case
+;; `evil-lisp-state-major-modes' has no effect.
+
;; The prefix key is `<leader> m' by default, it is possible to
;; change the `m' key to anything else with the variable
;; `evil-lisp-state-leader-prefix'. Set it to an empty string
@@ -148,12 +120,18 @@
(eval-and-compile
(defcustom evil-lisp-state-leader-prefix "m"
- "Prefix key added to evil-lader, be default `m'"
+ "Prefix key added to evil-lader."
:type 'string
:group 'evil-lisp-state)
+ (defcustom evil-lisp-state-global nil
+ "If non nil evil-lisp-state is available everywhere."
+ :type 'boolean
+ :group 'evil-lisp-state)
+
(defcustom evil-lisp-state-major-modes '(emacs-lisp-mode)
- "Major modes where evil leader key bindings are defined."
+ "Major modes where evil leader key bindings are defined.
+If `evil-lisp-state-global' is non nil then this variable has no effect."
:type 'sexp
:group 'evil-lisp-state))
@@ -188,16 +166,6 @@
(define-key evil-lisp-state-map "l" 'evil-forward-char)
;; leader
(define-key evil-lisp-state-map (kbd evil-leader/leader)
evil-leader--default-map)
-;; commands that wont switch to lisp state
-(dolist (mm evil-lisp-state-major-modes)
- (evil-leader/set-key-for-mode mm "me$" 'lisp-state-eval-sexp-end-of-line)
- (evil-leader/set-key-for-mode mm "mee" 'eval-last-sexp)
- (evil-leader/set-key-for-mode mm "mef" 'eval-defun)
- (evil-leader/set-key-for-mode mm "mgg"
'elisp-slime-nav-find-elisp-thing-at-point)
- (evil-leader/set-key-for-mode mm "mhh"
'elisp-slime-nav-describe-elisp-thing-at-point)
- (evil-leader/set-key-for-mode mm "m," 'lisp-state-toggle-lisp-state)
- (evil-leader/set-key-for-mode mm "mtb" 'spacemacs/ert-run-tests-buffer)
- (evil-leader/set-key-for-mode mm "mtq" 'ert))
;; auto-switch to lisp state commands
(defconst evil-lisp-state-commands
@@ -217,24 +185,30 @@
("8" . digit-argument)
("9" . digit-argument)
("a" . sp-absorb-sexp)
- ("A" . sp-transpose-sexp)
("b" . sp-forward-barf-sexp)
("B" . sp-backward-barf-sexp)
("c" . sp-convolute-sexp)
- ("H" . sp-backward-symbol)
+ ("ds" . sp-kill-symbol)
+ ("Ds" . sp-backward-kill-symbol)
+ ("dw" . sp-kill-word)
+ ("Dw" . sp-backward-kill-word)
+ ("dx" . sp-kill-sexp)
+ ("Dx" . sp-backward-kill-sexp)
+ ("e" . sp-splice-sexp-killing-forward)
+ ("E" . sp-splice-sexp-killing-backward)
+ ("h" . sp-backward-symbol)
("i" . evil-insert-state)
("I" . evil-insert-line)
- ("J" . lisp-state-next-closing-paren)
- ("K" . lisp-state-prev-opening-paren)
- ("L" . lisp-state-forward-symbol)
- ("m" . sp-join-sexp)
- ("n" . sp-forward-slurp-sexp)
- ("N" . sp-backward-slurp-sexp)
- ("p" . evil-past-after)
- ("P" . evil-past-before)
- ("q" . sp-splice-sexp-killing-forward)
- ("Q" . sp-splice-sexp-killing-backward)
+ ("j" . lisp-state-next-closing-paren)
+ ("J" . sp-join-sexp)
+ ("k" . lisp-state-prev-opening-paren)
+ ("l" . lisp-state-forward-symbol)
+ ("p" . evil-paste-after)
+ ("P" . evil-paste-before)
("r" . sp-raise-sexp)
+ ("s" . sp-forward-slurp-sexp)
+ ("S" . sp-backward-slurp-sexp)
+ ("t" . sp-transpose-sexp)
("u" . undo-tree-undo)
("C-r" . undo-tree-redo)
("v" . evil-visual-char)
@@ -242,12 +216,6 @@
("C-v" . evil-visual-block)
("w" . lisp-state-wrap)
("W" . sp-unwrap-sexp)
- ("xs" . sp-kill-symbol)
- ("Xs" . sp-backward-kill-symbol)
- ("xw" . sp-kill-word)
- ("Xw" . sp-backward-kill-word)
- ("xx" . sp-kill-sexp)
- ("Xx" . sp-backward-kill-sexp)
("y" . sp-copy-sexp))
"alist of keys and commands in lisp state.")
(dolist (x evil-lisp-state-commands)
@@ -256,10 +224,14 @@
(eval
`(progn
(define-key evil-lisp-state-map ,(kbd key) ',cmd)
- (dolist (mm evil-lisp-state-major-modes)
- (evil-leader/set-key-for-mode mm
- ,(kbd (concat evil-lisp-state-leader-prefix key))
- (evil-lisp-state-enter-command ,cmd)))))))
+ (if evil-lisp-state-global
+ (evil-leader/set-key
+ ,(kbd (concat evil-lisp-state-leader-prefix " "key))
+ (evil-lisp-state-enter-command ,cmd))
+ (dolist (mm evil-lisp-state-major-modes)
+ (evil-leader/set-key-for-mode mm
+ ,(kbd (concat evil-lisp-state-leader-prefix " " key))
+ (evil-lisp-state-enter-command ,cmd))))))))
(defun lisp-state-toggle-lisp-state ()
"Toggle the lisp state."