branch: elpa/evil-lisp-state
commit fc34826f18372f1644eef293f2775455a9dd0ab1
Author: syl20bnr <[email protected]>
Commit: syl20bnr <[email protected]>
Default behavior for hjkl
Add key bindings for evaluation, tests, ...
---
README.md | 49 +++++++---------
evil-lisp-state.el | 161 ++++++++++++++++++++++++++++++++---------------------
2 files changed, 117 insertions(+), 93 deletions(-)
diff --git a/README.md b/README.md
index d96ed6aab0..3ff0d507f5 100644
--- a/README.md
+++ b/README.md
@@ -13,8 +13,6 @@ using mnemonic key bindings.
- [Manually](#manually)
- [Principle](#principle)
- [Commands and key bindings](#commands-and-key-bindings)
- - [hjkl](#hjkl)
- - [Other commands:](#other-commands)
- [Configuration](#configuration)
<!-- markdown-toc end -->
@@ -52,49 +50,40 @@ Examples:
- to slurp three times while in normal state:
- <leader> m s s s
+ <leader> m 3 n
- to wrap a symbol in parenthesis then slurping two times:
- <leader> m w s s
+ <leader> m w 2 n
## Commands and key bindings
-### hjkl
-
-Evil Lisp state binds the most common commands on hjkl:
-
-Key Binding | Function
----------------------------|------------------------------------------------------------
-<kbd>\<leader\> m h</kbd> | previous symbol
-<kbd>\<leader\> m H</kbd> | forward barf sexp (move the current symbol or
sexp outside)
-<kbd>\<leader\> m j</kbd> | next closing parenthesis
-<kbd>\<leader\> m J</kbd> | wrap symbol with parenthesis (down one level)
-<kbd>\<leader\> m k</kbd> | previous opening parenthesis
-<kbd>\<leader\> m K</kbd> | unwrap current sexp (up one level)
-<kbd>\<leader\> m l</kbd> | next symbol
-<kbd>\<leader\> m L</kbd> | forward slurp sexp (move next outside sexp into
current one)
-
-So with just hjkl keys you can:
-- navigate between symbols and sexps
-- slurp and barf symbols and sexps
-- wrap and unwrap symbols and sexps
-
-**Notes:**
-Slurping, barfing and wrapping are also bound on other keys.
-
-### Other commands:
-
Key Binding | Function
----------------------------|------------------------------------------------------------
+<kbd>\<leader\></kbd> | evil leader
+<kbd>\<leader\> m %</kbd> | evil jump item
+<kbd>\<leader\> m :</kbd> | ex command
<kbd>\<leader\> m (</kbd> | insert expression before (same level as current
one)
<kbd>\<leader\> m )</kbd> | insert expression after (same level as current
one)
<kbd>\<leader\> m a</kbd> | absorb expression
<kbd>\<leader\> m b</kbd> | forward barf expression
<kbd>\<leader\> m B</kbd> | backward barf expression
<kbd>\<leader\> m c</kbd> | convolute expression
+<kbd>\<leader\> m d</kbd> | describe elisp thing at point (show
documentation)
+<kbd>\<leader\> m e $</kbd> | go to end of line and evaluate last sexp
+<kbd>\<leader\> m e e</kbd> | evaluate last sexp
+<kbd>\<leader\> m e f</kbd> | evaluate current defun
+<kbd>\<leader\> m g</kbd> | go to definition
+<kbd>\<leader\> m h</kbd> | backward char
+<kbd>\<leader\> m H</kbd> | previous symbol
<kbd>\<leader\> m i</kbd> | switch to `insert state`
<kbd>\<leader\> m I</kbd> | go to beginning of current expression and switch
to `insert state`
+<kbd>\<leader\> m j</kbd> | next visual line
+<kbd>\<leader\> m J</kbd> | next closing parenthesis
+<kbd>\<leader\> m k</kbd> | previous visual line
+<kbd>\<leader\> m K</kbd> | previous opening parenthesis
+<kbd>\<leader\> m l</kbd> | forward char
+<kbd>\<leader\> m L</kbd> | next symbol
<kbd>\<leader\> m m</kbd> | merge (join) expression
<kbd>\<leader\> m n</kbd> | forwared slurp expression
<kbd>\<leader\> m N</kbd> | backward slurp expression
@@ -103,6 +92,8 @@ Key Binding | Function
<kbd>\<leader\> m q</kbd> | unwrap current expression and kill all symbols
after point
<kbd>\<leader\> m Q</kbd> | unwrap current expression and kill all symbols
before point
<kbd>\<leader\> m r</kbd> | raise expression (replace parent expression by
current one)
+<kbd>\<leader\> m t b</kbd> | execute buffer tests
+<kbd>\<leader\> m t q</kbd> | ask for test function to execute
<kbd>\<leader\> m T</kbd> | transpose expression
<kbd>\<leader\> m u</kbd> | undo
<kbd>\<leader\> m C-r</kbd> | redo
diff --git a/evil-lisp-state.el b/evil-lisp-state.el
index dd596de964..886220f00e 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: 5.1.0
+;; Version: 6.1
;; Package-Requires: ((evil "1.0.9") (evil-leader "0.4.3") (smartparens
"1.6.1"))
;; URL: https://github.com/syl20bnr/evil-lisp-state
@@ -36,64 +36,61 @@
;; By default, the prefix for each command is `<leader> m`.
;; Each command when executed set the current state to `lisp state`.
;; By example, to slurp three times while in normal state:
-;; <leader> m s s s
+;; <leader> m 3 n
;; Or to wrap a symbol in parenthesis then slurping two times:
-;; <leader> m w s s
+;; <leader> m w 2 n
;; Commands and key bindings:
;; --------------------------
-;; Evil Lisp state binds the most common commands on hjkl:
-;;
-;; Key Binding | Function
-;;
----------------|------------------------------------------------------------
-;; `<leader> m h` | previous symbol
-;; `<leader> m H` | forward barf sexp (move the current symbol or sexp
outside)
-;; `<leader> m j` | next closing parenthesis
-;; `<leader> m J` | wrap symbol with parenthesis (down one level)
-;; `<leader> m k` | previous opening parenthesis
-;; `<leader> m K` | unwrap current sexp (up one level)
-;; `<leader> m l` | next symbol
-;; `<leader> m L` | forward slurp sexp (move next outside sexp into current
one)
-;;
-;; So with just hjkl keys you can:
-;; - navigate between symbols and sexps
-;; - slurp and barf symbols and sexps
-;; - wrap and unwrap symbols and sexps
-
-;; Slurping, barfing and wrapping are also bound on other keys.
-;; All the other commands are:
-
-;; Key Binding | Function
-;;
----------------|------------------------------------------------------------
-;; `<leader> m (` | insert expression before (same level as current one)
-;; `<leader> m )` | insert expression after (same level as current one)
-;; `<leader> m a` | absorb expression
-;; `<leader> m b` | forward barf expression
-;; `<leader> m B` | backward barf expression
-;; `<leader> m c` | convolute expression
-;; `<leader> m i` | switch to `insert state`
-;; `<leader> m I` | go to beginning of current expression and switch to
`insert state`
-;; `<leader> m m` | merge (join) expression
-;; `<leader> m n` | forwared slurp expression
-;; `<leader> m N` | backward slurp expression
-;; `<leader> m p` | paste after
-;; `<leader> m P` | paste before
-;; `<leader> m q` | unwrap current expression and kill all symbols after point
-;; `<leader> m Q` | unwrap current expression and kill all symbols before
point
-;; `<leader> m r` | raise expression (replace parent expression by current
one)
-;; `<leader> m T` | transpose expression
-;; `<leader> m u` | undo
-;; `<leader> m C-r`| redo
-;; `<leader> m v` | switch to `visual state`
-;; `<leader> m V` | switch to `visual line state`
-;; `<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
+;; Key Binding | Function
+;; ---------------|------------------------------------------------------------
+;; `leader' | evil leader
+;; `leader m %' | evil jump item
+;; `leader m :' | ex command
+;; `leader m (' | insert expression before (same level as current one)
+;; `leader m )' | insert expression after (same level as current one)
+;; `leader m a' | absorb expression
+;; `leader m b' | forward barf expression
+;; `leader m B' | backward barf expression
+;; `leader m c' | convolute expression
+;; `leader m d' | describe elisp thing at point (show documentation)
+;; `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' | go to definition
+;; `leader m h' | backward char
+;; `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 visual line
+;; `leader m J' | next closing parenthesis
+;; `leader m k' | previous visual line
+;; `leader m K' | previous opening parenthesis
+;; `leader m l' | forward char
+;; `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 p' | paste after
+;; `leader m P' | paste before
+;; `leader m q' | unwrap current expression and kill all symbols after point
+;; `leader m Q' | unwrap current expression and kill all symbols before point
+;; `leader m r' | raise expression (replace parent expression by current one)
+;; `leader m t b' | execute buffer tests
+;; `leader m t q' | ask for test function to execute
+;; `leader m T' | transpose expression
+;; `leader m u' | undo
+;; `leader m C-r' | redo
+;; `leader m v' | switch to `visual state`
+;; `leader m V' | switch to `visual line state`
+;; `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
;; Configuration:
;; --------------
@@ -159,9 +156,22 @@
(evil-normal-state)
(call-interactively ',command)))
+;; escape
(define-key evil-lisp-state-map [escape] 'evil-normal-state)
+
+;; toggle lisp state
+(define-key evil-lisp-state-map ",," 'lisp-state-toggle-lisp-state)
+(dolist (mm evil-lisp-state-major-modes)
+ (evil-leader/set-key-for-mode mm "m," 'lisp-state-toggle-lisp-state))
+
+;; leader
+(define-key evil-lisp-state-map (kbd evil-leader/leader)
evil-leader--default-map)
+
+;; auto-switch to lisp state commands
(defconst evil-lisp-state-commands
- `(("(" . lisp-state-insert-sexp-before)
+ `(("%" . evil-jump-item)
+ (":" . evil-ex)
+ ("(" . lisp-state-insert-sexp-before)
(")" . lisp-state-insert-sexp-after)
("1" . digit-argument)
("2" . digit-argument)
@@ -176,16 +186,21 @@
("b" . sp-forward-barf-sexp)
("B" . sp-backward-barf-sexp)
("c" . sp-convolute-sexp)
- ("h" . sp-backward-symbol)
- ("H" . sp-forward-barf-sexp)
+ ("d" . elisp-slime-nav-describe-elisp-thing-at-point)
+ ("e$" . lisp-state-eval-sexp-end-of-line)
+ ("ee" . eval-last-sexp)
+ ("ef" . eval-defun)
+ ("g" . elisp-slime-nav-find-elisp-thing-at-point)
+ ("h" . evil-backward-char)
+ ("H" . sp-backward-symbol)
("i" . evil-insert-state)
("I" . evil-insert-line)
- ("j" . lisp-state-next-closing-paren)
- ("J" . lisp-state-wrap)
- ("k" . lisp-state-prev-opening-paren)
- ("K" . sp-unwrap-sexp)
- ("l" . lisp-state-forward-symbol)
- ("L" . sp-forward-slurp-sexp)
+ ("j" . evil-next-visual-line)
+ ("J" . lisp-state-next-closing-paren)
+ ("k" . evil-previous-visual-line)
+ ("K" . lisp-state-prev-opening-paren)
+ ("l" . evil-forward-char)
+ ("L" . lisp-state-forward-symbol)
("m" . sp-join-sexp)
("n" . sp-forward-slurp-sexp)
("N" . sp-backward-slurp-sexp)
@@ -194,7 +209,9 @@
("q" . sp-splice-sexp-killing-forward)
("Q" . sp-splice-sexp-killing-backward)
("r" . sp-raise-sexp)
- ("T" . sp-transpose-sexp)
+ ("tb" . spacemacs/ert-run-tests-buffer)
+ ("tq" . ert)
+ ("T" . sp-transpose-sexp)
("u" . undo-tree-undo)
("C-r" . undo-tree-redo)
("v" . evil-visual-char)
@@ -221,6 +238,14 @@
,(kbd (concat evil-lisp-state-leader-prefix key))
(evil-lisp-state-enter-command ,cmd)))))))
+(defun lisp-state-toggle-lisp-state ()
+ "Toggle the lisp state."
+ (interactive)
+ (message "state: %s" evil-state)
+ (if (eq 'lisp evil-state)
+ (evil-normal-state)
+ (evil-lisp-state)))
+
(defun lisp-state-wrap (&optional arg)
"Wrap a symbol with parenthesis."
(interactive "P")
@@ -276,6 +301,14 @@
(sp-insert-pair "(")
(indent-for-tab-command)))
+(defun lisp-state-eval-sexp-end-of-line ()
+ "Evaluate the last sexp at the end of the current line."
+ (interactive)
+ (save-excursion
+ (end-of-line)
+ (eval-last-sexp nil)))
+
+
(provide 'evil-lisp-state)
;;; evil-lisp-state.el ends here