Mercurial > emacs
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))