Function: insert-sliced-image
insert-sliced-image is an autoloaded and byte-compiled function
defined in image.el.gz.
Signature
(insert-sliced-image IMAGE &optional STRING AREA ROWS COLS)
Documentation
Insert IMAGE into current buffer at point.
IMAGE is displayed by inserting STRING into the current buffer
with a display property whose value is the image. The default
STRING is a single space.
AREA is where to display the image. AREA nil or omitted means
display it in the text area, a value of left-margin means
display it in the left marginal area, a value of right-margin
means display it in the right marginal area.
The image is automatically split into ROWS x COLS slices.
Probably introduced at or before Emacs version 22.1.
Source Code
;; Defined in /usr/src/emacs/lisp/image.el.gz
;;;###autoload
(defun insert-sliced-image (image &optional string area rows cols)
"Insert IMAGE into current buffer at point.
IMAGE is displayed by inserting STRING into the current buffer
with a `display' property whose value is the image. The default
STRING is a single space.
AREA is where to display the image. AREA nil or omitted means
display it in the text area, a value of `left-margin' means
display it in the left marginal area, a value of `right-margin'
means display it in the right marginal area.
The image is automatically split into ROWS x COLS slices."
(unless string (setq string " "))
(unless (eq (car-safe image) 'image)
(error "Not an image: %s" image))
(unless (or (null area) (memq area '(left-margin right-margin)))
(error "Invalid area %s" area))
(if area
(setq image (list (list 'margin area) image))
;; Cons up a new spec equal but not eq to `image' so that
;; inserting it twice in a row (adjacently) displays two copies of
;; the image. Don't try to avoid this by looking at the display
;; properties on either side so that we DTRT more often with
;; cut-and-paste. (Yanking killed image text next to another copy
;; of it loses anyway.)
(setq image (cons 'image (cdr image))))
(let ((x 0.0) (dx (/ 1.0001 (or cols 1)))
(y 0.0) (dy (/ 1.0001 (or rows 1))))
(while (< y 1.0)
(while (< x 1.0)
(let ((start (point)))
(insert string)
(add-text-properties start (point)
`(display ,(list (list 'slice x y dx dy) image)
rear-nonsticky (display keymap)
keymap ,image-slice-map))
(setq x (+ x dx))))
(setq x 0.0
y (+ y dy))
(insert (propertize "\n" 'line-height t)))))