]> git.eshelyaron.com Git - emacs.git/commitdiff
(activate-mark): New function.
authorStefan Monnier <monnier@iro.umontreal.ca>
Wed, 26 Mar 2008 03:40:40 +0000 (03:40 +0000)
committerStefan Monnier <monnier@iro.umontreal.ca>
Wed, 26 Mar 2008 03:40:40 +0000 (03:40 +0000)
(set-mark-command): Use it with region-active-p to clean up the code.
(exchange-point-and-mark): Invert the meaning of C-u when
transient-mark-mode is active.

lisp/ChangeLog
lisp/simple.el

index a2c1eb502bfe5b777b51163fa576a17d449b03da..0f5c870a00ff9b319daaf7784ff0d3bd8d93032c 100644 (file)
@@ -1,5 +1,10 @@
 2008-03-26  Stefan Monnier  <monnier@iro.umontreal.ca>
 
+       * simple.el (activate-mark): New function.
+       (set-mark-command): Use it with region-active-p to clean up the code.
+       (exchange-point-and-mark): Invert the meaning of C-u when
+       transient-mark-mode is active.
+
        * dired-aux.el (dired-create-files): Use dolist.
 
        * bindings.el (mode-line-change-eol): Use with-selected-window.
index 82c741f54fbd2dba6cdec0e5783f41c6b1b1a02a..8b9ab8c06222e244a025aa499797b2900610aa7f 100644 (file)
@@ -3347,6 +3347,13 @@ Also runs the hook `deactivate-mark-hook'."
     (setq mark-active nil)
     (run-hooks 'deactivate-mark-hook))))
 
+(defun activate-mark ()
+  "Activate the mark."
+  (when (mark t)
+    (setq mark-active t)
+    (unless transient-mark-mode
+      (setq transient-mark-mode 'lambda))))
+
 (defcustom select-active-regions nil
   "If non-nil, an active region automatically becomes the window selection."
   :type 'boolean
@@ -3520,13 +3527,13 @@ purposes.  See the documentation of `set-mark' for more information."
    (arg
     (setq this-command 'pop-to-mark-command)
     (pop-to-mark-command))
-   ((and (eq last-command 'set-mark-command)
-        mark-active (null transient-mark-mode))
-    (setq transient-mark-mode 'lambda)
-    (message "Transient-mark-mode temporarily enabled"))
-   ((and (eq last-command 'set-mark-command)
-         transient-mark-mode)
-    (deactivate-mark))
+   ((eq last-command 'set-mark-command)
+    (if (region-active-p)
+        (progn
+          (deactivate-mark)
+          (message "Mark deactivated"))
+      (activate-mark)
+      (message "Mark activated")))
    (t
     (push-mark-command nil))))
 
@@ -3580,18 +3587,17 @@ This command works even when the mark is not active,
 and it reactivates the mark.
 With prefix arg, `transient-mark-mode' is enabled temporarily."
   (interactive "P")
-  (if arg
-      (if mark-active
-         (if (null transient-mark-mode)
-             (setq transient-mark-mode 'lambda))
-       (setq arg nil)))
-  (unless arg
-    (let ((omark (mark t)))
-      (if (null omark)
-         (error "No mark set in this buffer"))
-      (set-mark (point))
-      (goto-char omark)
-      nil)))
+  (deactivate-mark)
+  (let ((omark (mark t)))
+    (if (null omark)
+        (error "No mark set in this buffer"))
+    (set-mark (point))
+    (goto-char omark)
+    (if (or (and arg (region-active-p)) ; (xor arg (not (region-active-p)))
+            (not (or arg (region-active-p))))
+        (deactivate-mark)
+      (activate-mark))
+    nil))
 
 (define-minor-mode transient-mark-mode
   "Toggle Transient Mark mode.