Function: viper-Put-back

viper-Put-back is an interactive and byte-compiled function defined in viper-cmd.el.gz.

Signature

(viper-Put-back ARG)

Documentation

Put back at point/above line.

Key Bindings

Source Code

;; Defined in /usr/src/emacs/lisp/emulation/viper-cmd.el.gz
(defun viper-Put-back (arg)
  "Put back at point/above line."
  (interactive "P")
  (let ((val (viper-p-val arg))
	(text (if viper-use-register
		  (cond ((viper-valid-register viper-use-register '(digit))
			 (current-kill
			  (- viper-use-register ?1) 'do-not-rotate))
			((viper-valid-register viper-use-register)
			 (get-register (downcase viper-use-register)))
			(t (error viper-InvalidRegister viper-use-register)))
		(current-kill 0)))
	sv-point chars-inserted lines-inserted)
    (if (null text)
	(if viper-use-register
	    (let ((reg viper-use-register))
	      (setq viper-use-register nil)
	      (error viper-EmptyRegister reg))
	  (user-error viper-ViperBell)))
    (if (viper-end-with-a-newline-p text) (beginning-of-line))
    (viper-set-destructive-command
     (list 'viper-Put-back val nil viper-use-register nil nil))
    (setq viper-use-register nil)
    (set-marker (mark-marker) (point) (current-buffer))
    (setq sv-point (point))
    (viper-loop val (viper-yank text))
    (setq chars-inserted (abs (- (point) sv-point))
	  lines-inserted (abs (count-lines (point) sv-point)))
    (if (or (> chars-inserted viper-change-notification-threshold)
	    (> lines-inserted viper-change-notification-threshold))
	(unless (viper-is-in-minibuffer)
	  (message "Inserted %d character(s), %d line(s)"
		   chars-inserted lines-inserted))))
  ;; Vi puts cursor on the last char when the yanked text doesn't contain a
  ;; newline; it leaves the cursor at the beginning when the text contains
  ;; a newline
  (if (viper-same-line (point) (mark))
      (or (= (point) (mark)) (viper-backward-char-carefully))
    (exchange-point-and-mark)
    (if (bolp)
	(back-to-indentation)))
  (deactivate-mark))