branch: elpa/evil-lisp-state
commit ab02bf8cd3d31fb698b85ede0dbf2c666c498e37
Author: syl20bnr <[email protected]>
Commit: syl20bnr <[email protected]>
Version 8: use bind-map instead of evil-leader
---
README.md | 126 +++++++++++++++++++++++------------------------
evil-lisp-state.el | 141 ++++++++++++++++++++++++++---------------------------
2 files changed, 130 insertions(+), 137 deletions(-)
diff --git a/README.md b/README.md
index cdeb8af6b0..fdf9f6d2d4 100644
--- a/README.md
+++ b/README.md
@@ -38,90 +38,86 @@ Or add it to your `Cask` file:
### Manually
Add `evil-lisp-state.el` to your load path. `evil-lisp-state` requires
-both `evil`, `evil-leader` and `smartparens` to be installed.
+both `evil`, `bind-map` and `smartparens` to be installed.
## Principle
-To execute a command while in normal state, the evil-leader is used.
-By default, the prefix for each command is `<leader> m`.
-Commands when executed set the current state to `lisp state`.
+To execute a command while in normal state, a leader key is used.
+By default, the leader for each command is `SPC l`.
+Any command when executed sets the current state to `lisp state`.
Examples:
- to slurp three times while in normal state:
- <leader> m 3 s
+ <leader> 3 s
- to wrap a symbol in parenthesis then slurping two times:
- <leader> m w 2 s
+ <leader> w 2 s
## Key Bindings
-Key Binding | Function
-----------------------------|------------------------------------------------------------
-<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 ` k</kbd> | hybrid version of kill sexp (can be used in non
lisp dialects)
-<kbd>\<leader\> m ` p</kbd> | hybrid version of push sexp (can be used in non
lisp dialects)
-<kbd>\<leader\> m ` s</kbd> | hybrid version of slurp sexp (can be used in non
lisp dialects)
-<kbd>\<leader\> m ` t</kbd> | hybrid version of transpose sexp (can be used in
non lisp dialects)
-<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 ds</kbd> | delete symbol
-<kbd>\<leader\> m Ds</kbd> | backward delete symbol
-<kbd>\<leader\> m dw</kbd> | delete word
-<kbd>\<leader\> m Dw</kbd> | backward delete word
-<kbd>\<leader\> m dx</kbd> | delete expression
-<kbd>\<leader\> m Dx</kbd> | backward delete expression
-<kbd>\<leader\> m e</kbd> | unwrap current expression and kill all symbols
after point
-<kbd>\<leader\> m E</kbd> | unwrap current expression and kill all symbols
before point
-<kbd>\<leader\> m h</kbd> | previous symbol
-<kbd>\<leader\> m H</kbd> | go to previous sexp
-<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 closing parenthesis
-<kbd>\<leader\> m J</kbd> | join expression
-<kbd>\<leader\> m k</kbd> | previous opening parenthesis
-<kbd>\<leader\> m l</kbd> | next symbol
-<kbd>\<leader\> m L</kbd> | go to next sexp
-<kbd>\<leader\> m p</kbd> | paste after
-<kbd>\<leader\> m P</kbd> | paste before
-<kbd>\<leader\> m r</kbd> | raise expression (replace parent expression by
current one)
-<kbd>\<leader\> m s</kbd> | forwared slurp expression
-<kbd>\<leader\> m S</kbd> | backward slurp expression
-<kbd>\<leader\> m t</kbd> | transpose expression
-<kbd>\<leader\> m u</kbd> | undo
-<kbd>\<leader\> m U</kbd> | got to parent sexp backward
-<kbd>\<leader\> m C-r</kbd> | redo
-<kbd>\<leader\> m v</kbd> | switch to `visual state`
-<kbd>\<leader\> m V</kbd> | switch to `visual line state`
-<kbd>\<leader\> m C-v</kbd> | switch to `visual block state`
-<kbd>\<leader\> m w</kbd> | wrap expression with parenthesis
-<kbd>\<leader\> m W</kbd> | unwrap expression
-<kbd>\<leader\> m y</kbd> | copy expression
+Key Binding | Function
+--------------------------|------------------------------------------------------------
+<kbd>\<leader\> %</kbd> | evil jump item
+<kbd>\<leader\> :</kbd> | ex command
+<kbd>\<leader\> (</kbd> | insert expression before (same level as current
one)
+<kbd>\<leader\> )</kbd> | insert expression after (same level as current one)
+<kbd>\<leader\> $</kbd> | go to the end of current sexp
+<kbd>\<leader\> ` k</kbd> | hybrid version of kill sexp (can be used in non
lisp dialects)
+<kbd>\<leader\> ` p</kbd> | hybrid version of push sexp (can be used in non
lisp dialects)
+<kbd>\<leader\> ` s</kbd> | hybrid version of slurp sexp (can be used in non
lisp dialects)
+<kbd>\<leader\> ` t</kbd> | hybrid version of transpose sexp (can be used in
non lisp dialects)
+<kbd>\<leader\> 0</kbd> | go to the beginning of current sexp
+<kbd>\<leader\> a</kbd> | absorb expression
+<kbd>\<leader\> b</kbd> | forward barf expression
+<kbd>\<leader\> B</kbd> | backward barf expression
+<kbd>\<leader\> c</kbd> | convolute expression
+<kbd>\<leader\> ds</kbd> | delete symbol
+<kbd>\<leader\> Ds</kbd> | backward delete symbol
+<kbd>\<leader\> dw</kbd> | delete word
+<kbd>\<leader\> Dw</kbd> | backward delete word
+<kbd>\<leader\> dx</kbd> | delete expression
+<kbd>\<leader\> Dx</kbd> | backward delete expression
+<kbd>\<leader\> e</kbd> | unwrap current expression and kill all symbols
after point
+<kbd>\<leader\> E</kbd> | unwrap current expression and kill all symbols
before point
+<kbd>\<leader\> h</kbd> | previous symbol
+<kbd>\<leader\> H</kbd> | go to previous sexp
+<kbd>\<leader\> i</kbd> | switch to `insert state`
+<kbd>\<leader\> I</kbd> | go to beginning of current expression and switch
to `insert state`
+<kbd>\<leader\> j</kbd> | next closing parenthesis
+<kbd>\<leader\> J</kbd> | join expression
+<kbd>\<leader\> k</kbd> | previous opening parenthesis
+<kbd>\<leader\> l</kbd> | next symbol
+<kbd>\<leader\> L</kbd> | go to next sexp
+<kbd>\<leader\> p</kbd> | paste after
+<kbd>\<leader\> P</kbd> | paste before
+<kbd>\<leader\> r</kbd> | raise expression (replace parent expression by
current one)
+<kbd>\<leader\> s</kbd> | forwared slurp expression
+<kbd>\<leader\> S</kbd> | backward slurp expression
+<kbd>\<leader\> t</kbd> | transpose expression
+<kbd>\<leader\> u</kbd> | undo
+<kbd>\<leader\> U</kbd> | got to parent sexp backward
+<kbd>\<leader\> C-r</kbd> | redo
+<kbd>\<leader\> v</kbd> | switch to `visual state`
+<kbd>\<leader\> V</kbd> | switch to `visual line state`
+<kbd>\<leader\> C-v</kbd> | switch to `visual block state`
+<kbd>\<leader\> w</kbd> | wrap expression with parenthesis
+<kbd>\<leader\> W</kbd> | unwrap expression
+<kbd>\<leader\> y</kbd> | copy expression
## Configuration
-Key bindings are set only for `emacs-lisp-mode` by default.
-It is possible to add major modes with the variable
-`evil-lisp-state-major-modes'.
+Key bindings are set only for `emacs-lisp-mode` by default. 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.
+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
-if you want all the commands to be directly available
-under the `<leader>` key.
+The leader key is `SPC l` by default, it is possible to change it with the
+variable `evil-lisp-state-leader'.
[evil-link]: https://gitorious.org/evil/pages/Home
[smartparens-link]: https://github.com/Fuco1/smartparens/wiki
diff --git a/evil-lisp-state.el b/evil-lisp-state.el
index 20bddde671..ff49bcd143 100644
--- a/evil-lisp-state.el
+++ b/evil-lisp-state.el
@@ -5,8 +5,8 @@
;; Author: Sylvain Benner <[email protected]>
;; Keywords: convenience editing evil smartparens lisp mnemonic
;; Created: 9 Oct 2014
-;; Version: 7.1
-;; Package-Requires: ((evil "1.0.9") (evil-leader "0.4.3") (smartparens
"1.6.1"))
+;; Version: 8.0
+;; Package-Requires: ((evil "1.0.9") (bind-map "0") (smartparens "1.6.1"))
;; URL: https://github.com/syl20bnr/evil-lisp-state
;; This file is not part of GNU Emacs.
@@ -32,61 +32,60 @@
;; Principle:
;; ----------
-;; To execute a command while in normal state, the evil-leader is used.
-;; By default, the prefix for each command is `<leader> m`.
-;; Commands when executed set the current state to `lisp state`.
+;; To execute a command while in normal state, a leader is used.
+;; By default, the leader for each command is `SPC l`.
+;; Any command when executed sets the current state to `lisp state`.
;; By example, to slurp three times while in normal state:
-;; <leader> m 3 s
+;; <leader> 3 s
;; Or to wrap a symbol in parenthesis then slurping two times:
-;; <leader> m w 2 s
-
-;; 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 ` k' | hybrid version of kill sexp (can be used in non lisp
dialects)
-;; `leader m ` p' | hybrid version of push sexp (can be used in non lisp
dialects)
-;; `leader m ` s' | hybrid version of slurp sexp (can be used in non lisp
dialects)
-;; `leader m ` t' | hybrid version of transpose sexp (can be used in non lisp
dialects)
-;; `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 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 H' | go to previous sexp
-;; `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 J' | join expression
-;; `leader m k' | previous opening parenthesis
-;; `leader m l' | next symbol
-;; `leader m L' | go to next sexp
-;; `leader m p' | paste after
-;; `leader m P' | paste before
-;; `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 U' | got to parent sexp backward
-;; `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 y' | copy expression
+;; <leader> w 2 s
+
+;; Key Binding | Function
+;; -------------|------------------------------------------------------------
+;; `leader %' | evil jump item
+;; `leader :' | ex command
+;; `leader (' | insert expression before (same level as current one)
+;; `leader )' | insert expression after (same level as current one)
+;; `leader $' | go to the end of current sexp
+;; `leader ` k' | hybrid version of kill sexp (can be used in non lisp
dialects)
+;; `leader ` p' | hybrid version of push sexp (can be used in non lisp
dialects)
+;; `leader ` s' | hybrid version of slurp sexp (can be used in non lisp
dialects)
+;; `leader ` t' | hybrid version of transpose sexp (can be used in non lisp
dialects)
+;; `leader 0' | go to the beginning of current sexp
+;; `leader a' | absorb expression
+;; `leader b' | forward barf expression
+;; `leader B' | backward barf expression
+;; `leader c' | convolute expression
+;; `leader ds' | delete symbol
+;; `leader dw' | delete word
+;; `leader dx' | delete expression
+;; `leader e' | (splice) unwrap current expression and kill all symbols
after point
+;; `leader E' | (splice) unwrap current expression and kill all symbols
before point
+;; `leader h' | previous symbol
+;; `leader H' | go to previous sexp
+;; `leader i' | switch to `insert state`
+;; `leader I' | go to beginning of current expression and switch to `insert
state`
+;; `leader j' | next closing parenthesis
+;; `leader J' | join expression
+;; `leader k' | previous opening parenthesis
+;; `leader l' | next symbol
+;; `leader L' | go to next sexp
+;; `leader p' | paste after
+;; `leader P' | paste before
+;; `leader r' | raise expression (replace parent expression by current one)
+;; `leader s' | forwared slurp expression
+;; `leader S' | backward slurp expression
+;; `leader t' | transpose expression
+;; `leader u' | undo
+;; `leader U' | got to parent sexp backward
+;; `leader C-r' | redo
+;; `leader v' | switch to `visual state`
+;; `leader V' | switch to `visual line state`
+;; `leader C-v' | switch to `visual block state`
+;; `leader w' | wrap expression with parenthesis
+;; `leader W' | unwrap expression
+;; `leader y' | copy expression
;; Configuration:
;; --------------
@@ -99,16 +98,12 @@
;; 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
-;; if you want all the commands to be directly available
-;; under the `<leader>' key.
+;; The leader key is `SPC l' by default, it is possible to
+;; change it with the variable `evil-lisp-state-leader'.
;;; Code:
(require 'evil)
-(require 'evil-leader)
(require 'smartparens)
(evil-define-state lisp
@@ -126,8 +121,8 @@
:prefix 'evil-lisp-state-)
(eval-and-compile
- (defcustom evil-lisp-state-leader-prefix "m"
- "Prefix key added to evil-lader."
+ (defcustom evil-lisp-state-leader "SPC l"
+ "Leader key."
:type 'string
:group 'evil-lisp-state)
@@ -162,6 +157,16 @@ If `evil-lisp-state-global' is non nil then this variable
has no effect."
(evil-normal-state)
(call-interactively ',command)))
+
+;; leader maps
+(bind-map evil-lisp-state-map
+ :evil-keys (evil-lisp-state-leader)
+ :evil-states (normal))
+(bind-map evil-lisp-state-major-modes-map
+ :evil-keys (evil-lisp-state-leader)
+ :evil-states (normal)
+ :major-modes (evil-lisp-state-major-modes))
+
;; escape
(define-key evil-lisp-state-map [escape] 'evil-normal-state)
;; toggle lisp state
@@ -171,8 +176,6 @@ If `evil-lisp-state-global' is non nil then this variable
has no effect."
(define-key evil-lisp-state-map "j" 'evil-next-visual-line)
(define-key evil-lisp-state-map "k" 'evil-previous-visual-line)
(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)
;; auto-switch to lisp state commands
(defconst evil-lisp-state-commands
@@ -237,15 +240,9 @@ If `evil-lisp-state-global' is non nil then this variable
has no effect."
(cmd (cdr x)))
(eval
`(progn
- (define-key evil-lisp-state-map ,(kbd key) ',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))))))))
+ (define-key evil-lisp-state-map ,(kbd key) ',cmd)
+ (define-key evil-lisp-state-major-mode-map ,(kbd key) ',cmd))))))
(defun lisp-state-toggle-lisp-state ()
"Toggle the lisp state."