]> git.eshelyaron.com Git - emacs.git/commitdiff
Support rectangular regions in capitalize-region and capitalize-dwim.
authorJuri Linkov <juri@linkov.net>
Sat, 21 Sep 2019 23:00:01 +0000 (02:00 +0300)
committerJuri Linkov <juri@linkov.net>
Sat, 21 Sep 2019 23:00:01 +0000 (02:00 +0300)
* 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.

etc/NEWS
lisp/simple.el
src/casefiddle.c

index 6a4a6e60d4dd491a801f388d64cbc27cc564a8b3..20d2e62bd3bb0a524dd0f3a1e4e12aa9d1762339 100644 (file)
--- a/etc/NEWS
+++ b/etc/NEWS
@@ -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.
index a267200aeb918c889be59b20c6f3423f207969b6..31e3b2bbabadd5d62b67d54f7a3456f9266d662f 100644 (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.
index ee292dda9b36de84d7260f737095e02b17a6ad06..3a1724b306d403458fc8600d84a93b08af1ad5e7 100644 (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;
 }