2014/06/26 23:09, Ben Fritz <[email protected]> wrote:
> Could this be fixed, by using (l2.lnum - l1.lnum) rather than
> (l1.lnum - l2.lnum) if lines are equal, when using reverse sort?
Well... the change is easy (see the patch below), but I think the
current behavior of :sort! is a 'feature', not a bug. Changing
its behavior will break many existing scripts.
For example, test57 fails after the patch.
diff -r e11fcef66289 src/ex_cmds.c
--- a/src/ex_cmds.c Wed Jun 25 22:55:38 2014 +0200
+++ b/src/ex_cmds.c Fri Jun 27 00:31:05 2014 +0900
@@ -277,6 +277,7 @@
static int sort_ic; /* ignore case */
static int sort_nr; /* sort on number */
static int sort_rx; /* sort on regex instead of skipping it
*/
+static int sort_rv; /* reverse sort */
static int sort_abort; /* flag to indicate if sorting has been
interrupted */
@@ -338,7 +339,7 @@
/* If two lines have the same value, preserve the original line order. */
if (result == 0)
- return (int)(l1.lnum - l2.lnum);
+ return sort_rv ? (int)(l2.lnum - l1.lnum) : (int)(l1.lnum - l2.lnum);
return result;
}
@@ -380,6 +381,7 @@
if (nrs == NULL)
goto sortend;
+ sort_rv = eap->forceit;
sort_abort = sort_ic = sort_rx = sort_nr = sort_oct = sort_hex = 0;
for (p = eap->arg; *p != NUL; ++p)
--
--
You received this message from the "vim_dev" maillist.
Do not top-post! Type your reply below the text you are replying to.
For more information, visit http://www.vim.org/maillist.php
---
You received this message because you are subscribed to the Google Groups
"vim_dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
For more options, visit https://groups.google.com/d/optout.