# HG changeset patch # User Stefan Monnier # Date 1206502840 0 # Node ID e550714b0fde9cdd150333101f66c654455a7b59 # Parent 4525730eae72bb8b1b023df388458a3d39f8d7e4 (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. diff -r 4525730eae72 -r e550714b0fde lisp/ChangeLog --- 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 + * 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. diff -r 4525730eae72 -r e550714b0fde lisp/simple.el --- 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.