Delegate to rectangle version in delim-col when appropriate

* lisp/delim-col.el (delimit-columns-region): Delegate to
`delimit-columns-rectangle' when called with a rectangular
region (bug#36453).
This commit is contained in:
Stefan Kangas 2019-07-09 00:50:41 +02:00 committed by Lars Ingebrigtsen
parent fb48eb48f3
commit 8d8d1d8000
2 changed files with 50 additions and 45 deletions

View file

@ -442,7 +442,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'.
'upcase-dwim', 'downcase-dwim', 'replace-string', 'replace-regexp',
and 'delimit-columns-region'.
+++
** When asked to visit a large file, Emacs now offers visiting it literally.

View file

@ -260,50 +260,54 @@ at the left corner."
START and END delimit the text region."
(interactive "*r")
(let ((delimit-columns-str-before
(delimit-columns-str delimit-columns-str-before))
(delimit-columns-str-separator
(delimit-columns-str delimit-columns-str-separator))
(delimit-columns-str-after
(delimit-columns-str delimit-columns-str-after))
(delimit-columns-before
(delimit-columns-str delimit-columns-before))
(delimit-columns-after
(delimit-columns-str delimit-columns-after))
(delimit-columns-start
(if (natnump delimit-columns-start)
delimit-columns-start
0))
(delimit-columns-end
(if (integerp delimit-columns-end)
delimit-columns-end
1000000))
(delimit-columns-limit (make-marker))
(the-end (copy-marker end))
delimit-columns-max)
(when (<= delimit-columns-start delimit-columns-end)
(save-excursion
(goto-char start)
(beginning-of-line)
;; get maximum length for each column
(and delimit-columns-format
(save-excursion
(while (< (point) the-end)
(delimit-columns-rectangle-max
(prog1
(point)
(end-of-line)))
(forward-char 1))))
;; prettify columns
(while (< (point) the-end)
(delimit-columns-rectangle-line
(prog1
(point)
(end-of-line)))
(forward-char 1))
;; nullify markers
(set-marker delimit-columns-limit nil)
(set-marker the-end nil)))))
(if rectangle-mark-mode
;; Delegate to delimit-columns-rectangle when called with a
;; rectangular region.
(delimit-columns-rectangle start end)
(let ((delimit-columns-str-before
(delimit-columns-str delimit-columns-str-before))
(delimit-columns-str-separator
(delimit-columns-str delimit-columns-str-separator))
(delimit-columns-str-after
(delimit-columns-str delimit-columns-str-after))
(delimit-columns-before
(delimit-columns-str delimit-columns-before))
(delimit-columns-after
(delimit-columns-str delimit-columns-after))
(delimit-columns-start
(if (natnump delimit-columns-start)
delimit-columns-start
0))
(delimit-columns-end
(if (integerp delimit-columns-end)
delimit-columns-end
1000000))
(delimit-columns-limit (make-marker))
(the-end (copy-marker end))
delimit-columns-max)
(when (<= delimit-columns-start delimit-columns-end)
(save-excursion
(goto-char start)
(beginning-of-line)
;; get maximum length for each column
(and delimit-columns-format
(save-excursion
(while (< (point) the-end)
(delimit-columns-rectangle-max
(prog1
(point)
(end-of-line)))
(forward-char 1))))
;; prettify columns
(while (< (point) the-end)
(delimit-columns-rectangle-line
(prog1
(point)
(end-of-line)))
(forward-char 1))
;; nullify markers
(set-marker delimit-columns-limit nil)
(set-marker the-end nil))))))
;;;###autoload