From 8d8d1d8000b2ac5cac12f23b1b2d270b3340f288 Mon Sep 17 00:00:00 2001 From: Stefan Kangas Date: Tue, 9 Jul 2019 00:50:41 +0200 Subject: [PATCH] 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). --- etc/NEWS | 3 +- lisp/delim-col.el | 92 ++++++++++++++++++++++++----------------------- 2 files changed, 50 insertions(+), 45 deletions(-) diff --git a/etc/NEWS b/etc/NEWS index 852b6e49486..532babd0fa6 100644 --- a/etc/NEWS +++ b/etc/NEWS @@ -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. diff --git a/lisp/delim-col.el b/lisp/delim-col.el index 3e309e917d2..b3a773e5b02 100644 --- a/lisp/delim-col.el +++ b/lisp/delim-col.el @@ -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 -- 2.39.5