+;; FIXME: No popup menu, no customized color
+(defun smiley-buffer-ems (&optional buffer st nd)
+ (interactive)
+ (when window-system
+ (save-excursion
+ (when buffer
+ (set-buffer buffer))
+ (let ((buffer-read-only nil)
+ (alist (if (symbolp smiley-regexp-alist)
+ (symbol-value smiley-regexp-alist)
+ smiley-regexp-alist))
+ (case-fold-search nil)
+ entry regexp beg group file)
+ (dolist (overlay (overlays-in (or st (point-min))
+ (or nd (point-max))))
+ (when (overlay-get overlay 'smiley)
+ (remove-text-properties (overlay-start overlay)
+ (overlay-end overlay) '(display))
+ (delete-overlay overlay)))
+ (goto-char (or st (point-min)))
+ (setq beg (point))
+ ;; loop through alist
+ (while (setq entry (pop alist))
+ (setq regexp (car entry)
+ group (cadr entry)
+ file (caddr entry))
+ (goto-char beg)
+ (while (re-search-forward regexp nd t)
+ (let* ((start (match-beginning group))
+ (end (match-end group))
+ (glyph (smiley-create-glyph nil file))
+ (overlay (make-overlay start end)))
+ (when glyph
+ (add-text-properties start end
+ `(display ,glyph))
+ (overlay-put overlay 'smiley glyph)
+ (goto-char end)))))))))
+