aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorEli Zaretskii2017-11-24 12:49:04 +0200
committerEli Zaretskii2017-11-24 12:49:04 +0200
commiteea4e9194c209770dceb55b4853451da25da4ea5 (patch)
tree16b07073153c4e2a5a3d9b530fd4cb7b28f06458
parente6e41dac879d2e9b63c2a5dd700a9d88d8065e4d (diff)
downloademacs-eea4e9194c209770dceb55b4853451da25da4ea5.tar.gz
emacs-eea4e9194c209770dceb55b4853451da25da4ea5.zip
Improve documentation of self-insert-uses-region-functions
* lisp/simple.el (self-insert-uses-region-functions): Clarify the doc string. * lisp/delsel.el (delete-selection-uses-region-p): Mention 'self-insert-command' in the doc string. (Bug#29373) * doc/lispref/text.texi (Commands for Insertion): Mention 'self-insert-uses-region-functions'. * doc/lispref/modes.texi (Keymaps and Minor Modes): Add a cross-reference to "Commands for Insertion".
-rw-r--r--doc/lispref/modes.texi9
-rw-r--r--doc/lispref/text.texi10
-rw-r--r--lisp/delsel.el12
-rw-r--r--lisp/simple.el15
4 files changed, 35 insertions, 11 deletions
diff --git a/doc/lispref/modes.texi b/doc/lispref/modes.texi
index f7013da9433..bd94aeadf15 100644
--- a/doc/lispref/modes.texi
+++ b/doc/lispref/modes.texi
@@ -1490,10 +1490,11 @@ alist @code{minor-mode-map-alist}. @xref{Definition of minor-mode-map-alist}.
1490 One use of minor mode keymaps is to modify the behavior of certain 1490 One use of minor mode keymaps is to modify the behavior of certain
1491self-inserting characters so that they do something else as well as 1491self-inserting characters so that they do something else as well as
1492self-insert. (Another way to customize @code{self-insert-command} is 1492self-insert. (Another way to customize @code{self-insert-command} is
1493through @code{post-self-insert-hook}. Apart from this, the facilities 1493through @code{post-self-insert-hook}, see @ref{Commands for
1494for customizing @code{self-insert-command} are limited to special cases, 1494Insertion}. Apart from this, the facilities for customizing
1495designed for abbrevs and Auto Fill mode. Do not try substituting your 1495@code{self-insert-command} are limited to special cases, designed for
1496own definition of @code{self-insert-command} for the standard one. The 1496abbrevs and Auto Fill mode. Do not try substituting your own
1497definition of @code{self-insert-command} for the standard one. The
1497editor command loop handles this function specially.) 1498editor command loop handles this function specially.)
1498 1499
1499Minor modes may bind commands to key sequences consisting of @kbd{C-c} 1500Minor modes may bind commands to key sequences consisting of @kbd{C-c}
diff --git a/doc/lispref/text.texi b/doc/lispref/text.texi
index 3d26d0930f7..1e19f75d682 100644
--- a/doc/lispref/text.texi
+++ b/doc/lispref/text.texi
@@ -525,9 +525,17 @@ responsible for calling @code{blink-paren-function} when the inserted
525character has close parenthesis syntax (@pxref{Blinking}). 525character has close parenthesis syntax (@pxref{Blinking}).
526 526
527@vindex post-self-insert-hook 527@vindex post-self-insert-hook
528@vindex self-insert-uses-region-functions
528The final thing this command does is to run the hook 529The final thing this command does is to run the hook
529@code{post-self-insert-hook}. You could use this to automatically 530@code{post-self-insert-hook}. You could use this to automatically
530reindent text as it is typed, for example. 531reindent text as it is typed, for example. If any function on this
532hook needs to act on the region (@pxref{The Region}), it should make
533sure Delete Selection mode (@pxref{Using Region, Delete Selection, ,
534emacs, The GNU Emacs Manual}) doesn't delete the region before
535@code{post-self-insert-hook} functions are invoked. The way to do so
536is to add a function that returns @code{nil} to
537@code{self-insert-uses-region-functions}, a special hook that tells
538Delete Selection mode it should not delete the region.
531 539
532Do not try substituting your own definition of 540Do not try substituting your own definition of
533@code{self-insert-command} for the standard one. The editor command 541@code{self-insert-command} for the standard one. The editor command
diff --git a/lisp/delsel.el b/lisp/delsel.el
index 17b46efc7cb..65b2cb85cea 100644
--- a/lisp/delsel.el
+++ b/lisp/delsel.el
@@ -256,12 +256,18 @@ See `delete-selection-helper'."
256 (get this-command 'delete-selection))))) 256 (get this-command 'delete-selection)))))
257 257
258(defun delete-selection-uses-region-p () 258(defun delete-selection-uses-region-p ()
259 "Return t when the current command will be using the region 259 "Return t when `delete-selection-mode' should not delete the region.
260rather than having `delete-selection' delete it, nil otherwise. 260
261The `self-insert-command' could be the current command or may be
262called by the current command. If this function returns nil,
263then `delete-selection' is allowed to delete the region.
261 264
262This function is intended for use as the value of the 265This function is intended for use as the value of the
263`delete-selection' property of a command, and shouldn't be used 266`delete-selection' property of a command, and shouldn't be used
264for anything else." 267for anything else. In particular, `self-insert-command' has this
268function as its `delete-selection' property, so that \"electric\"
269self-insert commands that act on the region could adapt themselves
270to `delete-selection-mode'."
265 (not (run-hook-with-args-until-success 271 (not (run-hook-with-args-until-success
266 'self-insert-uses-region-functions))) 272 'self-insert-uses-region-functions)))
267 273
diff --git a/lisp/simple.el b/lisp/simple.el
index 7d47d0f8645..d629fb66599 100644
--- a/lisp/simple.el
+++ b/lisp/simple.el
@@ -401,9 +401,18 @@ Other major modes are defined by comparison with this one."
401(defvar self-insert-uses-region-functions nil 401(defvar self-insert-uses-region-functions nil
402 "Special hook to tell if `self-insert-command' will use the region. 402 "Special hook to tell if `self-insert-command' will use the region.
403It must be called via `run-hook-with-args-until-success' with no arguments. 403It must be called via `run-hook-with-args-until-success' with no arguments.
404Any `post-self-insert-command' which consumes the region should 404
405register a function on this hook so that things like `delete-selection-mode' 405If any function on this hook returns a non-nil value, `delete-selection-mode'
406can refrain from consuming the region.") 406will act on that value (see `delete-selection-helper'), and will
407usually delete the region. If all the functions on this hook return
408nil, it is an indiction that `self-insert-command' needs the region
409untouched by `delete-selection-mode', and will itself do whatever is
410appropriate with the region.
411Any function on `post-self-insert-hook' which act on the region should
412add a function to this hook so that `delete-selection-mode' could
413refrain from deleting the region before `post-self-insert-hook'
414functions are called.
415This hook is run by `delete-selection-uses-region-p', which see.")
407 416
408(defvar hard-newline (propertize "\n" 'hard t 'rear-nonsticky '(hard)) 417(defvar hard-newline (propertize "\n" 'hard t 'rear-nonsticky '(hard))
409 "Propertized string representing a hard newline character.") 418 "Propertized string representing a hard newline character.")