diff --git a/doc/DOCUMENTATION.md b/doc/DOCUMENTATION.md
index 3924e221a..818a08405 100644
--- a/doc/DOCUMENTATION.md
+++ b/doc/DOCUMENTATION.md
@@ -117,6 +117,8 @@
- [Helm-swoop](#helm-swoop)
- [Editing](#editing)
- [Paste text](#paste-text)
+ - [Paste Micro-state](#paste-micro-state)
+ - [Auto-indent pasted text](#auto-indent-pasted-text)
- [Text manipulation commands](#text-manipulation-commands)
- [Smartparens Strict mode](#smartparens-strict-mode)
- [Zooming](#zooming)
@@ -1871,6 +1873,8 @@ Key Binding | Description
### Paste text
+#### Paste Micro-state
+
Whenever you paste some text a `paste` micro-state is initiated. Pressing
p again will replace the pasted text with the previous
yanked (copied) text on the kill ring.
@@ -1889,6 +1893,15 @@ Any other key | leave the micro-state
This micro-state can be disabled by setting
`dotspacemacs-enable-paste-micro-state` to `nil` in `~/.spacemacs`.
+#### Auto-indent pasted text
+
+By default any pasted text will be auto-indented. To paste text un-indented
+use the universal argument.
+
+It is possible to disable the auto-indentation for specific major-modes by
+adding a major-mode to the variable `spacemacs-indent-sensitive-modes` in
+your `dotspacemacs/config` function.
+
### Text manipulation commands
Text related commands (start with `x`):
diff --git a/spacemacs/funcs.el b/spacemacs/funcs.el
index 86552863b..bc818737b 100644
--- a/spacemacs/funcs.el
+++ b/spacemacs/funcs.el
@@ -144,6 +144,7 @@ the current state and point position."
(setq counter (1- counter)))))
;; from Prelude
+;; TODO: dispatch these in the layers
(defvar spacemacs-indent-sensitive-modes
'(coffee-mode
python-mode
@@ -897,12 +898,13 @@ The body of the advice is in BODY."
(if (<= (- end beg) spacemacs-yank-indent-threshold)
(indent-region beg end nil)))
-(spacemacs|advise-commands "indent" (yank yank-pop evil-paste-after) after
- "If current mode is not one of spacemacs-indent-sensitive-modes
-indent yanked text (with prefix arg don't indent)."
- (if (and (not (ad-get-arg 0))
- (not (member major-mode spacemacs-indent-sensitive-modes))
- (or (derived-mode-p 'prog-mode)
- (member major-mode spacemacs-indent-sensitive-modes)))
- (let ((transient-mark-mode nil))
- (yank-advised-indent-function (region-beginning) (region-end)))))
+(spacemacs|advise-commands
+ "indent" (yank yank-pop evil-paste-before evil-paste-after) after
+ "If current mode is not one of spacemacs-indent-sensitive-modes
+ indent yanked text (with universal arg don't indent)."
+ (if (and (not (equal '(4) (ad-get-arg 0)))
+ (not (member major-mode spacemacs-indent-sensitive-modes))
+ (or (derived-mode-p 'prog-mode)
+ (member major-mode spacemacs-indent-sensitive-modes)))
+ (let ((transient-mark-mode nil))
+ (yank-advised-indent-function (region-beginning) (region-end)))))
diff --git a/spacemacs/packages.el b/spacemacs/packages.el
index ec60a58ef..093993cc3 100644
--- a/spacemacs/packages.el
+++ b/spacemacs/packages.el
@@ -719,18 +719,21 @@ Example: (evil-map visual \"<\" \"" spacemacs/scroll-half-page-down))
+ ;; support for auto-indentation inhibition on universal argument
+ (spacemacs|advise-commands
+ "handle-indent" (evil-paste-before evil-paste-after) around
+ "Handle the universal prefix argument for auto-indentation."
+ (let ((prefix (ad-get-arg 0)))
+ (ad-set-arg 0 (unless (equal '(4) prefix) prefix))
+ ad-do-it
+ (ad-set-arg 0 prefix)))
+
;; pasting micro-state
- (defadvice evil-paste-before (after spacemacs/evil-paste-before activate)
- "Initate the paste micro-state after the execution of evil-paste-before"
- (unless (evil-ex-p)
- (spacemacs/paste-micro-state)))
- (defadvice evil-paste-after (after spacemacs/evil-paste-after activate)
- "Initate the paste micro-state after the execution of evil-paste-after"
- (unless (evil-ex-p)
- (spacemacs/paste-micro-state)))
- (defadvice evil-visual-paste (after spacemacs/evil-visual-paste activate)
- "Initate the paste micro-state after the execution of evil-visual-paste"
- (spacemacs/paste-micro-state))
+ (spacemacs|advise-commands
+ "past-micro-state"
+ (evil-paste-before evil-paste-after evil-visual-paste) after
+ "Initate the paste micro-state."
+ (unless (evil-ex-p) (spacemacs/paste-micro-state)))
(defun spacemacs//paste-ms-doc ()
"The documentation for the paste micro-state."
(format (concat "[%s/%s] Type [p] or [P] to paste the previous or "
@@ -743,11 +746,14 @@ Example: (evil-map visual \"<\" \"