]> code.delx.au - gnu-emacs/blobdiff - lisp/simple.el
Initial revision
[gnu-emacs] / lisp / simple.el
index b6b3b362f46d83fdd64b41d120c5f77238a033d2..dfca44cffc6968dabe2603e9141e71a679e7456f 100644 (file)
@@ -1094,11 +1094,10 @@ system cut and paste."
              (goto-char opoint)
              ;; If user quit, deactivate the mark
              ;; as C-g would as a command.
-             (and quit-flag transient-mark-mode mark-active
+             (and quit-flag mark-active
                   (progn
-                    (message "foo")
-                    (setq mark-active nil)
-                    (run-hooks 'deactivate-mark-hook))))
+                    (message "foo")    ;XXX what is this here for?  --roland
+                    (deactivate-mark))))
          (let* ((killed-text (current-kill 0))
                 (message-len (min (length killed-text) 40)))
            (if (= (point) beg)
@@ -1259,6 +1258,14 @@ a mistake; see the documentation of `set-mark'."
       (marker-position (mark-marker))
     (signal 'mark-inactive nil)))
 
+;; Many places set mark-active directly, and several of them failed to also
+;; run deactivate-mark-hook.  This shorthand should simplify.
+(defsubst deactivate-mark ()
+  "Deactivate the mark by setting `mark-active' to nil.
+Also runs the hook `deactivate-mark-hook'."
+  (setq mark-active nil)
+  (run-hooks 'deactivate-mark-hook))
+
 (defun set-mark (pos)
   "Set this buffer's mark to POS.  Don't use this function!
 That is to say, don't use this function unless you want
@@ -1334,8 +1341,7 @@ Does not set point.  Does nothing if mark ring is empty."
       (progn
        (setq mark-ring (nconc mark-ring (list (copy-marker (mark-marker)))))
        (set-marker (mark-marker) (+ 0 (car mark-ring)) (current-buffer))
-       (if transient-mark-mode
-           (setq mark-active nil))
+       (deactivate-mark)
        (move-marker (car mark-ring) nil)
        (if (null (mark t)) (ding))
        (setq mark-ring (cdr mark-ring)))))
@@ -2149,10 +2155,7 @@ 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)
-  (and transient-mark-mode mark-active
-       (progn
-        (setq mark-active nil)
-        (run-hooks 'deactivate-mark-hook)))
+  (deactivate-mark)
   (signal 'quit nil))
 
 (define-key global-map "\C-g" 'keyboard-quit)