Update evil-lisp-state key bindings

hjkl behaves like in normal mode now
move all the elisp key bindings in keybindings.el to evil-lisp-state
This commit is contained in:
syl20bnr 2015-01-18 22:36:16 -05:00
parent d7273a5d5f
commit bf97337656
5 changed files with 151 additions and 135 deletions

View file

@ -1662,44 +1662,38 @@ the commands can be repeated without pressing on <kbd>SPC m</kbd>.
When in `lisp state` the color of the mode-line changes to pink.
Examples:
- to slurp three times while in normal state: <kbd>SPC m n n n</kbd>
- to wrap a symbol in parenthesis then slurping two times: <kbd>SPC m w n n</kbd>
- to slurp three times while in normal state: <kbd>SPC m 3 n</kbd>
- to wrap a symbol in parenthesis then slurping two times: <kbd>SPC m w 2 n</kbd>
#### hjkl keys for quickly editing lisp code
Evil Lisp state binds the most common commands on hjkl:
Key Binding | Function
--------------------|------------------------------------------------------------
<kbd>SPC m h</kbd> | previous symbol
<kbd>SPC m H</kbd> | forward barf sexp (move the current symbol or sexp outside)
<kbd>SPC m j</kbd> | next closing parenthesis
<kbd>SPC m J</kbd> | wrap symbol with parenthesis (down one level)
<kbd>SPC m k</kbd> | previous opening parenthesis
<kbd>SPC m K</kbd> | unwrap current sexp (up one level)
<kbd>SPC m l</kbd> | next symbol
<kbd>SPC 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, see below.
### Other commands:
### Commands:
Key Binding | Function
---------------------|------------------------------------------------------------
<kbd>SPC m %</kbd> | evil jump item
<kbd>SPC m :</kbd> | ex command
<kbd>SPC m (</kbd> | insert expression before (same level as current one)
<kbd>SPC m )</kbd> | insert expression after (same level as current one)
<kbd>SPC m $</kbd> | go to the end of current sexp
<kbd>SPC m 0</kbd> | go to the beginning of current sexp
<kbd>SPC m a</kbd> | absorb expression
<kbd>SPC m b</kbd> | forward barf expression
<kbd>SPC m B</kbd> | backward barf expression
<kbd>SPC m c</kbd> | convolute expression
<kbd>SPC m d</kbd> | describe elisp thing at point (show documentation)
<kbd>SPC m e $</kbd> | go to end of line and evaluate last sexp
<kbd>SPC m e e</kbd> | evaluate last sexp
<kbd>SPC m e f</kbd> | evaluate current defun
<kbd>SPC m g</kbd> | go to definition
<kbd>SPC m h</kbd> | backward char
<kbd>SPC m H</kbd> | previous symbol
<kbd>SPC m i</kbd> | switch to `insert state`
<kbd>SPC m I</kbd> | go to beginning of current expression and switch to `insert state`
<kbd>SPC m j</kbd> | next visual line
<kbd>SPC m J</kbd> | next closing parenthesis
<kbd>SPC m k</kbd> | previous visual line
<kbd>SPC m K</kbd> | previous opening parenthesis
<kbd>SPC m l</kbd> | forward char
<kbd>SPC m L</kbd> | next symbol
<kbd>SPC m m</kbd> | merge (join) expression
<kbd>SPC m n</kbd> | forwared slurp expression
<kbd>SPC m N</kbd> | backward slurp expression
@ -1708,6 +1702,8 @@ Key Binding | Function
<kbd>SPC m q</kbd> | unwrap current expression and kill all symbols after point
<kbd>SPC m Q</kbd> | unwrap current expression and kill all symbols before point
<kbd>SPC m r</kbd> | raise expression (replace parent expression by current one)
<kbd>SPC m t b</kbd> | execute buffer tests
<kbd>SPC m t q</kbd> | ask for test function to execute
<kbd>SPC m T</kbd> | transpose expression
<kbd>SPC m u</kbd> | undo
<kbd>SPC m C-r</kbd> | redo

View file

@ -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,42 @@ 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 $</kbd> | go to the end of current sexp
<kbd>\<leader\> m 0</kbd> | go to the beginning of current sexp
<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 +94,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

View file

@ -5,7 +5,7 @@
;; Author: Sylvain Benner <sylvain.benner@gmail.com>
;; 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,63 @@
;; 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 $' | go to the end of current sexp
;; `leader m 0' | go to the beginning of current sexp
;; `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,10 +158,25 @@
(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)
("$" . sp-end-of-sexp)
("0" . lisp-state-beginning-of-sexp)
("1" . digit-argument)
("2" . digit-argument)
("3" . digit-argument)
@ -176,16 +190,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 +213,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 +242,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 +305,20 @@
(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)))
(defun lisp-state-beginning-of-sexp (&optional arg)
"Go to the beginning of current s-exp"
(interactive "P")
(sp-beginning-of-sexp)
(evil-backward-char))
(provide 'evil-lisp-state)
;;; evil-lisp-state.el ends here

View file

@ -869,13 +869,6 @@ If ASCII si not provided then UNICODE is used instead."
"Return the line at point as a string."
(buffer-substring (line-beginning-position) (line-end-position)))
(defun spacemacs/eval-sexp-end-of-line ()
"Evaluate the last sexp at the end of the current line."
(interactive)
(save-excursion
(evil-end-of-line)
(eval-last-sexp nil)))
(defun spacemacs/toggle-tool-bar ()
"Toggle the tool bar.
It has no effect in a terminal."

View file

@ -208,12 +208,3 @@
;; google translate -----------------------------------------------------------
(evil-leader/set-key
"xgl" 'set-google-translate-languages)
;; Lisps ----------------------------------------------------------------------
(evil-leader/set-key-for-mode 'emacs-lisp-mode
"me$" 'spacemacs/eval-sexp-end-of-line
"mee" 'eval-last-sexp
"mef" 'eval-defun
"md" 'elisp-slime-nav-describe-elisp-thing-at-point
"mg" 'elisp-slime-nav-find-elisp-thing-at-point
"mtb" 'spacemacs/ert-run-tests-buffer
"mtt" 'ert)