diff options
author | Jan Edmund Lazo <jan.lazo@mail.utoronto.ca> | 2019-05-19 07:42:41 -0400 |
---|---|---|
committer | Jan Edmund Lazo <jan.lazo@mail.utoronto.ca> | 2019-05-19 23:15:47 -0400 |
commit | 41828a7302d1ca17d5b84ff55aa9c91bd846ad64 (patch) | |
tree | 51768180132f596d38da94a116da69eba3efe1e2 /src/nvim/eval.c | |
parent | 83aed410b6fa4e807070b0af3bd89da4d29a812b (diff) | |
download | rneovim-41828a7302d1ca17d5b84ff55aa9c91bd846ad64.tar.gz rneovim-41828a7302d1ca17d5b84ff55aa9c91bd846ad64.tar.bz2 rneovim-41828a7302d1ca17d5b84ff55aa9c91bd846ad64.zip |
vim-patch:8.0.1497: getting the jump list requires parsing the output of :jumps
Problem: Getting the jump list requires parsing the output of :jumps.
Solution: Add getjumplist(). (Yegappan Lakshmanan, closes vim/vim#2609)
https://github.com/vim/vim/commit/4f50588ba336e7f086a72c53f5688c2494fc34b3
Diffstat (limited to 'src/nvim/eval.c')
-rw-r--r-- | src/nvim/eval.c | 26 |
1 files changed, 26 insertions, 0 deletions
diff --git a/src/nvim/eval.c b/src/nvim/eval.c index 132450f7a1..d48161d736 100644 --- a/src/nvim/eval.c +++ b/src/nvim/eval.c @@ -10051,6 +10051,32 @@ static void f_getftype(typval_T *argvars, typval_T *rettv, FunPtr fptr) rettv->vval.v_string = type; } +// "getjumplist()" function +static void f_getjumplist(typval_T *argvars, typval_T *rettv, FunPtr fptr) +{ + tv_list_alloc_ret(rettv, kListLenMayKnow); + const win_T *const wp = find_tabwin(&argvars[0], &argvars[1]); + if (wp == NULL) { + return; + } + + list_T *const l = tv_list_alloc(wp->w_jumplistlen); + tv_list_append_list(rettv->vval.v_list, l); + tv_list_append_number(rettv->vval.v_list, wp->w_jumplistidx); + + for (int i = 0; i < wp->w_jumplistlen; i++) { + dict_T *const d = tv_dict_alloc(); + tv_list_append_dict(l, d); + tv_dict_add_nr(d, S_LEN("lnum"), wp->w_jumplist[i].fmark.mark.lnum); + tv_dict_add_nr(d, S_LEN("col"), wp->w_jumplist[i].fmark.mark.col); + tv_dict_add_nr(d, S_LEN("coladd"), wp->w_jumplist[i].fmark.mark.coladd); + tv_dict_add_nr(d, S_LEN("bufnr"), wp->w_jumplist[i].fmark.fnum); + if (wp->w_jumplist[i].fmark.fnum == 0) { + tv_dict_add_str(d, S_LEN("filename"), (char *)wp->w_jumplist[i].fname); + } + } +} + /* * "getline(lnum, [end])" function */ |