changeset 4449:c6c254105f7f

(mouse-save-then-kill): Don't discard all the normal undo info; just replace the deletion entry.
author Richard M. Stallman <rms@gnu.org>
date Wed, 04 Aug 1993 04:37:11 +0000
parents 472166db995e
children 325bc5407213
files lisp/mouse.el
diffstat 1 files changed, 14 insertions(+), 3 deletions(-) [+]
line wrap: on
line diff
--- a/lisp/mouse.el	Wed Aug 04 04:18:32 1993 +0000
+++ b/lisp/mouse.el	Wed Aug 04 04:37:11 1993 +0000
@@ -347,12 +347,23 @@
 	;; If this is the second time we've called
 	;; mouse-save-then-kill, delete the text from the buffer.
 	(progn
+	  ;; Delete just one char, so in case buffer is being modified
+	  ;; for the first time, the undo list records that fact.
+	  (delete-region (point)
+			 (+ (point) (if (> (mark) (point)) 1 -1)))
+	  ;; Now delete the rest of the specified region,
+	  ;; but don't record it.
 	  (let ((buffer-undo-list t))
 	    (delete-region (point) (mark)))
-	  ;; Make the undo list by hand so it is shared.
 	  (if (not (eq buffer-undo-list t))
-	      (setq buffer-undo-list
-		    (cons (cons (car kill-ring) (point)) buffer-undo-list))))
+	      (let ((tail buffer-undo-list))
+		;; Search back in buffer-undo-list for the string
+		;; that came from the first delete-region.
+		(while (and tail (not (stringp (car (car tail)))))
+		  (setq tail (cdr tail)))
+		;; Replace it with an entry for the entire deleted text.
+		(and tail
+		     (setcar tail (cons (car kill-ring) (point))))))))
       ;; Otherwise, save this region.
       (mouse-set-mark-fast click)
       (kill-ring-save (point) (mark t))