summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRichard M. Stallman <rms@gnu.org>1993-05-17 21:52:21 +0000
committerRichard M. Stallman <rms@gnu.org>1993-05-17 21:52:21 +0000
commit66050f1032c6371333e6f0303de01c7022f908ef (patch)
tree9ec489ec7e17a8e5cf9176de7832ac96ea562cfe
parent7492a21ec20088e1e3c55dc9eca09ab267e04478 (diff)
downloademacs-66050f1032c6371333e6f0303de01c7022f908ef.tar.gz
(keyboard-quit): Run deactivate-mark-hook.
(kill-ring-save): If quit happens while cursor is bounced,
-rw-r--r--lisp/simple.el50
1 files changed, 33 insertions, 17 deletions
diff --git a/lisp/simple.el b/lisp/simple.el
index 3b2f28b6e33..550357f9c9b 100644
--- a/lisp/simple.el
+++ b/lisp/simple.el
@@ -1059,21 +1059,35 @@ system cut and paste."
(interactive "r")
(copy-region-as-kill beg end)
(if (interactive-p)
- (save-excursion
- (let ((other-end (if (= (point) beg) end beg)))
- (if (pos-visible-in-window-p other-end (selected-window))
- (let ((omark (mark t)))
- (set-marker (mark-marker) (point) (current-buffer))
- (goto-char other-end)
- (sit-for 1))
- (let* ((killed-text (current-kill 0))
- (message-len (min (length killed-text) 40)))
- (if (= (point) beg)
- ;; Don't say "killed"; that is misleading.
- (message "Saved text until \"%s\""
- (substring killed-text (- message-len)))
- (message "Saved text from \"%s\""
- (substring killed-text 0 message-len)))))))))
+ (let ((other-end (if (= (point) beg) end beg))
+ (opoint (point))
+ ;; Inhibit quitting so we can make a quit here
+ ;; look like a C-g typed as a command.
+ (inhibit-quit t))
+ (if (pos-visible-in-window-p other-end (selected-window))
+ (progn
+ ;; Swap point and mark.
+ (set-marker (mark-marker) (point) (current-buffer))
+ (goto-char other-end)
+ (sit-for 1)
+ ;; Swap back.
+ (set-marker (mark-marker) other-end (current-buffer))
+ (goto-char opoint)
+ ;; If user quit, deactivate the mark
+ ;; as C-g would as a command.
+ (and quit-flag transient-mark-mode mark-active
+ (progn
+ (message "foo")
+ (setq mark-active nil)
+ (run-hooks 'deactivate-mark-hook))))
+ (let* ((killed-text (current-kill 0))
+ (message-len (min (length killed-text) 40)))
+ (if (= (point) beg)
+ ;; Don't say "killed"; that is misleading.
+ (message "Saved text until \"%s\""
+ (substring killed-text (- message-len)))
+ (message "Saved text from \"%s\""
+ (substring killed-text 0 message-len))))))))
(defun append-next-kill ()
"Cause following command, if it kills, to append to previous kill."
@@ -2092,8 +2106,10 @@ in the mode line."
During execution of Lisp code, this character causes a quit directly.
At top-level, as an editor command, this simply beeps."
(interactive)
- (if transient-mark-mode
- (setq mark-active nil))
+ (and transient-mark-mode mark-active
+ (progn
+ (setq mark-active nil)
+ (run-hooks 'deactivate-mark-hook)))
(signal 'quit nil))
(define-key global-map "\C-g" 'keyboard-quit)