handle-shift-selection.
(syms_of_callint): Move declaration of shift-select-mode to simple.el.
* simple.el (shift-select-mode): Move declaration from callint.c.
(handle-shift-selection): Remove `deactivate' arg and check
shift-select-mode instead.
+2009-03-26 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * simple.el (shift-select-mode): Move declaration from callint.c.
+ (handle-shift-selection): Remove `deactivate' arg and check
+ shift-select-mode instead.
+
2009-03-26 Juanma Barranquero <lekktu@gmail.com>
* align.el (align-large-region, align-perl-modes, align-rules-list)
(t (activate-mark)))
nil))
-(defun handle-shift-selection (&optional deactivate)
+(defvar shift-select-mode t
+ "When non-nil, shifted motion keys activate the mark momentarily.
+
+While the mark is activated in this way, any shift-translated point
+motion key extends the region, and if Transient Mark mode was off, it
+is temporarily turned on. Furthermore, the mark will be deactivated
+by any subsequent point motion key that was not shift-translated, or
+by any action that normally deactivates the mark in Transient Mark mode.
+
+See `this-command-keys-shift-translated' for the meaning of
+shift-translation.")
+
+(defun handle-shift-selection ()
"Activate/deactivate mark depending on invocation thru ``shift translation.''
\(See `this-command-keys-shift-translated' for the meaning of
shift translation.)
This is called whenever a command with a `^' character in its
-`interactive' spec is invoked while `shift-select-mode' is
-non-nil.
+`interactive' spec is invoked.
+Its behavior is controlled by `shift-select-mode'.
If the command was invoked through shift translation, set the
mark and activate the region temporarily, unless it was already
set in this way. If the command was invoked without shift
-translation, or if the optional argument DEACTIVATE is non-nil,
+translation, or if the region was activated by the mouse,
deactivate the mark if the region is temporarily active."
- (cond ((and this-command-keys-shift-translated
- (null deactivate))
- (unless (and mark-active
- (eq (car-safe transient-mark-mode) 'only))
- (setq transient-mark-mode
- (cons 'only
- (unless (eq transient-mark-mode 'lambda)
- transient-mark-mode)))
- (push-mark nil nil t)))
- ((eq (car-safe transient-mark-mode) 'only)
- (setq transient-mark-mode (cdr transient-mark-mode))
- (deactivate-mark))))
+ (cond ((and shift-select-mode this-command-keys-shift-translated)
+ (unless (and mark-active
+ (eq (car-safe transient-mark-mode) 'only))
+ (setq transient-mark-mode
+ (cons 'only
+ (unless (eq transient-mark-mode 'lambda)
+ transient-mark-mode)))
+ (push-mark nil nil t)))
+ ((eq (car-safe transient-mark-mode) 'only)
+ (setq transient-mark-mode (cdr transient-mark-mode))
+ (deactivate-mark))))
(define-minor-mode transient-mark-mode
"Toggle Transient Mark mode.
+2009-03-26 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * callint.c (Fcall_interactively): For '^' just delegate the work to
+ handle-shift-selection.
+ (syms_of_callint): Move declaration of shift-select-mode to simple.el.
+
2009-03-24 Chong Yidong <cyd@stupidchicken.com>
* editfns.c (Ffloat_time): Doc fix (Bug#2768).
even if mark_active is 0. */
Lisp_Object Vmark_even_if_inactive;
-Lisp_Object Vshift_select_mode, Qhandle_shift_selection;
+Lisp_Object Qhandle_shift_selection;
Lisp_Object Vmouse_leave_buffer_hook, Qmouse_leave_buffer_hook;
}
else if (*string == '^')
{
- if (! NILP (Vshift_select_mode))
- call1 (Qhandle_shift_selection, Qnil);
- /* Even if shift-select-mode is off, temporarily active
- regions could be set using the mouse, and should be
- deactivated. */
- else if (CONSP (Vtransient_mark_mode)
- && EQ (XCAR (Vtransient_mark_mode), Qonly))
- call1 (Qhandle_shift_selection, Qt);
+ call0 (Qhandle_shift_selection);
string++;
}
else break;
behave as if the mark were still active. */);
Vmark_even_if_inactive = Qt;
- DEFVAR_LISP ("shift-select-mode", &Vshift_select_mode,
- doc: /* When non-nil, shifted motion keys activate the mark momentarily.
-
-While the mark is activated in this way, any shift-translated point
-motion key extends the region, and if Transient Mark mode was off, it
-is temporarily turned on. Furthermore, the mark will be deactivated
-by any subsequent point motion key that was not shift-translated, or
-by any action that normally deactivates the mark in Transient Mark
-mode.
-
-See `this-command-keys-shift-translated' for the meaning of
-shift-translation. */);
- Vshift_select_mode = Qt;
-
DEFVAR_LISP ("mouse-leave-buffer-hook", &Vmouse_leave_buffer_hook,
doc: /* Hook to run when about to switch windows with a mouse command.
Its purpose is to give temporary modes such as Isearch mode