+ (if (and (not (console-on-window-system-p))
+ (and (featurep 'gpm)
+ (not gpm-minor-mode)))
+ (yank)
+ (push-mark)
+ (if (region-active-p)
+ (if (consp zmacs-region-extent)
+ ;; pirated code from insert-rectangle in rect.el
+ ;; perhaps that code should be modified to handle a list of extents
+ ;; as the rectangle to be inserted?
+ (let ((lines zmacs-region-extent)
+ (insertcolumn (current-column))
+ (first t))
+ (push-mark)
+ (while lines
+ (or first
+ (progn
+ (forward-line 1)
+ (or (bolp) (insert ?\n))
+ (move-to-column insertcolumn t)))
+ (setq first nil)
+ (insert (extent-string (car lines)))
+ (setq lines (cdr lines))))
+ (insert (extent-string zmacs-region-extent)))
+ (insert-selection t))))
+
+(defun insert-selection (&optional check-cutbuffer-p move-point-event)
+ "Insert the current selection into buffer at point."
+ (interactive "P")
+ ;; we fallback to the clipboard if the current selection is not existent
+ (let ((text (if check-cutbuffer-p
+ (or (get-selection-no-error)
+ (get-cutbuffer)
+ (get-selection-no-error 'CLIPBOARD)
+ (error "No selection, clipboard or cut buffer available"))
+ (or (get-selection-no-error)
+ (get-selection 'CLIPBOARD)))))
+ (cond (move-point-event
+ (mouse-set-point move-point-event)
+ (push-mark (point)))
+ ((interactive-p)
+ (push-mark (point))))
+ (insert text)
+ ))