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 after point/below line.

Key Bindings

Source Code

;; Defined in /usr/src/emacs/lisp/emulation/viper-cmd.el.gz
(defun viper-put-back (arg)
  "Put back after point/below 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)))
    (setq viper-use-register nil)
    (if (viper-end-with-a-newline-p text)
	(progn
	  (end-of-line)
	  (if (eobp)
	      (insert "\n")
	    (forward-line 1))
	  (beginning-of-line))
      (if (not (eolp)) (viper-forward-char-carefully)))
    (set-marker (mark-marker) (point) (current-buffer))
    (viper-set-destructive-command
     (list 'viper-put-back val nil viper-use-register nil nil))
    (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))