0
0
mirror of https://github.com/vim/vim.git synced 2025-09-26 04:04:07 -04:00

patch 7.4.951

Problem:    Sorting number strings does not work as expected. (Luc Hermitte)
Solution:   Add the 'N" argument to sort()
This commit is contained in:
Bram Moolenaar
2015-12-03 16:33:12 +01:00
parent 4649ded287
commit b00da1d6d1
6 changed files with 52 additions and 1 deletions

View File

@@ -17928,6 +17928,7 @@ typedef struct
static int item_compare_ic;
static int item_compare_numeric;
static int item_compare_numbers;
static char_u *item_compare_func;
static dict_T *item_compare_selfdict;
static int item_compare_func_err;
@@ -17958,6 +17959,15 @@ item_compare(s1, s2)
si2 = (sortItem_T *)s2;
tv1 = &si1->item->li_tv;
tv2 = &si2->item->li_tv;
if (item_compare_numbers)
{
long v1 = get_tv_number(tv1);
long v2 = get_tv_number(tv2);
return v1 == v2 ? 0 : v1 > v2 ? 1 : -1;
}
/* tv2string() puts quotes around a string and allocates memory. Don't do
* that for string variables. Use a single quote when comparing with a
* non-string to do what the docs promise. */
@@ -18091,6 +18101,7 @@ do_sort_uniq(argvars, rettv, sort)
item_compare_ic = FALSE;
item_compare_numeric = FALSE;
item_compare_numbers = FALSE;
item_compare_func = NULL;
item_compare_selfdict = NULL;
if (argvars[1].v_type != VAR_UNKNOWN)
@@ -18116,6 +18127,11 @@ do_sort_uniq(argvars, rettv, sort)
item_compare_func = NULL;
item_compare_numeric = TRUE;
}
else if (STRCMP(item_compare_func, "N") == 0)
{
item_compare_func = NULL;
item_compare_numbers = TRUE;
}
else if (STRCMP(item_compare_func, "i") == 0)
{
item_compare_func = NULL;