GNU bug report logs -
#21785
25.0.50; sort-fields fails if region ends in a newline and sort-paragraph fails if it doesn't
Previous Next
Reported by: bruce.connor.am <at> gmail.com
Date: Thu, 29 Oct 2015 12:39:01 UTC
Severity: minor
Tags: fixed, patch
Found in version 25.0.50
Fixed in version 27.1
Done: Lars Ingebrigtsen <larsi <at> mouse.gnus.org>
Bug is archived. No further changes may be made.
Full log
View this message in rfc822 format
(I'm going through old bug reports that have unfortunately not gotten
any responses.)
Artur Malabarba <bruce.connor.am <at> gmail.com> writes:
> I noticed this while writing tests for sort.el
>
> With the following buffer contents (the text between the dashes,
> including a final newline), issue `C-x h M-x sort-numeric-fields'.
> You'll get the error that the last line doesn't have enough fields. I
> think that error should not be thrown because of a final newline.
>
> ---------------------
> 1 hi
> 2 bye
>
> ----------------------
>
> Meanwhile take the following buffer contents,
> --------------------
> paragraph 2
>
> paragraph 1
> --------------------
>
> If you issue `sort-paragraphs' on the whole buffer, you'll get this:
> --------------------
> paragraph 1
> paragraph 2
>
> -------------------
>
> In my opinion both behavior are bugs. But surely one of them is, as
> the functions should be somewhat consistent on demanding final
> newlines.
I don't really think this first is a bug. You've asked Emacs to sort
numeric fields, and one of the lines in question doesn't have a numeric
field, so bugging out seems like what's required.
The second does seem like a bug. If the final paragraph doesn't end in
a newline, it's squashed into the following paragraph after sorting.
The following patch fixes the problem (by adding a newline in these
cases). Does this seems like the correct approach for everybody?
diff --git a/lisp/sort.el b/lisp/sort.el
index 6ea1c44060..6ceda8e448 100644
--- a/lisp/sort.el
+++ b/lisp/sort.el
@@ -225,11 +225,17 @@ sort-paragraphs
(narrow-to-region beg end)
(goto-char (point-min))
(sort-subr reverse
- (function
- (lambda ()
- (while (and (not (eobp)) (looking-at paragraph-separate))
- (forward-line 1))))
- 'forward-paragraph))))
+ (lambda ()
+ (while (and (not (eobp)) (looking-at paragraph-separate))
+ (forward-line 1)))
+ (lambda ()
+ (forward-paragraph)
+ ;; If the buffer doesn't end with a newline, add a
+ ;; newline to avoid having paragraphs being
+ ;; concatenated after sorting.
+ (when (and (eobp)
+ (not (bolp)))
+ (insert "\n")))))))
;;;###autoload
(defun sort-pages (reverse beg end)
--
(domestic pets only, the antidote for overdose, milk.)
bloggy blog: http://lars.ingebrigtsen.no
This bug report was last modified 5 years and 308 days ago.
Previous Next
GNU bug tracking system
Copyright (C) 1999 Darren O. Benham,
1997,2003 nCipher Corporation Ltd,
1994-97 Ian Jackson.