From 0ab572d5c991dee4818d364a65e004d20f1f45a1 Mon Sep 17 00:00:00 2001 From: Po Lu Date: Sat, 13 Aug 2022 21:12:20 +0800 Subject: [PATCH] Add new value `dont-save' to `deactivate-mark' * etc/NEWS: Announce new value of `deactivate-mark'. * lisp/simple.el (deactivate-mark): Handle new value. (bug#57147) * src/keyboard.c (syms_of_keyboard): Update doc string of `deactivate-mark'. --- etc/NEWS | 6 ++++++ lisp/simple.el | 4 +++- src/keyboard.c | 8 ++++++-- 3 files changed, 15 insertions(+), 3 deletions(-) diff --git a/etc/NEWS b/etc/NEWS index 6ff8548921f..7d3608b2fcf 100644 --- a/etc/NEWS +++ b/etc/NEWS @@ -2565,6 +2565,12 @@ patcomp.el, pc-mode.el, pc-select.el, s-region.el, and sregex.el. * Lisp Changes in Emacs 29.1 +--- +** New 'dont-save' value of 'deactivate-mark'. +This value means that Emacs should deactivate the mark as usual, but +without setting the primary selection should 'select-active-regions' +be enabled. + +++ ** New 'declare' form 'interactive-args'. This can be used to specify what forms to put into 'command-history' diff --git a/lisp/simple.el b/lisp/simple.el index a4ea345ca5f..ce3895176e1 100644 --- a/lisp/simple.el +++ b/lisp/simple.el @@ -6731,7 +6731,8 @@ If Transient Mark mode is disabled, this function normally does nothing; but if FORCE is non-nil, it deactivates the mark anyway. Deactivating the mark sets `mark-active' to nil, updates the -primary selection according to `select-active-regions', and runs +primary selection according to `select-active-regions' (unless +`deactivate-mark' is `dont-save'), and runs `deactivate-mark-hook'. If Transient Mark mode was temporarily enabled, reset the value @@ -6742,6 +6743,7 @@ run `deactivate-mark-hook'." (when (and (if (eq select-active-regions 'only) (eq (car-safe transient-mark-mode) 'only) select-active-regions) + (not (eq deactivate-mark 'dont-save)) (region-active-p) (display-selections-p)) ;; The var `saved-region-selection', if non-nil, is the text in diff --git a/src/keyboard.c b/src/keyboard.c index 719226caedc..05c68ea7fbc 100644 --- a/src/keyboard.c +++ b/src/keyboard.c @@ -12650,10 +12650,14 @@ cancels any modification. */); DEFSYM (Qdeactivate_mark, "deactivate-mark"); DEFVAR_LISP ("deactivate-mark", Vdeactivate_mark, - doc: /* If an editing command sets this to t, deactivate the mark afterward. + doc: /* If an editing command sets this to t, deactivate the mark afterward. The command loop sets this to nil before each command, and tests the value when the command returns. -Buffer modification stores t in this variable. */); +Buffer modification stores t in this variable. + +By default, deactivating the mark will save the contents of the region +according to `select-active-regions'. If this is set to the symbol +`dont-save', the region will not be saved.*/); Vdeactivate_mark = Qnil; Fmake_variable_buffer_local (Qdeactivate_mark); -- 2.39.5