| To: vim-dev@vim.org |
| Subject: Patch 7.2.215 |
| Fcc: outbox |
| From: Bram Moolenaar <Bram@moolenaar.net> |
| Mime-Version: 1.0 |
| Content-Type: text/plain; charset=UTF-8 |
| Content-Transfer-Encoding: 8bit |
| |
| |
| Patch 7.2.215 |
| Problem: ml_get error when using ":vimgrep". |
| Solution: Load the memfile for the hidden buffer before putting it in a |
| window. Correct the order of splitting the window and filling |
| the window and buffer with data. |
| Files: src/fileio.c, src/proto/window.pro, src/quickfix.c, src/window.c |
| |
| |
| |
| |
| |
| *** 710,716 **** |
| #endif |
| #ifdef UNIX |
| /* Set swap file protection bits after creating it. */ |
| ! if (swap_mode > 0 && curbuf->b_ml.ml_mfp->mf_fname != NULL) |
| (void)mch_setperm(curbuf->b_ml.ml_mfp->mf_fname, (long)swap_mode); |
| #endif |
| } |
| --- 710,717 ---- |
| #endif |
| #ifdef UNIX |
| /* Set swap file protection bits after creating it. */ |
| ! if (swap_mode > 0 && curbuf->b_ml.ml_mfp != NULL |
| ! && curbuf->b_ml.ml_mfp->mf_fname != NULL) |
| (void)mch_setperm(curbuf->b_ml.ml_mfp->mf_fname, (long)swap_mode); |
| #endif |
| } |
| |
| *** 8435,8443 **** |
| * effects, insert it in a the current tab page. |
| * Anything related to a window (e.g., setting folds) may have |
| * unexpected results. */ |
| ! curwin = aucmd_win; |
| ! curwin->w_buffer = buf; |
| ++buf->b_nwindows; |
| |
| #ifdef FEAT_WINDOWS |
| /* Split the current window, put the aucmd_win in the upper half. */ |
| --- 8436,8444 ---- |
| * effects, insert it in a the current tab page. |
| * Anything related to a window (e.g., setting folds) may have |
| * unexpected results. */ |
| ! aucmd_win->w_buffer = buf; |
| ++buf->b_nwindows; |
| + win_init_empty(aucmd_win); /* set cursor and topline to safe values */ |
| |
| #ifdef FEAT_WINDOWS |
| /* Split the current window, put the aucmd_win in the upper half. */ |
| |
| *** 8448,8459 **** |
| (void)win_comp_pos(); /* recompute window positions */ |
| p_ea = save_ea; |
| #endif |
| ! /* set cursor and topline to safe values */ |
| ! curwin_init(); |
| ! #ifdef FEAT_VERTSPLIT |
| ! curwin->w_wincol = 0; |
| ! curwin->w_width = Columns; |
| ! #endif |
| } |
| curbuf = buf; |
| aco->new_curwin = curwin; |
| --- 8449,8455 ---- |
| (void)win_comp_pos(); /* recompute window positions */ |
| p_ea = save_ea; |
| #endif |
| ! curwin = aucmd_win; |
| } |
| curbuf = buf; |
| aco->new_curwin = curwin; |
| |
| |
| |
| *** 14,19 **** |
| --- 14,20 ---- |
| win_T *winframe_remove __ARGS((win_T *win, int *dirp, tabpage_T *tp)); |
| void close_others __ARGS((int message, int forceit)); |
| void curwin_init __ARGS((void)); |
| + void win_init_empty __ARGS((win_T *wp)); |
| int win_alloc_first __ARGS((void)); |
| void win_alloc_aucmd_win __ARGS((void)); |
| void win_init_size __ARGS((void)); |
| |
| |
| |
| *** 3411,3424 **** |
| /* Init the options. */ |
| buf_copy_options(newbuf, BCO_ENTER | BCO_NOHELP); |
| |
| ! /* set curwin/curbuf to buf and save a few things */ |
| ! aucmd_prepbuf(&aco, newbuf); |
| |
| ! /* Need to set the filename for autocommands. */ |
| ! (void)setfname(curbuf, fname, NULL, FALSE); |
| |
| - if (ml_open(curbuf) == OK) |
| - { |
| /* Create swap file now to avoid the ATTENTION message. */ |
| check_need_swap(TRUE); |
| |
| --- 3411,3425 ---- |
| /* Init the options. */ |
| buf_copy_options(newbuf, BCO_ENTER | BCO_NOHELP); |
| |
| ! /* need to open the memfile before putting the buffer in a window */ |
| ! if (ml_open(newbuf) == OK) |
| ! { |
| ! /* set curwin/curbuf to buf and save a few things */ |
| ! aucmd_prepbuf(&aco, newbuf); |
| |
| ! /* Need to set the filename for autocommands. */ |
| ! (void)setfname(curbuf, fname, NULL, FALSE); |
| |
| /* Create swap file now to avoid the ATTENTION message. */ |
| check_need_swap(TRUE); |
| |
| |
| *** 3441,3450 **** |
| newbuf = curbuf; |
| } |
| } |
| - } |
| |
| ! /* restore curwin/curbuf and a few other things */ |
| ! aucmd_restbuf(&aco); |
| |
| if (!buf_valid(newbuf)) |
| return NULL; |
| --- 3442,3451 ---- |
| newbuf = curbuf; |
| } |
| } |
| |
| ! /* restore curwin/curbuf and a few other things */ |
| ! aucmd_restbuf(&aco); |
| ! } |
| |
| if (!buf_valid(newbuf)) |
| return NULL; |
| |
| |
| |
| *** 2354,2366 **** |
| frame_T *frp; |
| win_T *wp; |
| |
| - #ifdef FEAT_FOLDING |
| - clearFolding(win); |
| - #endif |
| - |
| - /* reduce the reference count to the argument list. */ |
| - alist_unlink(win->w_alist); |
| - |
| /* Remove the window and its frame from the tree of frames. */ |
| frp = win->w_frame; |
| wp = winframe_remove(win, dirp, tp); |
| --- 2354,2359 ---- |
| |
| *** 2386,2394 **** |
| tabpage_close(TRUE); |
| # endif |
| |
| - while (firstwin != NULL) |
| - (void)win_free_mem(firstwin, &dummy, NULL); |
| - |
| # ifdef FEAT_AUTOCMD |
| if (aucmd_win != NULL) |
| { |
| --- 2379,2384 ---- |
| |
| *** 2396,2401 **** |
| --- 2386,2394 ---- |
| aucmd_win = NULL; |
| } |
| # endif |
| + |
| + while (firstwin != NULL) |
| + (void)win_free_mem(firstwin, &dummy, NULL); |
| } |
| #endif |
| |
| |
| *** 3204,3230 **** |
| void |
| curwin_init() |
| { |
| ! redraw_win_later(curwin, NOT_VALID); |
| ! curwin->w_lines_valid = 0; |
| ! curwin->w_cursor.lnum = 1; |
| ! curwin->w_curswant = curwin->w_cursor.col = 0; |
| #ifdef FEAT_VIRTUALEDIT |
| ! curwin->w_cursor.coladd = 0; |
| #endif |
| ! curwin->w_pcmark.lnum = 1; /* pcmark not cleared but set to line 1 */ |
| ! curwin->w_pcmark.col = 0; |
| ! curwin->w_prev_pcmark.lnum = 0; |
| ! curwin->w_prev_pcmark.col = 0; |
| ! curwin->w_topline = 1; |
| #ifdef FEAT_DIFF |
| ! curwin->w_topfill = 0; |
| #endif |
| ! curwin->w_botline = 2; |
| #ifdef FEAT_FKMAP |
| ! if (curwin->w_p_rl) |
| ! curwin->w_farsi = W_CONV + W_R_L; |
| else |
| ! curwin->w_farsi = W_CONV; |
| #endif |
| } |
| |
| --- 3197,3230 ---- |
| void |
| curwin_init() |
| { |
| ! win_init_empty(curwin); |
| ! } |
| ! |
| ! void |
| ! win_init_empty(wp) |
| ! win_T *wp; |
| ! { |
| ! redraw_win_later(wp, NOT_VALID); |
| ! wp->w_lines_valid = 0; |
| ! wp->w_cursor.lnum = 1; |
| ! wp->w_curswant = wp->w_cursor.col = 0; |
| #ifdef FEAT_VIRTUALEDIT |
| ! wp->w_cursor.coladd = 0; |
| #endif |
| ! wp->w_pcmark.lnum = 1; /* pcmark not cleared but set to line 1 */ |
| ! wp->w_pcmark.col = 0; |
| ! wp->w_prev_pcmark.lnum = 0; |
| ! wp->w_prev_pcmark.col = 0; |
| ! wp->w_topline = 1; |
| #ifdef FEAT_DIFF |
| ! wp->w_topfill = 0; |
| #endif |
| ! wp->w_botline = 2; |
| #ifdef FEAT_FKMAP |
| ! if (wp->w_p_rl) |
| ! wp->w_farsi = W_CONV + W_R_L; |
| else |
| ! wp->w_farsi = W_CONV; |
| #endif |
| } |
| |
| |
| *** 4325,4330 **** |
| --- 4325,4337 ---- |
| { |
| int i; |
| |
| + #ifdef FEAT_FOLDING |
| + clearFolding(wp); |
| + #endif |
| + |
| + /* reduce the reference count to the argument list. */ |
| + alist_unlink(wp->w_alist); |
| + |
| #ifdef FEAT_AUTOCMD |
| /* Don't execute autocommands while the window is halfway being deleted. |
| * gui_mch_destroy_scrollbar() may trigger a FocusGained event. */ |
| |
| *** 4387,4393 **** |
| } |
| #endif /* FEAT_GUI */ |
| |
| ! win_remove(wp, tp); |
| vim_free(wp); |
| |
| #ifdef FEAT_AUTOCMD |
| --- 4394,4403 ---- |
| } |
| #endif /* FEAT_GUI */ |
| |
| ! #ifdef FEAT_AUTOCMD |
| ! if (wp != aucmd_win) |
| ! #endif |
| ! win_remove(wp, tp); |
| vim_free(wp); |
| |
| #ifdef FEAT_AUTOCMD |
| |
| |
| |
| *** 678,679 **** |
| --- 678,681 ---- |
| { /* Add new patch number below this line */ |
| + /**/ |
| + 215, |
| /**/ |
| |
| -- |
| Micro$oft: where do you want to go today? |
| Linux: where do you want to go tomorrow? |
| FreeBSD: are you guys coming, or what? |
| |
| /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\ |
| /// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\ |
| \\\ download, build and distribute -- http://www.A-A-P.org /// |
| \\\ help me help AIDS victims -- http://ICCF-Holland.org /// |