changeset 93236:e550714b0fde

(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.
author Stefan Monnier <monnier@iro.umontreal.ca>
date Wed, 26 Mar 2008 03:40:40 +0000
parents 4525730eae72
children 0f4b8a3dc49e
files lisp/ChangeLog lisp/simple.el
diffstat 2 files changed, 30 insertions(+), 19 deletions(-) [+]
line wrap: on
line diff
--- a/lisp/ChangeLog	Wed Mar 26 03:34:07 2008 +0000
+++ b/lisp/ChangeLog	Wed Mar 26 03:40:40 2008 +0000
@@ -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.
--- a/lisp/simple.el	Wed Mar 26 03:34:07 2008 +0000
+++ b/lisp/simple.el	Wed Mar 26 03:40:40 2008 +0000
@@ -3347,6 +3347,13 @@
     (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 @@
    (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 @@
 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.