diff options
author | Justin M. Keyes <justinkz@gmail.com> | 2014-12-02 11:41:14 -0500 |
---|---|---|
committer | Justin M. Keyes <justinkz@gmail.com> | 2014-12-02 11:41:14 -0500 |
commit | 26b2f9ab11a3b50a5066c4509688e989bb4e8e92 (patch) | |
tree | c6a2526e98e33239bed8b1c40758021ed1197bab /src/nvim/eval.c | |
parent | ecf1e672e11ec5a2d8cf97276405aca83f4d9786 (diff) | |
parent | b3151af69ca545e7eac3824d6101b7b8b5701b82 (diff) | |
download | rneovim-26b2f9ab11a3b50a5066c4509688e989bb4e8e92.tar.gz rneovim-26b2f9ab11a3b50a5066c4509688e989bb4e8e92.tar.bz2 rneovim-26b2f9ab11a3b50a5066c4509688e989bb4e8e92.zip |
Merge pull request #1567 from bfredl/systemlist
systemlist: add `keepempty` option to preserve final newline
Diffstat (limited to 'src/nvim/eval.c')
-rw-r--r-- | src/nvim/eval.c | 17 |
1 files changed, 13 insertions, 4 deletions
diff --git a/src/nvim/eval.c b/src/nvim/eval.c index 8be25bc34e..be69bdbe61 100644 --- a/src/nvim/eval.c +++ b/src/nvim/eval.c @@ -6593,7 +6593,7 @@ static struct fst { {"synconcealed", 2, 2, f_synconcealed}, {"synstack", 2, 2, f_synstack}, {"system", 1, 2, f_system}, - {"systemlist", 1, 2, f_systemlist}, + {"systemlist", 1, 3, f_systemlist}, {"tabpagebuflist", 0, 1, f_tabpagebuflist}, {"tabpagenr", 0, 1, f_tabpagenr}, {"tabpagewinnr", 1, 2, f_tabpagewinnr}, @@ -14523,7 +14523,7 @@ static void f_synstack(typval_T *argvars, typval_T *rettv) } } -static list_T* string_to_list(char_u *str, size_t len) +static list_T* string_to_list(char_u *str, size_t len, bool keepempty) { list_T *list = list_alloc(); @@ -14543,6 +14543,11 @@ static list_T* string_to_list(char_u *str, size_t len) list_append(list, li); } + // Optionally retain final newline, if present + if (keepempty && str[len-1] == NL) { + list_append_string(list, (char_u*)"", 0); + } + return list; } @@ -14585,7 +14590,11 @@ static void get_system_output_as_rettv(typval_T *argvars, typval_T *rettv, } if (retlist) { - rettv->vval.v_list = string_to_list((char_u *) res, nread); + int keepempty = 0; + if (argvars[1].v_type != VAR_UNKNOWN && argvars[2].v_type != VAR_UNKNOWN) { + keepempty = get_tv_number(&argvars[2]); + } + rettv->vval.v_list = string_to_list((char_u *) res, nread, keepempty != 0); rettv->vval.v_list->lv_refcount++; rettv->v_type = VAR_LIST; @@ -19723,7 +19732,7 @@ static void apply_job_autocmds(int id, char *name, char *type, str_slot->li_tv.v_type = VAR_LIST; str_slot->li_tv.v_lock = 0; str_slot->li_tv.vval.v_list = - string_to_list((char_u *) received, received_len); + string_to_list((char_u *) received, received_len, false); str_slot->li_tv.vval.v_list->lv_refcount++; list_append(list, str_slot); |