If the region is active, join all the lines it spans

* lisp/simple.el (delete-indentation): Join lines in the active region.
(Bug#34796)

* doc/misc/org.texi: Describe the arguments of delete-indentation.

* etc/NEWS: Mention region support in delete-indentation.
This commit is contained in:
Łukasz Stelmach 2019-03-15 22:06:16 +01:00 committed by Eli Zaretskii
parent 09d746dad3
commit 8fa94a1ecc
3 changed files with 33 additions and 17 deletions

View file

@ -110,6 +110,10 @@ parentheses, or if the junction follows another newline.
If there is a fill prefix, @kbd{M-^} deletes the fill prefix if it
appears after the newline that is deleted. @xref{Fill Prefix}.
With the universal prefix argument, join the current line line to the
following line. With the region active, join lines in the region. If
both the argument is set and the region is active, the region is ignored.
@item C-M-\
@kindex C-M-\
@findex indent-region

View file

@ -370,6 +370,10 @@ region using a given replacement-function in a non-destructive manner
arguments mitigating performance issues when operating on huge
buffers.
** The command `delete-indentation` now can operate on the active
region
+++
* Changes in Specialized Modes and Packages in Emacs 27.1

View file

@ -593,25 +593,33 @@ When called from Lisp code, ARG may be a prefix string to copy."
(indent-to col 0)
(goto-char pos)))
(defun delete-indentation (&optional arg)
(defun delete-indentation (&optional arg beg end)
"Join this line to previous and fix up whitespace at join.
If there is a fill prefix, delete it from the beginning of this line.
With argument, join this line to following line."
(interactive "*P")
If there is a fill prefix, delete it from the beginning of this
line. With prefix ARG, join the current line to the following line.
With the region active, join lines in the region. If both the
argument is set and the region is active, the region is ignored."
(interactive "*P\nr")
(if arg (forward-line 1)
(if (use-region-p)
(goto-char end)))
(beginning-of-line)
(if arg (forward-line 1))
(if (eq (preceding-char) ?\n)
(progn
(delete-region (point) (1- (point)))
;; If the second line started with the fill prefix,
;; delete the prefix.
(if (and fill-prefix
(<= (+ (point) (length fill-prefix)) (point-max))
(string= fill-prefix
(buffer-substring (point)
(+ (point) (length fill-prefix)))))
(delete-region (point) (+ (point) (length fill-prefix))))
(fixup-whitespace))))
(while (eq (preceding-char) ?\n)
(progn
(delete-region (point) (1- (point)))
;; If the second line started with the fill prefix,
;; delete the prefix.
(if (and fill-prefix
(<= (+ (point) (length fill-prefix)) (point-max))
(string= fill-prefix
(buffer-substring (point)
(+ (point) (length fill-prefix)))))
(delete-region (point) (+ (point) (length fill-prefix))))
(fixup-whitespace)
(if (and beg
(not arg)
(< beg (point-at-bol)))
(beginning-of-line)))))
(defalias 'join-line #'delete-indentation) ; easier to find