From deb16892d23f3cce086f26042c70ab09c51923f6 Mon Sep 17 00:00:00 2001
From: York Zhao <yzhao@telecor.com>
Date: Sat, 30 Jul 2011 22:30:42 -0400
Subject: [PATCH 3/3] Insert state paste

Paste in insert state by "CTRL-R <register>"
---
 evil-common.el |   18 ++++++++++++++++++
 evil-insert.el |    8 ++++++++
 evil-maps.el   |    1 +
 3 files changed, 27 insertions(+), 0 deletions(-)

diff --git a/evil-common.el b/evil-common.el
index f38287b..5eccdad 100644
--- a/evil-common.el
+++ b/evil-common.el
@@ -836,6 +836,24 @@ POS defaults to the current position of point."
      ("(\\(evil-\\(?:[-[:word:]]\\)*loop\\)\\>"
       1 font-lock-keyword-face))))
 
+;;; Register
+
+;; Copied from `viper-util.el'
+;; Check if arg is a valid character for register
+;; TYPE is a list that can contain `letter', `Letter', and `digit'.
+;; `letter' means lowercase letters, `Letter' means uppercase letters, and
+;; `digit' means digits from 1 to 9.
+;; If TYPE is nil, then down/uppercase letters and digits are allowed.
+(defun evil-valid-register (reg &optional type)
+  (or type (setq type '(letter Letter digit)))
+  (or (if (memq 'letter type)
+	  (and (<= ?a reg) (<= reg ?z)))
+      (if (memq 'digit type)
+	  (and (<= ?1 reg) (<= reg ?9)))
+      (if (memq 'Letter type)
+	  (and (<= ?A reg) (<= reg ?Z)))
+      ))
+
 (provide 'evil-common)
 
 ;;; evil-common.el ends here
diff --git a/evil-insert.el b/evil-insert.el
index 2b5dc22..160ccb1 100644
--- a/evil-insert.el
+++ b/evil-insert.el
@@ -289,6 +289,14 @@ Search forward if a match isn't found."
            try-expand-line-all-buffers)))
     (hippie-expand arg)))
 
+;; Paste in Insert state by pressing "C-r <register>"
+(defun evil-paste-in-insert (register)
+  "Paste in Insert state from REGISTER."
+  (interactive (list (read-char)))
+  (if (evil-valid-register register)
+      (evil-paste-before nil register)
+    (evil-paste-before nil)))
+
 (provide 'evil-insert)
 
 ;;; evil-insert.el ends here
diff --git a/evil-maps.el b/evil-maps.el
index f53a0b0..aa0e410 100644
--- a/evil-maps.el
+++ b/evil-maps.el
@@ -269,6 +269,7 @@
 
 (define-key evil-insert-state-map "\C-k" 'evil-insert-digraph)
 (define-key evil-insert-state-map "\C-o" 'evil-execute-in-normal-state)
+(define-key evil-insert-state-map "\C-r" 'evil-paste-in-insert)
 (define-key evil-insert-state-map "\C-y" 'evil-copy-from-above)
 (define-key evil-insert-state-map "\C-e" 'evil-copy-from-below)
 (define-key evil-insert-state-map "\C-p" 'evil-complete)
-- 
1.7.5.GIT

