]> granicus.if.org Git - vim/commitdiff
updated for version 7.3.029 v7.3.029
authorBram Moolenaar <Bram@vim.org>
Fri, 15 Oct 2010 18:20:05 +0000 (20:20 +0200)
committerBram Moolenaar <Bram@vim.org>
Fri, 15 Oct 2010 18:20:05 +0000 (20:20 +0200)
Problem:    ":sort n" sorts lines without a number as number zero. (Beeyawned)
Solution:   Make lines without a number sort before lines with a number.  Also
            fix sorting negative numbers.

src/ex_cmds.c
src/testdir/test57.in
src/testdir/test57.ok
src/version.c

index fb32545c19ef01217619d130975fb2f496099b53..b3f76192151e52b620442a0c9bcc1cc630b97c97 100644 (file)
@@ -323,7 +323,8 @@ sort_compare(s1, s2)
     /* When sorting numbers "start_col_nr" is the number, not the column
      * number. */
     if (sort_nr)
-       result = l1.start_col_nr - l2.start_col_nr;
+       result = l1.start_col_nr == l2.start_col_nr ? 0
+                                : l1.start_col_nr > l2.start_col_nr ? 1 : -1;
     else
     {
        /* We need to copy one line into "sortbuf1", because there is no
@@ -482,7 +483,7 @@ ex_sort(eap)
             * of the match, by temporarily terminating the string there */
            s2 = s + end_col;
            c = *s2;
-           (*s2) = 0;
+           *s2 = NUL;
            /* Sorting on number: Store the number itself. */
            p = s + start_col;
            if (sort_hex)
@@ -491,9 +492,13 @@ ex_sort(eap)
                s = skiptodigit(p);
            if (s > p && s[-1] == '-')
                --s;  /* include preceding negative sign */
-           vim_str2nr(s, NULL, NULL, sort_oct, sort_hex,
-                                       &nrs[lnum - eap->line1].start_col_nr, NULL);
-           (*s2) = c;
+           if (*s == NUL)
+               /* empty line should sort before any number */
+               nrs[lnum - eap->line1].start_col_nr = -MAXLNUM;
+           else
+               vim_str2nr(s, NULL, NULL, sort_oct, sort_hex,
+                                 &nrs[lnum - eap->line1].start_col_nr, NULL);
+           *s2 = c;
        }
        else
        {
@@ -6556,8 +6561,7 @@ typedef struct sign sign_T;
 struct sign
 {
     sign_T     *sn_next;       /* next sign in list */
-    int                sn_typenr;      /* type number of sign (negative if not equal
-                                  to name) */
+    int                sn_typenr;      /* type number of sign */
     char_u     *sn_name;       /* name of sign */
     char_u     *sn_icon;       /* name of pixmap */
 #ifdef FEAT_SIGN_ICONS
index d74af5791218e3f3452965166d90efa0d4e80d08..8d972e4a6888107646f916e4a38cbaa4e3bbeb44 100644 (file)
@@ -53,15 +53,19 @@ b321b
 t02: numeric
 abc
 ab
-a
 a321
 a123
 a122
+a
+x-22
 b321
 b123
+
 c123d
+-24
  123b
 c321d
+0
 b322b
 b321
 b321b
index 1777133424d5a9c1808fc746cb746893aa70a3ce..aa3d373183f721609991690dc3149f4ac511e0d7 100644 (file)
@@ -21,6 +21,10 @@ ab
 a
 
 
+
+-24
+x-22
+0
 a122
 a123
 b123
index 9b49122ee2a40685d972a95386cf979b91f25747..9584550ba5751248da3ee0c305112906bf146df5 100644 (file)
@@ -714,6 +714,8 @@ static char *(features[]) =
 
 static int included_patches[] =
 {   /* Add new patch number below this line */
+/**/
+    29,
 /**/
     28,
 /**/