1
0
mirror of https://git.savannah.gnu.org/git/emacs.git synced 2024-12-02 08:22:22 +00:00

* 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.
* simple.el (shift-select-mode): Move declaration from callint.c.
(handle-shift-selection): Remove `deactivate' arg and check
shift-select-mode instead.
This commit is contained in:
Stefan Monnier 2009-03-26 17:07:54 +00:00
parent 6c01cfb683
commit 84db11d602
4 changed files with 41 additions and 39 deletions

View File

@ -1,3 +1,9 @@
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)

View File

@ -3746,33 +3746,44 @@ mode temporarily."
(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.

View File

@ -1,3 +1,9 @@
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).

View File

@ -51,7 +51,7 @@ extern Lisp_Object Qface, Qminibuffer_prompt;
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;
@ -454,14 +454,7 @@ invoke it. If KEYS is omitted or nil, the return value of
}
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;
@ -994,20 +987,6 @@ turns off region highlighting, but commands that use the mark
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