diff options
author | André Twupack <atwupack@mailbox.org> | 2014-09-22 20:27:04 +0200 |
---|---|---|
committer | Justin M. Keyes <justinkz@gmail.com> | 2014-11-14 11:56:25 -0500 |
commit | e199470bd31c0f79bdd3de2239058ef238ff9bcd (patch) | |
tree | f5e90d8d21c26273ef3494cbc8f5a5cde956d987 /src/nvim/quickfix.c | |
parent | c347d9226a00d1ff8015fcdab1fb414e2c3e4c0a (diff) | |
download | rneovim-e199470bd31c0f79bdd3de2239058ef238ff9bcd.tar.gz rneovim-e199470bd31c0f79bdd3de2239058ef238ff9bcd.tar.bz2 rneovim-e199470bd31c0f79bdd3de2239058ef238ff9bcd.zip |
vim-patch:7.4.378 #1217
Problem: Title of quickfist list is not kept for setqflist(list, 'r').
Solution: Keep the title. Add a test. (Lcd)
https://code.google.com/p/vim/source/detail?r=v7-4-378
Diffstat (limited to 'src/nvim/quickfix.c')
-rw-r--r-- | src/nvim/quickfix.c | 38 |
1 files changed, 22 insertions, 16 deletions
diff --git a/src/nvim/quickfix.c b/src/nvim/quickfix.c index 738bfb4c58..5ffd5ea263 100644 --- a/src/nvim/quickfix.c +++ b/src/nvim/quickfix.c @@ -798,6 +798,16 @@ qf_init_end: return retval; } +static void qf_store_title(qf_info_T *qi, char_u *title) +{ + if (title != NULL) { + char_u *p = xmalloc(STRLEN(title) + 2); + + qi->qf_lists[qi->qf_curlist].qf_title = p; + sprintf((char *)p, ":%s", (char *)title); + } +} + /* * Prepare for adding a new quickfix list. */ @@ -805,11 +815,9 @@ static void qf_new_list(qf_info_T *qi, char_u *qf_title) { int i; - /* - * If the current entry is not the last entry, delete entries below - * the current entry. This makes it possible to browse in a tree-like - * way with ":grep'. - */ + // If the current entry is not the last entry, delete entries beyond + // the current entry. This makes it possible to browse in a tree-like + // way with ":grep'. while (qi->qf_listcount > qi->qf_curlist + 1) qf_free(qi, --qi->qf_listcount); @@ -825,12 +833,7 @@ static void qf_new_list(qf_info_T *qi, char_u *qf_title) } else qi->qf_curlist = qi->qf_listcount++; memset(&qi->qf_lists[qi->qf_curlist], 0, (size_t)(sizeof(qf_list_T))); - if (qf_title != NULL) { - char_u *p = xmalloc(STRLEN(qf_title) + 2); - - qi->qf_lists[qi->qf_curlist].qf_title = p; - sprintf((char *)p, ":%s", (char *)qf_title); - } + qf_store_title(qi, qf_title); } /* @@ -2124,8 +2127,9 @@ void ex_copen(exarg_T *eap) */ qf_fill_buffer(qi); - if (qi->qf_lists[qi->qf_curlist].qf_title != NULL) - qf_set_title(qi); + if (qi->qf_lists[qi->qf_curlist].qf_title != NULL) { + qf_set_title_var(qi); + } curwin->w_cursor.lnum = qi->qf_lists[qi->qf_curlist].qf_index; curwin->w_cursor.col = 0; @@ -2263,7 +2267,7 @@ static void qf_update_buffer(qf_info_T *qi) && (win = qf_find_win(qi)) != NULL) { curwin_save = curwin; curwin = win; - qf_set_title(qi); + qf_set_title_var(qi); curwin = curwin_save; } @@ -2275,7 +2279,7 @@ static void qf_update_buffer(qf_info_T *qi) } } -static void qf_set_title(qf_info_T *qi) +static void qf_set_title_var(qf_info_T *qi) { set_internal_string_var((char_u *)"w:quickfix_title", qi->qf_lists[qi->qf_curlist].qf_title); @@ -3302,8 +3306,10 @@ int set_errorlist(win_T *wp, list_T *list, int action, char_u *title) for (prevp = qi->qf_lists[qi->qf_curlist].qf_start; prevp->qf_next != prevp; prevp = prevp->qf_next) ; - else if (action == 'r') + else if (action == 'r') { qf_free(qi, qi->qf_curlist); + qf_store_title(qi, title); + } for (li = list->lv_first; li != NULL; li = li->li_next) { if (li->li_tv.v_type != VAR_DICT) |