diff options
author | Richard M. Stallman <rms@gnu.org> | 1993-08-04 04:37:11 +0000 |
---|---|---|
committer | Richard M. Stallman <rms@gnu.org> | 1993-08-04 04:37:11 +0000 |
commit | a2d24e958ac600d47716db68f9b1594d7c02debe (patch) | |
tree | 8d6e28982acd1c2527a283b1272271d01911cf90 /lisp | |
parent | cefeb3a98d5677665742875f7d0b1eed6fb6792d (diff) | |
download | emacs-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.el | 17 |
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)) |