mirror of
https://github.com/vim/vim.git
synced 2025-09-27 04:14:06 -04:00
updated for version 7.3.224
Problem: Can't pass dict to sort function. Solution: Add the optional {dict} argument to sort(). (ZyX)
This commit is contained in:
@@ -1919,7 +1919,8 @@ shellescape( {string} [, {special}])
|
|||||||
simplify( {filename}) String simplify filename as much as possible
|
simplify( {filename}) String simplify filename as much as possible
|
||||||
sin( {expr}) Float sine of {expr}
|
sin( {expr}) Float sine of {expr}
|
||||||
sinh( {expr}) Float hyperbolic sine of {expr}
|
sinh( {expr}) Float hyperbolic sine of {expr}
|
||||||
sort( {list} [, {func}]) List sort {list}, using {func} to compare
|
sort( {list} [, {func} [, {dict}]])
|
||||||
|
List sort {list}, using {func} to compare
|
||||||
soundfold( {word}) String sound-fold {word}
|
soundfold( {word}) String sound-fold {word}
|
||||||
spellbadword() String badly spelled word at cursor
|
spellbadword() String badly spelled word at cursor
|
||||||
spellsuggest( {word} [, {max} [, {capital}]])
|
spellsuggest( {word} [, {max} [, {capital}]])
|
||||||
@@ -5275,7 +5276,7 @@ sinh({expr}) *sinh()*
|
|||||||
{only available when compiled with the |+float| feature}
|
{only available when compiled with the |+float| feature}
|
||||||
|
|
||||||
|
|
||||||
sort({list} [, {func}]) *sort()* *E702*
|
sort({list} [, {func} [, {dict}]]) *sort()* *E702*
|
||||||
Sort the items in {list} in-place. Returns {list}. If you
|
Sort the items in {list} in-place. Returns {list}. If you
|
||||||
want a list to remain unmodified make a copy first: >
|
want a list to remain unmodified make a copy first: >
|
||||||
:let sortedlist = sort(copy(mylist))
|
:let sortedlist = sort(copy(mylist))
|
||||||
@@ -5283,6 +5284,8 @@ sort({list} [, {func}]) *sort()* *E702*
|
|||||||
Numbers sort after Strings, |Lists| after Numbers.
|
Numbers sort after Strings, |Lists| after Numbers.
|
||||||
For sorting text in the current buffer use |:sort|.
|
For sorting text in the current buffer use |:sort|.
|
||||||
When {func} is given and it is one then case is ignored.
|
When {func} is given and it is one then case is ignored.
|
||||||
|
{dict} is for functions with the "dict" attribute. It will be
|
||||||
|
used to set the local variable "self". |Dictionary-function|
|
||||||
When {func} is a |Funcref| or a function name, this function
|
When {func} is a |Funcref| or a function name, this function
|
||||||
is called to compare items. The function is invoked with two
|
is called to compare items. The function is invoked with two
|
||||||
items as argument and must return zero if they are equal, 1 or
|
items as argument and must return zero if they are equal, 1 or
|
||||||
|
19
src/eval.c
19
src/eval.c
@@ -7930,7 +7930,7 @@ static struct fst
|
|||||||
{"sin", 1, 1, f_sin},
|
{"sin", 1, 1, f_sin},
|
||||||
{"sinh", 1, 1, f_sinh},
|
{"sinh", 1, 1, f_sinh},
|
||||||
#endif
|
#endif
|
||||||
{"sort", 1, 2, f_sort},
|
{"sort", 1, 3, f_sort},
|
||||||
{"soundfold", 1, 1, f_soundfold},
|
{"soundfold", 1, 1, f_soundfold},
|
||||||
{"spellbadword", 0, 1, f_spellbadword},
|
{"spellbadword", 0, 1, f_spellbadword},
|
||||||
{"spellsuggest", 1, 3, f_spellsuggest},
|
{"spellsuggest", 1, 3, f_spellsuggest},
|
||||||
@@ -16366,6 +16366,7 @@ static int
|
|||||||
|
|
||||||
static int item_compare_ic;
|
static int item_compare_ic;
|
||||||
static char_u *item_compare_func;
|
static char_u *item_compare_func;
|
||||||
|
static dict_T *item_compare_selfdict;
|
||||||
static int item_compare_func_err;
|
static int item_compare_func_err;
|
||||||
#define ITEM_COMPARE_FAIL 999
|
#define ITEM_COMPARE_FAIL 999
|
||||||
|
|
||||||
@@ -16425,7 +16426,8 @@ item_compare2(s1, s2)
|
|||||||
|
|
||||||
rettv.v_type = VAR_UNKNOWN; /* clear_tv() uses this */
|
rettv.v_type = VAR_UNKNOWN; /* clear_tv() uses this */
|
||||||
res = call_func(item_compare_func, (int)STRLEN(item_compare_func),
|
res = call_func(item_compare_func, (int)STRLEN(item_compare_func),
|
||||||
&rettv, 2, argv, 0L, 0L, &dummy, TRUE, NULL);
|
&rettv, 2, argv, 0L, 0L, &dummy, TRUE,
|
||||||
|
item_compare_selfdict);
|
||||||
clear_tv(&argv[0]);
|
clear_tv(&argv[0]);
|
||||||
clear_tv(&argv[1]);
|
clear_tv(&argv[1]);
|
||||||
|
|
||||||
@@ -16471,8 +16473,10 @@ f_sort(argvars, rettv)
|
|||||||
|
|
||||||
item_compare_ic = FALSE;
|
item_compare_ic = FALSE;
|
||||||
item_compare_func = NULL;
|
item_compare_func = NULL;
|
||||||
|
item_compare_selfdict = NULL;
|
||||||
if (argvars[1].v_type != VAR_UNKNOWN)
|
if (argvars[1].v_type != VAR_UNKNOWN)
|
||||||
{
|
{
|
||||||
|
/* optional second argument: {func} */
|
||||||
if (argvars[1].v_type == VAR_FUNC)
|
if (argvars[1].v_type == VAR_FUNC)
|
||||||
item_compare_func = argvars[1].vval.v_string;
|
item_compare_func = argvars[1].vval.v_string;
|
||||||
else
|
else
|
||||||
@@ -16487,6 +16491,17 @@ f_sort(argvars, rettv)
|
|||||||
else
|
else
|
||||||
item_compare_func = get_tv_string(&argvars[1]);
|
item_compare_func = get_tv_string(&argvars[1]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (argvars[2].v_type != VAR_UNKNOWN)
|
||||||
|
{
|
||||||
|
/* optional third argument: {dict} */
|
||||||
|
if (argvars[2].v_type != VAR_DICT)
|
||||||
|
{
|
||||||
|
EMSG(_(e_dictreq));
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
item_compare_selfdict = argvars[2].vval.v_dict;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Make an array with each entry pointing to an item in the List. */
|
/* Make an array with each entry pointing to an item in the List. */
|
||||||
|
@@ -709,6 +709,8 @@ static char *(features[]) =
|
|||||||
|
|
||||||
static int included_patches[] =
|
static int included_patches[] =
|
||||||
{ /* Add new patch number below this line */
|
{ /* Add new patch number below this line */
|
||||||
|
/**/
|
||||||
|
224,
|
||||||
/**/
|
/**/
|
||||||
223,
|
223,
|
||||||
/**/
|
/**/
|
||||||
|
Reference in New Issue
Block a user