summaryrefslogtreecommitdiff
path: root/lisp
diff options
context:
space:
mode:
authorRichard M. Stallman <rms@gnu.org>1993-08-04 04:37:11 +0000
committerRichard M. Stallman <rms@gnu.org>1993-08-04 04:37:11 +0000
commita2d24e958ac600d47716db68f9b1594d7c02debe (patch)
tree8d6e28982acd1c2527a283b1272271d01911cf90 /lisp
parentcefeb3a98d5677665742875f7d0b1eed6fb6792d (diff)
downloademacs-a2d24e958ac600d47716db68f9b1594d7c02debe.tar.gz
(mouse-save-then-kill): Don't discard all the normal
undo info; just replace the deletion entry.
Diffstat (limited to 'lisp')
-rw-r--r--lisp/mouse.el17
1 files changed, 14 insertions, 3 deletions
diff --git a/lisp/mouse.el b/lisp/mouse.el
index 904227727e9..158173b0bcc 100644
--- a/lisp/mouse.el
+++ b/lisp/mouse.el
@@ -347,12 +347,23 @@ which prepares for a second click to delete the text."
;; 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))