1
0
mirror of https://git.savannah.gnu.org/git/emacs.git synced 2024-11-24 07:20:37 +00:00

(mouse-save-then-kill-delete-region): Take args BEG and END.

Update the undo list properly.
(mouse-save-then-kill): Pass those args.
(mouse-secondary-save-then-kll): Pass those args.
Delete the overlay after deleting the selection text.
This commit is contained in:
Richard M. Stallman 1993-11-14 06:26:02 +00:00
parent 18e90c5846
commit 26d280b955

View File

@ -194,7 +194,6 @@ release the mouse button. Otherwise, it does not."
(setq event (read-event))
(or (mouse-movement-p event)
(eq (car-safe event) 'switch-frame)))
(if (eq (car-safe event) 'switch-frame)
nil
(setq end (event-end event)
@ -378,15 +377,18 @@ This does not delete the region; it acts like \\[kill-ring-save]."
;;; invocation of mouse-save-then-kill.
(defvar mouse-save-then-kill-posn nil)
(defun mouse-save-then-kill-delete-region ()
(defun mouse-save-then-kill-delete-region (beg end)
;; 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)))
(delete-region beg
(+ beg (if (> end beg) 1 -1)))
(let ((buffer-undo-list buffer-undo-list))
;; Undo that deletion--but don't change the undo list!
(primitive-undo 1 buffer-undo-list)
;; Now delete the rest of the specified region,
;; but don't record it.
(setq buffer-undo-list t)
(delete-region beg end))
(if (not (eq buffer-undo-list t))
(let ((tail buffer-undo-list))
;; Search back in buffer-undo-list for the string
@ -395,7 +397,7 @@ This does not delete the region; it acts like \\[kill-ring-save]."
(setq tail (cdr tail)))
;; Replace it with an entry for the entire deleted text.
(and tail
(setcar tail (cons (car kill-ring) (point)))))))
(setcar tail (cons (car kill-ring) (min beg end)))))))
(defun mouse-save-then-kill (click)
"Save text to point in kill ring; the second time, kill the text.
@ -439,14 +441,14 @@ If you do this twice in the same position, the selection is killed."
(mouse-show-mark))
;; If we click this button again without moving it,
;; that time kill.
(mouse-save-then-kill-delete-region))
(mouse-save-then-kill-delete-region (point) (mark)))
(if (and (eq last-command 'mouse-save-then-kill)
mouse-save-then-kill-posn
(eq (car mouse-save-then-kill-posn) (car kill-ring))
(equal (cdr mouse-save-then-kill-posn) (list (point) click-posn)))
;; If this is the second time we've called
;; mouse-save-then-kill, delete the text from the buffer.
(mouse-save-then-kill-delete-region)
(mouse-save-then-kill-delete-region (point) (mark))
(if (or (eq last-command 'mouse-save-then-kill)
(and mark-active transient-mark-mode)
(and (eq last-command 'mouse-drag-region)
@ -541,17 +543,20 @@ This must be bound to a button-down mouse event."
(save-excursion
(set-buffer (window-buffer start-window))
(setq mouse-selection-click-count click-count)
;; Cancel any preexisting secondary selection.
(or mouse-secondary-overlay
(setq mouse-secondary-overlay
(make-overlay (point) (point))))
(overlay-put mouse-secondary-overlay 'face 'secondary-selection)
(if (> click-count 0)
;; Double or triple press: make an initial selection
;; of one word or line.
(let ((range (mouse-start-end start-point start-point click-count)))
(set-marker mouse-secondary-start nil)
(move-overlay mouse-secondary-overlay 1 1
(window-buffer start-window))
(move-overlay mouse-secondary-overlay (car range) (nth 1 range)
(window-buffer start-window)))
;; Single-press: cancel any preexisting secondary selection.
(or mouse-secondary-start
(setq mouse-secondary-start (make-marker)))
(set-marker mouse-secondary-start start-point)
@ -677,8 +682,10 @@ If you do this twice in the same position, the selection is killed."
;; If we click this button again without moving it,
;; that time kill.
(progn
(delete-overlay mouse-secondary-overlay)
(mouse-save-then-kill-delete-region)))
(mouse-save-then-kill-delete-region
(overlay-start mouse-secondary-overlay)
(overlay-end mouse-secondary-overlay))
(delete-overlay mouse-secondary-overlay)))
(if (and (eq last-command 'mouse-secondary-save-then-kill)
mouse-save-then-kill-posn
(eq (car mouse-save-then-kill-posn) (car kill-ring))
@ -686,8 +693,10 @@ If you do this twice in the same position, the selection is killed."
;; If this is the second time we've called
;; mouse-secondary-save-then-kill, delete the text from the buffer.
(progn
(delete-overlay mouse-secondary-overlay)
(mouse-save-then-kill-delete-region))
(mouse-save-then-kill-delete-region
(overlay-start mouse-secondary-overlay)
(overlay-end mouse-secondary-overlay))
(delete-overlay mouse-secondary-overlay))
(if (overlay-start mouse-secondary-overlay)
;; We have a selection, so adjust it.
(progn