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.
(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
(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))))
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.