To: vim-dev@vim.org Subject: Patch 7.2.041 Fcc: outbox From: Bram Moolenaar Mime-Version: 1.0 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 8bit ------------ Patch 7.2.041 Problem: In diff mode, when using two tabs, each with two diffed buffers, editing a buffer of the other tab messes up the diff. (Matt Mzyzik) Solution: Only copy options from a window where the buffer was edited that doesn't have 'diff' set or is for the current tab page. Also fix that window options for a buffer are stored with the wrong window. Files: src/buffer.c, src/ex_cmds.c, src/ex_cmds2.c, src/ex_docmd.c, src/ex_getln.c, src/if_sniff.c, src/main.c, src/netbeans.c, src/normal.c, src/popupmnu.c, src/proto/buffer.pro, src/proto/ex_cmds.pro src/quickfix.c, src/window.c *** ../vim-7.2.040/src/buffer.c Wed Nov 12 12:51:38 2008 --- src/buffer.c Wed Nov 12 17:45:01 2008 *************** *** 33,39 **** static char_u *fname_match __ARGS((regprog_T *prog, char_u *name)); #endif static void buflist_setfpos __ARGS((buf_T *buf, win_T *win, linenr_T lnum, colnr_T col, int copy_options)); ! static wininfo_T *find_wininfo __ARGS((buf_T *buf)); #ifdef UNIX static buf_T *buflist_findname_stat __ARGS((char_u *ffname, struct stat *st)); static int otherfile_buf __ARGS((buf_T *buf, char_u *ffname, struct stat *stp)); --- 33,39 ---- static char_u *fname_match __ARGS((regprog_T *prog, char_u *name)); #endif static void buflist_setfpos __ARGS((buf_T *buf, win_T *win, linenr_T lnum, colnr_T col, int copy_options)); ! static wininfo_T *find_wininfo __ARGS((buf_T *buf, int skip_diff_buffer)); #ifdef UNIX static buf_T *buflist_findname_stat __ARGS((char_u *ffname, struct stat *st)); static int otherfile_buf __ARGS((buf_T *buf, char_u *ffname, struct stat *stp)); *************** *** 1093,1099 **** #endif setpcmark(); retval = do_ecmd(0, NULL, NULL, NULL, ECMD_ONE, ! forceit ? ECMD_FORCEIT : 0); /* * do_ecmd() may create a new buffer, then we have to delete --- 1093,1099 ---- #endif setpcmark(); retval = do_ecmd(0, NULL, NULL, NULL, ECMD_ONE, ! forceit ? ECMD_FORCEIT : 0, curwin); /* * do_ecmd() may create a new buffer, then we have to delete *************** *** 1316,1322 **** setpcmark(); if (!cmdmod.keepalt) curwin->w_alt_fnum = curbuf->b_fnum; /* remember alternate file */ ! buflist_altfpos(); /* remember curpos */ #ifdef FEAT_VISUAL /* Don't restart Select mode after switching to another buffer. */ --- 1316,1322 ---- setpcmark(); if (!cmdmod.keepalt) curwin->w_alt_fnum = curbuf->b_fnum; /* remember alternate file */ ! buflist_altfpos(curwin); /* remember curpos */ #ifdef FEAT_VISUAL /* Don't restart Select mode after switching to another buffer. */ *************** *** 2404,2425 **** return; } /* * Find info for the current window in buffer "buf". * If not found, return the info for the most recently used window. * Returns NULL when there isn't any info. */ static wininfo_T * ! find_wininfo(buf) buf_T *buf; { wininfo_T *wip; for (wip = buf->b_wininfo; wip != NULL; wip = wip->wi_next) ! if (wip->wi_win == curwin) break; ! if (wip == NULL) /* if no fpos for curwin, use the first in the list */ ! wip = buf->b_wininfo; return wip; } --- 2404,2473 ---- return; } + #ifdef FEAT_DIFF + static int wininfo_other_tab_diff __ARGS((wininfo_T *wip)); + + /* + * Return TRUE when "wip" has 'diff' set and the diff is only for another tab + * page. That's because a diff is local to a tab page. + */ + static int + wininfo_other_tab_diff(wip) + wininfo_T *wip; + { + win_T *wp; + + if (wip->wi_opt.wo_diff) + { + for (wp = firstwin; wp != NULL; wp = wp->w_next) + /* return FALSE when it's a window in the current tab page, thus + * the buffer was in diff mode here */ + if (wip->wi_win == wp) + return FALSE; + return TRUE; + } + return FALSE; + } + #endif + /* * Find info for the current window in buffer "buf". * If not found, return the info for the most recently used window. + * When "skip_diff_buffer" is TRUE avoid windows with 'diff' set that is in + * another tab page. * Returns NULL when there isn't any info. */ + /*ARGSUSED*/ static wininfo_T * ! find_wininfo(buf, skip_diff_buffer) buf_T *buf; + int skip_diff_buffer; { wininfo_T *wip; for (wip = buf->b_wininfo; wip != NULL; wip = wip->wi_next) ! if (wip->wi_win == curwin ! #ifdef FEAT_DIFF ! && (!skip_diff_buffer || !wininfo_other_tab_diff(wip)) ! #endif ! ) break; ! ! /* If no wininfo for curwin, use the first in the list (that doesn't have ! * 'diff' set and is in another tab page). */ ! if (wip == NULL) ! { ! #ifdef FEAT_DIFF ! if (skip_diff_buffer) ! { ! for (wip = buf->b_wininfo; wip != NULL; wip = wip->wi_next) ! if (!wininfo_other_tab_diff(wip)) ! break; ! } ! else ! #endif ! wip = buf->b_wininfo; ! } return wip; } *************** *** 2440,2446 **** clearFolding(curwin); #endif ! wip = find_wininfo(buf); if (wip != NULL && wip->wi_optset) { copy_winopt(&wip->wi_opt, &curwin->w_onebuf_opt); --- 2488,2494 ---- clearFolding(curwin); #endif ! wip = find_wininfo(buf, TRUE); if (wip != NULL && wip->wi_optset) { copy_winopt(&wip->wi_opt, &curwin->w_onebuf_opt); *************** *** 2472,2478 **** wininfo_T *wip; static pos_T no_position = {1, 0}; ! wip = find_wininfo(buf); if (wip != NULL) return &(wip->wi_fpos); else --- 2520,2526 ---- wininfo_T *wip; static pos_T no_position = {1, 0}; ! wip = find_wininfo(buf, FALSE); if (wip != NULL) return &(wip->wi_fpos); else *************** *** 2793,2806 **** #endif /* ! * Set alternate cursor position for current window. * Also save the local window option values. */ void ! buflist_altfpos() { ! buflist_setfpos(curbuf, curwin, curwin->w_cursor.lnum, ! curwin->w_cursor.col, TRUE); } /* --- 2841,2854 ---- #endif /* ! * Set alternate cursor position for the current buffer and window "win". * Also save the local window option values. */ void ! buflist_altfpos(win) ! win_T *win; { ! buflist_setfpos(curbuf, win, win->w_cursor.lnum, win->w_cursor.col, TRUE); } /* *************** *** 4492,4498 **** ECMD_ONE, ((P_HID(curwin->w_buffer) || bufIsChanged(curwin->w_buffer)) ? ECMD_HIDE : 0) ! + ECMD_OLDBUF); #ifdef FEAT_AUTOCMD if (use_firstwin) ++autocmd_no_leave; --- 4540,4546 ---- ECMD_ONE, ((P_HID(curwin->w_buffer) || bufIsChanged(curwin->w_buffer)) ? ECMD_HIDE : 0) ! + ECMD_OLDBUF, curwin); #ifdef FEAT_AUTOCMD if (use_firstwin) ++autocmd_no_leave; *** ../vim-7.2.040/src/ex_cmds.c Sun Nov 9 13:43:25 2008 --- src/ex_cmds.c Wed Nov 12 22:41:41 2008 *************** *** 3052,3058 **** retval = 0; /* it's in the same file */ } else if (do_ecmd(fnum, ffname, sfname, NULL, lnum, ! (P_HID(curbuf) ? ECMD_HIDE : 0) + (forceit ? ECMD_FORCEIT : 0)) == OK) retval = -1; /* opened another file */ else retval = 1; /* error encountered */ --- 3052,3059 ---- retval = 0; /* it's in the same file */ } else if (do_ecmd(fnum, ffname, sfname, NULL, lnum, ! (P_HID(curbuf) ? ECMD_HIDE : 0) + (forceit ? ECMD_FORCEIT : 0), ! curwin) == OK) retval = -1; /* opened another file */ else retval = 1; /* error encountered */ *************** *** 3085,3101 **** * ECMD_OLDBUF: use existing buffer if it exists * ECMD_FORCEIT: ! used for Ex command * ECMD_ADDBUF: don't edit, just add to buffer list * * return FAIL for failure, OK otherwise */ int ! do_ecmd(fnum, ffname, sfname, eap, newlnum, flags) int fnum; char_u *ffname; char_u *sfname; exarg_T *eap; /* can be NULL! */ linenr_T newlnum; int flags; { int other_file; /* TRUE if editing another file */ int oldbuf; /* TRUE if using existing buffer */ --- 3086,3106 ---- * ECMD_OLDBUF: use existing buffer if it exists * ECMD_FORCEIT: ! used for Ex command * ECMD_ADDBUF: don't edit, just add to buffer list + * oldwin: Should be "curwin" when editing a new buffer in the current + * window, NULL when splitting the window first. When not NULL info + * of the previous buffer for "oldwin" is stored. * * return FAIL for failure, OK otherwise */ int ! do_ecmd(fnum, ffname, sfname, eap, newlnum, flags, oldwin) int fnum; char_u *ffname; char_u *sfname; exarg_T *eap; /* can be NULL! */ linenr_T newlnum; int flags; + win_T *oldwin; { int other_file; /* TRUE if editing another file */ int oldbuf; /* TRUE if using existing buffer */ *************** *** 3267,3273 **** { if (!cmdmod.keepalt) curwin->w_alt_fnum = curbuf->b_fnum; ! buflist_altfpos(); } if (fnum) --- 3272,3279 ---- { if (!cmdmod.keepalt) curwin->w_alt_fnum = curbuf->b_fnum; ! if (oldwin != NULL) ! buflist_altfpos(oldwin); } if (fnum) *************** *** 3371,3377 **** /* close the link to the current buffer */ u_sync(FALSE); ! close_buffer(curwin, curbuf, (flags & ECMD_HIDE) ? 0 : DOBUF_UNLOAD); #ifdef FEAT_AUTOCMD --- 3377,3383 ---- /* close the link to the current buffer */ u_sync(FALSE); ! close_buffer(oldwin, curbuf, (flags & ECMD_HIDE) ? 0 : DOBUF_UNLOAD); #ifdef FEAT_AUTOCMD *************** *** 5609,5615 **** */ alt_fnum = curbuf->b_fnum; (void)do_ecmd(0, NULL, NULL, NULL, ECMD_LASTL, ! ECMD_HIDE + ECMD_SET_HELP); if (!cmdmod.keepalt) curwin->w_alt_fnum = alt_fnum; empty_fnum = curbuf->b_fnum; --- 5615,5627 ---- */ alt_fnum = curbuf->b_fnum; (void)do_ecmd(0, NULL, NULL, NULL, ECMD_LASTL, ! ECMD_HIDE + ECMD_SET_HELP, ! #ifdef FEAT_WINDOWS ! NULL /* buffer is still open, don't store info */ ! #else ! curwin ! #endif ! ); if (!cmdmod.keepalt) curwin->w_alt_fnum = alt_fnum; empty_fnum = curbuf->b_fnum; *** ../vim-7.2.040/src/ex_cmds2.c Sun Sep 7 15:49:45 2008 --- src/ex_cmds2.c Wed Nov 12 17:46:41 2008 *************** *** 2132,2139 **** * argument index. */ if (do_ecmd(0, alist_name(&ARGLIST[curwin->w_arg_idx]), NULL, eap, ECMD_LAST, ! (P_HID(curwin->w_buffer) ? ECMD_HIDE : 0) + ! (eap->forceit ? ECMD_FORCEIT : 0)) == FAIL) curwin->w_arg_idx = old_arg_idx; /* like Vi: set the mark where the cursor is in the file. */ else if (eap->cmdidx != CMD_argdo) --- 2132,2139 ---- * argument index. */ if (do_ecmd(0, alist_name(&ARGLIST[curwin->w_arg_idx]), NULL, eap, ECMD_LAST, ! (P_HID(curwin->w_buffer) ? ECMD_HIDE : 0) ! + (eap->forceit ? ECMD_FORCEIT : 0), curwin) == FAIL) curwin->w_arg_idx = old_arg_idx; /* like Vi: set the mark where the cursor is in the file. */ else if (eap->cmdidx != CMD_argdo) *** ../vim-7.2.040/src/ex_docmd.c Sun Nov 9 13:43:25 2008 --- src/ex_docmd.c Wed Nov 12 18:04:22 2008 *************** *** 7488,7494 **** /* ":new" or ":tabnew" without argument: edit an new empty buffer */ setpcmark(); (void)do_ecmd(0, NULL, NULL, eap, ECMD_ONE, ! ECMD_HIDE + (eap->forceit ? ECMD_FORCEIT : 0)); } else if ((eap->cmdidx != CMD_split #ifdef FEAT_VERTSPLIT --- 7488,7495 ---- /* ":new" or ":tabnew" without argument: edit an new empty buffer */ setpcmark(); (void)do_ecmd(0, NULL, NULL, eap, ECMD_ONE, ! ECMD_HIDE + (eap->forceit ? ECMD_FORCEIT : 0), ! old_curwin == NULL ? curwin : NULL); } else if ((eap->cmdidx != CMD_split #ifdef FEAT_VERTSPLIT *************** *** 7525,7531 **** #ifdef FEAT_LISTCMDS + (eap->cmdidx == CMD_badd ? ECMD_ADDBUF : 0 ) #endif ! ) == FAIL) { /* Editing the file failed. If the window was split, close it. */ #ifdef FEAT_WINDOWS --- 7526,7532 ---- #ifdef FEAT_LISTCMDS + (eap->cmdidx == CMD_badd ? ECMD_ADDBUF : 0 ) #endif ! , old_curwin == NULL ? curwin : NULL) == FAIL) { /* Editing the file failed. If the window was split, close it. */ #ifdef FEAT_WINDOWS *** ../vim-7.2.040/src/ex_getln.c Sun Sep 14 14:41:44 2008 --- src/ex_getln.c Wed Nov 12 18:06:25 2008 *************** *** 6051,6057 **** cmdwin_type = '-'; /* Create the command-line buffer empty. */ ! (void)do_ecmd(0, NULL, NULL, NULL, ECMD_ONE, ECMD_HIDE); (void)setfname(curbuf, (char_u *)"[Command Line]", NULL, TRUE); set_option_value((char_u *)"bt", 0L, (char_u *)"nofile", OPT_LOCAL); set_option_value((char_u *)"swf", 0L, NULL, OPT_LOCAL); --- 6051,6057 ---- cmdwin_type = '-'; /* Create the command-line buffer empty. */ ! (void)do_ecmd(0, NULL, NULL, NULL, ECMD_ONE, ECMD_HIDE, NULL); (void)setfname(curbuf, (char_u *)"[Command Line]", NULL, TRUE); set_option_value((char_u *)"bt", 0L, (char_u *)"nofile", OPT_LOCAL); set_option_value((char_u *)"swf", 0L, NULL, OPT_LOCAL); *** ../vim-7.2.040/src/if_sniff.c Sat Aug 9 19:41:16 2008 --- src/if_sniff.c Wed Nov 12 17:48:46 2008 *************** *** 1114,1120 **** char *fname; { ++no_wait_return; ! do_ecmd(0, (char_u *)fname, NULL, NULL, ECMD_ONE, ECMD_HIDE+ECMD_OLDBUF); curbuf->b_sniff = TRUE; --no_wait_return; /* [ex_docmd.c] */ } --- 1114,1121 ---- char *fname; { ++no_wait_return; ! do_ecmd(0, (char_u *)fname, NULL, NULL, ECMD_ONE, ECMD_HIDE+ECMD_OLDBUF, ! curwin); curbuf->b_sniff = TRUE; --no_wait_return; /* [ex_docmd.c] */ } *** ../vim-7.2.040/src/main.c Sun Nov 9 13:43:25 2008 --- src/main.c Wed Nov 12 17:49:06 2008 *************** *** 2588,2594 **** # endif (void)do_ecmd(0, arg_idx < GARGCOUNT ? alist_name(&GARGLIST[arg_idx]) : NULL, ! NULL, NULL, ECMD_LASTL, ECMD_HIDE); # ifdef HAS_SWAP_EXISTS_ACTION if (swap_exists_did_quit) { --- 2588,2594 ---- # endif (void)do_ecmd(0, arg_idx < GARGCOUNT ? alist_name(&GARGLIST[arg_idx]) : NULL, ! NULL, NULL, ECMD_LASTL, ECMD_HIDE, curwin); # ifdef HAS_SWAP_EXISTS_ACTION if (swap_exists_did_quit) { *** ../vim-7.2.040/src/netbeans.c Sun Jul 13 19:18:03 2008 --- src/netbeans.c Wed Nov 12 17:49:40 2008 *************** *** 1795,1801 **** buf->displayname = NULL; netbeansReadFile = 0; /* don't try to open disk file */ ! do_ecmd(0, NULL, 0, 0, ECMD_ONE, ECMD_HIDE + ECMD_OLDBUF); netbeansReadFile = 1; buf->bufp = curbuf; maketitle(); --- 1795,1801 ---- buf->displayname = NULL; netbeansReadFile = 0; /* don't try to open disk file */ ! do_ecmd(0, NULL, 0, 0, ECMD_ONE, ECMD_HIDE + ECMD_OLDBUF, curwin); netbeansReadFile = 1; buf->bufp = curbuf; maketitle(); *************** *** 1960,1966 **** netbeansReadFile = 0; /* don't try to open disk file */ do_ecmd(0, (char_u *)buf->displayname, 0, 0, ECMD_ONE, ! ECMD_HIDE + ECMD_OLDBUF); netbeansReadFile = 1; buf->bufp = curbuf; maketitle(); --- 1960,1966 ---- netbeansReadFile = 0; /* don't try to open disk file */ do_ecmd(0, (char_u *)buf->displayname, 0, 0, ECMD_ONE, ! ECMD_HIDE + ECMD_OLDBUF, curwin); netbeansReadFile = 1; buf->bufp = curbuf; maketitle(); *************** *** 1979,1985 **** vim_free(buf->displayname); buf->displayname = nb_unquote(args, NULL); do_ecmd(0, (char_u *)buf->displayname, NULL, NULL, ECMD_ONE, ! ECMD_HIDE + ECMD_OLDBUF); buf->bufp = curbuf; buf->initDone = TRUE; doupdate = 1; --- 1979,1985 ---- vim_free(buf->displayname); buf->displayname = nb_unquote(args, NULL); do_ecmd(0, (char_u *)buf->displayname, NULL, NULL, ECMD_ONE, ! ECMD_HIDE + ECMD_OLDBUF, curwin); buf->bufp = curbuf; buf->initDone = TRUE; doupdate = 1; *** ../vim-7.2.040/src/normal.c Sat Nov 1 13:51:57 2008 --- src/normal.c Wed Nov 12 17:49:50 2008 *************** *** 6050,6056 **** autowrite(curbuf, FALSE); setpcmark(); (void)do_ecmd(0, ptr, NULL, NULL, ECMD_LAST, ! P_HID(curbuf) ? ECMD_HIDE : 0); if (cap->nchar == 'F' && lnum >= 0) { curwin->w_cursor.lnum = lnum; --- 6050,6056 ---- autowrite(curbuf, FALSE); setpcmark(); (void)do_ecmd(0, ptr, NULL, NULL, ECMD_LAST, ! P_HID(curbuf) ? ECMD_HIDE : 0, curwin); if (cap->nchar == 'F' && lnum >= 0) { curwin->w_cursor.lnum = lnum; *** ../vim-7.2.040/src/popupmnu.c Sun Jul 13 19:33:51 2008 --- src/popupmnu.c Wed Nov 12 18:08:07 2008 *************** *** 573,579 **** { /* Don't want to sync undo in the current buffer. */ ++no_u_sync; ! res = do_ecmd(0, NULL, NULL, NULL, ECMD_ONE, 0); --no_u_sync; if (res == OK) { --- 573,579 ---- { /* Don't want to sync undo in the current buffer. */ ++no_u_sync; ! res = do_ecmd(0, NULL, NULL, NULL, ECMD_ONE, 0, NULL); --no_u_sync; if (res == OK) { *** ../vim-7.2.040/src/proto/buffer.pro Sun May 6 13:57:53 2007 --- src/proto/buffer.pro Wed Nov 12 17:43:39 2008 *************** *** 33,39 **** char_u *getaltfname __ARGS((int errmsg)); int buflist_add __ARGS((char_u *fname, int flags)); void buflist_slash_adjust __ARGS((void)); ! void buflist_altfpos __ARGS((void)); int otherfile __ARGS((char_u *ffname)); void buf_setino __ARGS((buf_T *buf)); void fileinfo __ARGS((int fullname, int shorthelp, int dont_truncate)); --- 33,39 ---- char_u *getaltfname __ARGS((int errmsg)); int buflist_add __ARGS((char_u *fname, int flags)); void buflist_slash_adjust __ARGS((void)); ! void buflist_altfpos __ARGS((win_T *win)); int otherfile __ARGS((char_u *ffname)); void buf_setino __ARGS((buf_T *buf)); void fileinfo __ARGS((int fullname, int shorthelp, int dont_truncate)); *** ../vim-7.2.040/src/proto/ex_cmds.pro Sun Nov 9 13:43:25 2008 --- src/proto/ex_cmds.pro Wed Nov 12 17:44:27 2008 *************** *** 27,33 **** void do_wqall __ARGS((exarg_T *eap)); int not_writing __ARGS((void)); int getfile __ARGS((int fnum, char_u *ffname, char_u *sfname, int setpm, linenr_T lnum, int forceit)); ! int do_ecmd __ARGS((int fnum, char_u *ffname, char_u *sfname, exarg_T *eap, linenr_T newlnum, int flags)); void ex_append __ARGS((exarg_T *eap)); void ex_change __ARGS((exarg_T *eap)); void ex_z __ARGS((exarg_T *eap)); --- 27,33 ---- void do_wqall __ARGS((exarg_T *eap)); int not_writing __ARGS((void)); int getfile __ARGS((int fnum, char_u *ffname, char_u *sfname, int setpm, linenr_T lnum, int forceit)); ! int do_ecmd __ARGS((int fnum, char_u *ffname, char_u *sfname, exarg_T *eap, linenr_T newlnum, int flags, win_T *oldwin)); void ex_append __ARGS((exarg_T *eap)); void ex_change __ARGS((exarg_T *eap)); void ex_z __ARGS((exarg_T *eap)); *** ../vim-7.2.040/src/quickfix.c Thu Jul 24 18:44:59 2008 --- src/quickfix.c Wed Nov 12 18:12:00 2008 *************** *** 1420,1425 **** --- 1420,1426 ---- win_T *win; win_T *altwin; #endif + win_T *oldwin = curwin; int print_message = TRUE; int len; #ifdef FEAT_FOLDING *************** *** 1744,1750 **** } else ok = do_ecmd(qf_ptr->qf_fnum, NULL, NULL, NULL, (linenr_T)1, ! ECMD_HIDE + ECMD_SET_HELP); } else ok = buflist_getfile(qf_ptr->qf_fnum, --- 1745,1752 ---- } else ok = do_ecmd(qf_ptr->qf_fnum, NULL, NULL, NULL, (linenr_T)1, ! ECMD_HIDE + ECMD_SET_HELP, ! oldwin == curwin ? curwin : NULL); } else ok = buflist_getfile(qf_ptr->qf_fnum, *************** *** 2267,2272 **** --- 2269,2275 ---- win_T *win; tabpage_T *prevtab = curtab; buf_T *qf_buf; + win_T *oldwin = curwin; if (eap->cmdidx == CMD_lopen || eap->cmdidx == CMD_lwindow) { *************** *** 2326,2339 **** win->w_llist->qf_refcount++; } if (qf_buf != NULL) /* Use the existing quickfix buffer */ (void)do_ecmd(qf_buf->b_fnum, NULL, NULL, NULL, ECMD_ONE, ! ECMD_HIDE + ECMD_OLDBUF); else { /* Create a new quickfix buffer */ ! (void)do_ecmd(0, NULL, NULL, NULL, ECMD_ONE, ECMD_HIDE); /* switch off 'swapfile' */ set_option_value((char_u *)"swf", 0L, NULL, OPT_LOCAL); set_option_value((char_u *)"bt", 0L, (char_u *)"quickfix", --- 2329,2344 ---- win->w_llist->qf_refcount++; } + if (oldwin != curwin) + oldwin = NULL; /* don't store info when in another window */ if (qf_buf != NULL) /* Use the existing quickfix buffer */ (void)do_ecmd(qf_buf->b_fnum, NULL, NULL, NULL, ECMD_ONE, ! ECMD_HIDE + ECMD_OLDBUF, oldwin); else { /* Create a new quickfix buffer */ ! (void)do_ecmd(0, NULL, NULL, NULL, ECMD_ONE, ECMD_HIDE, oldwin); /* switch off 'swapfile' */ set_option_value((char_u *)"swf", 0L, NULL, OPT_LOCAL); set_option_value((char_u *)"bt", 0L, (char_u *)"quickfix", *** ../vim-7.2.040/src/window.c Wed Aug 6 18:32:11 2008 --- src/window.c Wed Nov 12 18:12:37 2008 *************** *** 531,537 **** # ifdef FEAT_SCROLLBIND curwin->w_p_scb = FALSE; # endif ! (void)do_ecmd(0, ptr, NULL, NULL, ECMD_LASTL, ECMD_HIDE); if (nchar == 'F' && lnum >= 0) { curwin->w_cursor.lnum = lnum; --- 531,538 ---- # ifdef FEAT_SCROLLBIND curwin->w_p_scb = FALSE; # endif ! (void)do_ecmd(0, ptr, NULL, NULL, ECMD_LASTL, ! ECMD_HIDE, NULL); if (nchar == 'F' && lnum >= 0) { curwin->w_cursor.lnum = lnum; *** ../vim-7.2.040/src/version.c Wed Nov 12 16:04:43 2008 --- src/version.c Wed Nov 12 16:54:35 2008 *************** *** 678,679 **** --- 678,681 ---- { /* Add new patch number below this line */ + /**/ + 41, /**/ -- hundred-and-one symptoms of being an internet addict: 260. Co-workers have to E-mail you about the fire alarm to get you out of the building. /// 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 ///