From ecb10dded952ceac06e0c581ccaffc71a996af6c Mon Sep 17 00:00:00 2001
From: Michael Markert <markert.michael@googlemail.com>
Date: Sun, 7 Aug 2011 23:10:16 +0200
Subject: [PATCH] Add `evil-toggle-key' custom for normal/emacs state
 toggling.

Signed-off-by: Michael Markert <markert.michael@googlemail.com>
---
 evil-maps.el |    4 ++--
 evil-vars.el |   20 ++++++++++++++++++++
 2 files changed, 22 insertions(+), 2 deletions(-)

diff --git a/evil-maps.el b/evil-maps.el
index 27af181..68d04be 100644
--- a/evil-maps.el
+++ b/evil-maps.el
@@ -236,7 +236,7 @@
 (define-key evil-motion-state-map (kbd "C-f") 'evil-scroll-page-down)
 (define-key evil-motion-state-map (kbd "C-o") 'evil-jump-backward)
 (define-key evil-motion-state-map (kbd "C-y") 'evil-scroll-line-up)
-(define-key evil-motion-state-map (kbd "C-z") 'evil-emacs-state)
+(define-key evil-motion-state-map (read-kbd-macro evil-toggle-key) 'evil-emacs-state)
 (define-key evil-motion-state-map (kbd "RET") 'evil-ret)
 (define-key evil-motion-state-map "z^" 'evil-scroll-top-line-to-bottom)
 (define-key evil-motion-state-map "z+" 'evil-scroll-bottom-line-to-top)
@@ -292,7 +292,7 @@
 
 ;;; Emacs state
 
-(define-key evil-emacs-state-map "\C-z" 'evil-exit-emacs-state)
+(define-key evil-emacs-state-map (read-kbd-macro evil-toggle-key) 'evil-exit-emacs-state)
 
 ;;; Minibuffer
 
diff --git a/evil-vars.el b/evil-vars.el
index fa44844..2d1cc6a 100644
--- a/evil-vars.el
+++ b/evil-vars.el
@@ -88,6 +88,26 @@ which causes the parenthesis to be highlighted."
   :type 'boolean
   :group 'evil)
 
+(defcustom evil-toggle-key "C-z"
+  "The key used to change from motion/normal state to emacs and back.
+
+Enter as `READ-KBD-MACRO' readable string. Example: \"C-z\"."
+  :type 'string
+  :group 'evil
+  :set (lambda (sym value)
+         (let ((old-value (if (boundp 'evil-toggle-key)
+                              evil-toggle-key
+                            "C-z")))
+           (when (and (boundp 'evil-motion-state-map)
+                      (keymapp evil-motion-state-map))
+             (define-key evil-motion-state-map (read-kbd-macro value) 'evil-emacs-state)
+             (define-key evil-motion-state-map (read-kbd-macro old-value) nil))
+           (when (and (boundp 'evil-emacs-state-map)
+                      (keymapp evil-emacs-state-map))
+             (define-key evil-emacs-state-map (read-kbd-macro value) 'evil-exit-emacs-state)
+             (define-key evil-emacs-state-map (read-kbd-macro old-value) nil))
+           (set-default sym value))))
+
 (defcustom evil-emacs-state-modes
   '(bookmark-bmenu-mode
     bookmark-edit-annotation-mode
-- 
1.7.5.4

