diff options
author | Justin M. Keyes <justinkz@gmail.com> | 2019-05-21 14:46:19 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2019-05-21 14:46:19 +0200 |
commit | 62d5137c8348e80d6231d8c7cc3784c70361030c (patch) | |
tree | d0c339ece770bfa44f1838baaa8548180ba7d687 /src/nvim/eval.c | |
parent | 1de77bbcec8ea4e50475e9b33986246e47614b84 (diff) | |
parent | 718702078356c4d53ef94e72662450b0971b5056 (diff) | |
download | rneovim-62d5137c8348e80d6231d8c7cc3784c70361030c.tar.gz rneovim-62d5137c8348e80d6231d8c7cc3784c70361030c.tar.bz2 rneovim-62d5137c8348e80d6231d8c7cc3784c70361030c.zip |
Merge #10038 from janlazo/vim-8.0.1514
vim-patch:8.0.{1514,1519},8.1.1360
Diffstat (limited to 'src/nvim/eval.c')
-rw-r--r-- | src/nvim/eval.c | 34 |
1 files changed, 34 insertions, 0 deletions
diff --git a/src/nvim/eval.c b/src/nvim/eval.c index 6479163028..de510a8bca 100644 --- a/src/nvim/eval.c +++ b/src/nvim/eval.c @@ -9547,6 +9547,40 @@ f_getbufvar_end: } } +// "getchangelist()" function +static void f_getchangelist(typval_T *argvars, typval_T *rettv, FunPtr fptr) +{ + tv_list_alloc_ret(rettv, 2); + vim_ignored = tv_get_number(&argvars[0]); // issue errmsg if type error + emsg_off++; + const buf_T *const buf = tv_get_buf(&argvars[0], false); + emsg_off--; + if (buf == NULL) { + return; + } + + list_T *const l = tv_list_alloc(buf->b_changelistlen); + tv_list_append_list(rettv->vval.v_list, l); + // The current window change list index tracks only the position in the + // current buffer change list. For other buffers, use the change list + // length as the current index. + tv_list_append_number(rettv->vval.v_list, + (buf == curwin->w_buffer) + ? curwin->w_changelistidx + : buf->b_changelistlen); + + for (int i = 0; i < buf->b_changelistlen; i++) { + if (buf->b_changelist[i].mark.lnum == 0) { + continue; + } + dict_T *const d = tv_dict_alloc(); + tv_list_append_dict(l, d); + tv_dict_add_nr(d, S_LEN("lnum"), buf->b_changelist[i].mark.lnum); + tv_dict_add_nr(d, S_LEN("col"), buf->b_changelist[i].mark.col); + tv_dict_add_nr(d, S_LEN("coladd"), buf->b_changelist[i].mark.coladd); + } +} + /* * "getchar()" function */ |