1
Fork 0
mirror of git://git.sv.gnu.org/emacs.git synced 2025-12-15 10:30:25 -08:00

Support rectangular regions in capitalize-region and capitalize-dwim.

* lisp/simple.el (capitalize-dwim): Add arg region-noncontiguous-p
in capitalize-region call.

* src/casefiddle.c (Fcapitalize_region): Add arg region-noncontiguous-p.
If non-nil, operate on multiple chunks.  (Bug#37477)
(Fdowncase_region): Use builtin symbol Qregion_extract_function
rather than calling intern.
This commit is contained in:
Juri Linkov 2019-09-22 02:00:01 +03:00
parent a34216351f
commit 2879c3ec1b
3 changed files with 23 additions and 7 deletions

View file

@ -487,8 +487,8 @@ interface that's more like functions like 'search-forward'.
---
** More commands support noncontiguous rectangular regions, namely
'upcase-dwim', 'downcase-dwim', 'replace-string', 'replace-regexp',
and 'delimit-columns-region'.
'upcase-dwim', 'downcase-dwim', 'capitalize-dwim', 'capitalize-region',
'replace-string', 'replace-regexp', and 'delimit-columns-region'.
+++
** When asked to visit a large file, Emacs now offers visiting it literally.

View file

@ -9074,7 +9074,7 @@ Otherwise, it calls `capitalize-word', with prefix argument passed to it
to capitalize ARG words."
(interactive "*p")
(if (use-region-p)
(capitalize-region (region-beginning) (region-end))
(capitalize-region (region-beginning) (region-end) (region-noncontiguous-p))
(capitalize-word arg)))
;;; Accessors for `decode-time' values.

View file

@ -556,7 +556,7 @@ point and the mark is operated on. */)
if (!NILP (region_noncontiguous_p))
{
bounds = call1 (Fsymbol_value (intern ("region-extract-function")),
bounds = call1 (Fsymbol_value (Qregion_extract_function),
intern ("bounds"));
while (CONSP (bounds))
@ -571,15 +571,31 @@ point and the mark is operated on. */)
return Qnil;
}
DEFUN ("capitalize-region", Fcapitalize_region, Scapitalize_region, 2, 2, "r",
DEFUN ("capitalize-region", Fcapitalize_region, Scapitalize_region, 2, 3,
"(list (region-beginning) (region-end) (region-noncontiguous-p))",
doc: /* Convert the region to capitalized form.
This means that each word's first character is converted to either
title case or upper case, and the rest to lower case.
In programs, give two arguments, the starting and ending
character positions to operate on. */)
(Lisp_Object beg, Lisp_Object end)
(Lisp_Object beg, Lisp_Object end, Lisp_Object region_noncontiguous_p)
{
casify_region (CASE_CAPITALIZE, beg, end);
Lisp_Object bounds = Qnil;
if (!NILP (region_noncontiguous_p))
{
bounds = call1 (Fsymbol_value (Qregion_extract_function),
intern ("bounds"));
while (CONSP (bounds))
{
casify_region (CASE_CAPITALIZE, XCAR (XCAR (bounds)), XCDR (XCAR (bounds)));
bounds = XCDR (bounds);
}
}
else
casify_region (CASE_CAPITALIZE, beg, end);
return Qnil;
}