diff lisp/subr.el @ 73153:d18b30d3454b

(insert-for-yank-1): Handle `font-lock-face' specially.
author Richard M. Stallman <rms@gnu.org>
date Thu, 28 Sep 2006 19:06:39 +0000
parents c637565b16e8
children d62e39d56ebb bb0e318b7c53
line wrap: on
line diff
--- a/lisp/subr.el	Thu Sep 28 19:00:10 2006 +0000
+++ b/lisp/subr.el	Thu Sep 28 19:06:39 2006 +0000
@@ -2167,11 +2167,32 @@
   (let* ((handler (and (stringp string)
 		       (get-text-property 0 'yank-handler string)))
 	 (param (or (nth 1 handler) string))
-	 (opoint (point)))
+	 (opoint (point))
+	 end)
+
     (setq yank-undo-function t)
     (if (nth 0 handler) ;; FUNCTION
 	(funcall (car handler) param)
       (insert param))
+    (setq end (point))
+
+    ;; What should we do with `font-lock-face' properties?
+    (if font-lock-defaults
+	;; No, just wipe them.
+	(remove-list-of-text-properties opoint end '(font-lock-face))
+      ;; Convert them to `face'.
+      (save-excursion
+	(goto-char opoint)
+	(while (< (point) end)
+	  (let ((face (get-text-property (point) 'font-lock-face))
+		run-end)
+	    (setq run-end
+		  (next-single-property-change (point) 'font-lock-face nil end))
+	    (when face
+	      (remove-text-properties (point) run-end '(font-lock-face nil))
+	      (put-text-property (point) run-end 'face face))
+	    (goto-char run-end)))))
+
     (unless (nth 2 handler) ;; NOEXCLUDE
       (remove-yank-excluded-properties opoint (point)))
     (if (eq yank-undo-function t)  ;; not set by FUNCTION