To: vim_dev@googlegroups.com Subject: Patch 7.4.2101 Fcc: outbox From: Bram Moolenaar Mime-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ------------ Patch 7.4.2101 Problem: Looping over windows, buffers and tab pages is inconsistant. Solution: Use FOR_ALL_ macros everywhere. (Yegappan Lakshmanan) Files: src/buffer.c, src/diff.c, src/edit.c, src/eval.c, src/evalfunc.c, src/ex_cmds.c, src/ex_cmds2.c, src/ex_docmd.c, src/fileio.c, src/globals.h, src/gui.c, src/gui_mac.c, src/if_lua.c, src/if_mzsch.c, src/if_perl.xs, src/if_ruby.c, src/if_tcl.c, src/main.c, src/mark.c, src/memfile.c, src/memline.c, src/misc1.c, src/move.c, src/netbeans.c, src/normal.c, src/option.c, src/quickfix.c, src/screen.c, src/spell.c, src/term.c, src/window.c, src/workshop.c *** ../vim-7.4.2100/src/buffer.c 2016-07-24 16:17:55.749759245 +0200 --- src/buffer.c 2016-07-24 21:51:19.884109062 +0200 *************** *** 105,111 **** * If we can't create one for the current buffer, take another buffer */ close_buffer(NULL, curbuf, 0, FALSE); ! for (curbuf = firstbuf; curbuf != NULL; curbuf = curbuf->b_next) if (curbuf->b_ml.ml_mfp != NULL) break; /* --- 105,111 ---- * If we can't create one for the current buffer, take another buffer */ close_buffer(NULL, curbuf, 0, FALSE); ! FOR_ALL_BUFFERS(curbuf) if (curbuf->b_ml.ml_mfp != NULL) break; /* *************** *** 1284,1290 **** * If deleting the last (listed) buffer, make it empty. * The last (listed) buffer cannot be unloaded. */ ! for (bp = firstbuf; bp != NULL; bp = bp->b_next) if (bp->b_p_bl && bp != buf) break; if (bp == NULL && buf == curbuf) --- 1284,1290 ---- * If deleting the last (listed) buffer, make it empty. * The last (listed) buffer cannot be unloaded. */ ! FOR_ALL_BUFFERS(bp) if (bp->b_p_bl && bp != buf) break; if (bp == NULL && buf == curbuf) *************** *** 1410,1416 **** buf = bp; if (buf == NULL) /* No loaded buffer, find listed one */ { ! for (buf = firstbuf; buf != NULL; buf = buf->b_next) if (buf->b_p_bl && buf != curbuf) break; } --- 1410,1416 ---- buf = bp; if (buf == NULL) /* No loaded buffer, find listed one */ { ! FOR_ALL_BUFFERS(buf) if (buf->b_p_bl && buf != curbuf) break; } *************** *** 2406,2412 **** #ifdef FEAT_WINDOWS win_T *wp; ! for (wp = firstwin; wp != NULL; wp = wp->w_next) if (wp->w_buffer == buf) break; if (wp == NULL) --- 2406,2412 ---- #ifdef FEAT_WINDOWS win_T *wp; ! FOR_ALL_WINDOWS(wp) if (wp->w_buffer == buf) break; if (wp == NULL) *************** *** 2508,2514 **** for (round = 1; round <= 2; ++round) { count = 0; ! for (buf = firstbuf; buf != NULL; buf = buf->b_next) { if (!buf->b_p_bl) /* skip unlisted buffers */ continue; --- 2508,2514 ---- for (round = 1; round <= 2; ++round) { count = 0; ! FOR_ALL_BUFFERS(buf) { if (!buf->b_p_bl) /* skip unlisted buffers */ continue; *************** *** 2734,2740 **** 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) --- 2734,2740 ---- if (wip->wi_opt.wo_diff) { ! FOR_ALL_WINDOWS(wp) /* 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) *************** *** 3153,3159 **** { buf_T *bp; ! for (bp = firstbuf; bp != NULL; bp = bp->b_next) { if (bp->b_ffname != NULL) slash_adjust(bp->b_ffname); --- 3153,3159 ---- { buf_T *bp; ! FOR_ALL_BUFFERS(bp) { if (bp->b_ffname != NULL) slash_adjust(bp->b_ffname); *************** *** 5083,5089 **** #endif { /* Check if this buffer already has a window */ ! for (wp = firstwin; wp != NULL; wp = wp->w_next) if (wp->w_buffer == buf) break; /* If the buffer already has a window, move it */ --- 5083,5089 ---- #endif { /* Check if this buffer already has a window */ ! FOR_ALL_WINDOWS(wp) if (wp->w_buffer == buf) break; /* If the buffer already has a window, move it */ *************** *** 5461,5467 **** #endif fputs(_("\n# Buffer list:\n"), fp); ! for (buf = firstbuf; buf != NULL ; buf = buf->b_next) { if (buf->b_fname == NULL || !buf->b_p_bl --- 5461,5467 ---- #endif fputs(_("\n# Buffer list:\n"), fp); ! FOR_ALL_BUFFERS(buf) { if (buf->b_fname == NULL || !buf->b_p_bl *************** *** 5847,5853 **** { buf_T *buf; /* buffer we are checking for signs */ ! for (buf = firstbuf; buf != NULL; buf = buf->b_next) if (buf->b_signlist != NULL) buf_delete_signs(buf); } --- 5847,5853 ---- { buf_T *buf; /* buffer we are checking for signs */ ! FOR_ALL_BUFFERS(buf) if (buf->b_signlist != NULL) buf_delete_signs(buf); } *** ../vim-7.4.2100/src/diff.c 2016-07-10 22:11:11.858751521 +0200 --- src/diff.c 2016-07-24 21:51:19.884109062 +0200 *************** *** 65,71 **** int i; tabpage_T *tp; ! for (tp = first_tabpage; tp != NULL; tp = tp->tp_next) { i = diff_buf_idx_tp(buf, tp); if (i != DB_COUNT) --- 65,71 ---- int i; tabpage_T *tp; ! FOR_ALL_TABPAGES(tp) { i = diff_buf_idx_tp(buf, tp); if (i != DB_COUNT) *************** *** 92,98 **** { /* When there is no window showing a diff for this buffer, remove * it from the diffs. */ ! for (wp = firstwin; wp != NULL; wp = wp->w_next) if (wp->w_buffer == win->w_buffer && wp->w_p_diff) break; if (wp == NULL) --- 92,98 ---- { /* When there is no window showing a diff for this buffer, remove * it from the diffs. */ ! FOR_ALL_WINDOWS(wp) if (wp->w_buffer == win->w_buffer && wp->w_p_diff) break; if (wp == NULL) *************** *** 178,184 **** tabpage_T *tp; int i; ! for (tp = first_tabpage; tp != NULL; tp = tp->tp_next) { i = diff_buf_idx_tp(buf, tp); if (i != DB_COUNT) --- 178,184 ---- tabpage_T *tp; int i; ! FOR_ALL_TABPAGES(tp) { i = diff_buf_idx_tp(buf, tp); if (i != DB_COUNT) *************** *** 204,210 **** tabpage_T *tp; /* Handle all tab pages that use the current buffer in a diff. */ ! for (tp = first_tabpage; tp != NULL; tp = tp->tp_next) { idx = diff_buf_idx_tp(curbuf, tp); if (idx != DB_COUNT) --- 204,210 ---- tabpage_T *tp; /* Handle all tab pages that use the current buffer in a diff. */ ! FOR_ALL_TABPAGES(tp) { idx = diff_buf_idx_tp(curbuf, tp); if (idx != DB_COUNT) *************** *** 591,597 **** win_T *wp; int n; ! for (wp = firstwin; wp != NULL; wp = wp->w_next) if (wp->w_p_diff) { redraw_win_later(wp, SOME_VALID); --- 591,597 ---- win_T *wp; int n; ! FOR_ALL_WINDOWS(wp) if (wp->w_p_diff) { redraw_win_later(wp, SOME_VALID); *************** *** 1198,1204 **** int diffwin = FALSE; #endif ! for (wp = firstwin; wp != NULL; wp = wp->w_next) { if (eap->forceit ? wp->w_p_diff : wp == curwin) { --- 1198,1204 ---- int diffwin = FALSE; #endif ! FOR_ALL_WINDOWS(wp) { if (eap->forceit ? wp->w_p_diff : wp == curwin) { *************** *** 1879,1885 **** /* If "icase" or "iwhite" was added or removed, need to update the diff. */ if (diff_flags != diff_flags_new) ! for (tp = first_tabpage; tp != NULL; tp = tp->tp_next) tp->tp_diff_invalid = TRUE; diff_flags = diff_flags_new; --- 1879,1885 ---- /* If "icase" or "iwhite" was added or removed, need to update the diff. */ if (diff_flags != diff_flags_new) ! FOR_ALL_TABPAGES(tp) tp->tp_diff_invalid = TRUE; diff_flags = diff_flags_new; *************** *** 2434,2440 **** int i; win_T *wp; ! for (wp = firstwin; wp != NULL; wp = wp->w_next) for (i = 0; i < DB_COUNT; ++i) if (curtab->tp_diffbuf[i] == wp->w_buffer && i != skip_idx) foldUpdate(wp, dp->df_lnum[i], --- 2434,2440 ---- int i; win_T *wp; ! FOR_ALL_WINDOWS(wp) for (i = 0; i < DB_COUNT; ++i) if (curtab->tp_diffbuf[i] == wp->w_buffer && i != skip_idx) foldUpdate(wp, dp->df_lnum[i], *************** *** 2450,2456 **** { tabpage_T *tp; ! for (tp = first_tabpage; tp != NULL; tp = tp->tp_next) if (diff_buf_idx_tp(buf, tp) != DB_COUNT) return TRUE; return FALSE; --- 2450,2456 ---- { tabpage_T *tp; ! FOR_ALL_TABPAGES(tp) if (diff_buf_idx_tp(buf, tp) != DB_COUNT) return TRUE; return FALSE; *** ../vim-7.4.2100/src/edit.c 2016-07-09 21:57:16.630640033 +0200 --- src/edit.c 2016-07-24 21:51:19.888109025 +0200 *************** *** 4239,4245 **** if (!compl_started) { ! for (ins_buf = firstbuf; ins_buf != NULL; ins_buf = ins_buf->b_next) ins_buf->b_scanned = 0; found_all = FALSE; ins_buf = curbuf; --- 4239,4245 ---- if (!compl_started) { ! FOR_ALL_BUFFERS(ins_buf) ins_buf->b_scanned = 0; found_all = FALSE; ins_buf = curbuf; *** ../vim-7.4.2100/src/eval.c 2016-07-23 15:35:14.149577033 +0200 --- src/eval.c 2016-07-24 21:51:19.888109025 +0200 *************** *** 5253,5259 **** abort = abort || set_ref_in_ht(&SCRIPT_VARS(i), copyID, NULL); /* buffer-local variables */ ! for (buf = firstbuf; buf != NULL; buf = buf->b_next) abort = abort || set_ref_in_item(&buf->b_bufvar.di_tv, copyID, NULL, NULL); --- 5253,5259 ---- abort = abort || set_ref_in_ht(&SCRIPT_VARS(i), copyID, NULL); /* buffer-local variables */ ! FOR_ALL_BUFFERS(buf) abort = abort || set_ref_in_item(&buf->b_bufvar.di_tv, copyID, NULL, NULL); *************** *** 5269,5275 **** #ifdef FEAT_WINDOWS /* tabpage-local variables */ ! for (tp = first_tabpage; tp != NULL; tp = tp->tp_next) abort = abort || set_ref_in_item(&tp->tp_winvar.di_tv, copyID, NULL, NULL); #endif --- 5269,5275 ---- #ifdef FEAT_WINDOWS /* tabpage-local variables */ ! FOR_ALL_TABPAGES(tp) abort = abort || set_ref_in_item(&tp->tp_winvar.di_tv, copyID, NULL, NULL); #endif *************** *** 8303,8310 **** if (nr == 0) return curwin; ! for (wp = (tp == NULL || tp == curtab) ? firstwin : tp->tp_firstwin; ! wp != NULL; wp = wp->w_next) if (nr >= LOWEST_WIN_ID) { if (wp->w_id == nr) --- 8303,8310 ---- if (nr == 0) return curwin; ! FOR_ALL_WINDOWS_IN_TAB(tp, wp) ! { if (nr >= LOWEST_WIN_ID) { if (wp->w_id == nr) *************** *** 8312,8317 **** --- 8312,8318 ---- } else if (--nr <= 0) break; + } if (nr >= LOWEST_WIN_ID) return NULL; return wp; *** ../vim-7.4.2100/src/evalfunc.c 2016-07-23 15:35:14.157576957 +0200 --- src/evalfunc.c 2016-07-24 21:51:19.888109025 +0200 *************** *** 1439,1445 **** { /* No full path name match, try a match with a URL or a "nofile" * buffer, these don't use the full path. */ ! for (buf = firstbuf; buf != NULL; buf = buf->b_next) if (buf->b_fname != NULL && (path_with_url(buf->b_fname) #ifdef FEAT_QUICKFIX --- 1439,1445 ---- { /* No full path name match, try a match with a URL or a "nofile" * buffer, these don't use the full path. */ ! FOR_ALL_BUFFERS(buf) if (buf->b_fname != NULL && (path_with_url(buf->b_fname) #ifdef FEAT_QUICKFIX *************** *** 1597,1603 **** ++emsg_off; buf = get_buf_tv(&argvars[0], TRUE); #ifdef FEAT_WINDOWS ! for (wp = firstwin; wp; wp = wp->w_next) { ++winnr; if (wp->w_buffer == buf) --- 1597,1603 ---- ++emsg_off; buf = get_buf_tv(&argvars[0], TRUE); #ifdef FEAT_WINDOWS ! FOR_ALL_WINDOWS(wp) { ++winnr; if (wp->w_buffer == buf) *************** *** 6383,6389 **** int n = 0; buf_T *buf; ! for (buf = firstbuf; buf != NULL; buf = buf->b_next) if (n < buf->b_fnum) n = buf->b_fnum; --- 6383,6389 ---- int n = 0; buf_T *buf; ! FOR_ALL_BUFFERS(buf) if (n < buf->b_fnum) n = buf->b_fnum; *************** *** 12373,12379 **** char_u buf[50]; ga_init2(&ga, (int)sizeof(char), 70); ! for (wp = firstwin; wp != NULL; wp = wp->w_next) { sprintf((char *)buf, "%dresize %d|", winnr, wp->w_height); ga_concat(&ga, buf); --- 12373,12379 ---- char_u buf[50]; ga_init2(&ga, (int)sizeof(char), 70); ! FOR_ALL_WINDOWS(wp) { sprintf((char *)buf, "%dresize %d|", winnr, wp->w_height); ga_concat(&ga, buf); *** ../vim-7.4.2100/src/ex_cmds.c 2016-07-10 22:11:11.854751580 +0200 --- src/ex_cmds.c 2016-07-24 21:51:19.892108988 +0200 *************** *** 1497,1503 **** && !autocmd_busy #endif && msg_silent == 0) ! for (buf = firstbuf; buf; buf = buf->b_next) if (bufIsChanged(buf)) { #ifdef FEAT_GUI_MSWIN --- 1497,1503 ---- && !autocmd_busy #endif && msg_silent == 0) ! FOR_ALL_BUFFERS(buf) if (bufIsChanged(buf)) { #ifdef FEAT_GUI_MSWIN *************** *** 2345,2351 **** #endif /* Change file names to buffer numbers for fmarks. */ ! for (buf = firstbuf; buf != NULL; buf = buf->b_next) fmarks_check_names(buf); return eof; --- 2345,2351 ---- #endif /* Change file names to buffer numbers for fmarks. */ ! FOR_ALL_BUFFERS(buf) fmarks_check_names(buf); return eof; *************** *** 3413,3419 **** if (eap->cmdidx == CMD_xall || eap->cmdidx == CMD_wqall) exiting = TRUE; ! for (buf = firstbuf; buf != NULL; buf = buf->b_next) { if (bufIsChanged(buf)) { --- 3413,3419 ---- if (eap->cmdidx == CMD_xall || eap->cmdidx == CMD_wqall) exiting = TRUE; ! FOR_ALL_BUFFERS(buf) { if (bufIsChanged(buf)) { *************** *** 6115,6121 **** */ if (!curwin->w_p_pvw) { ! for (wp = firstwin; wp != NULL; wp = wp->w_next) if (wp->w_p_pvw) break; if (wp != NULL) --- 6115,6121 ---- */ if (!curwin->w_p_pvw) { ! FOR_ALL_WINDOWS(wp) if (wp->w_p_pvw) break; if (wp != NULL) *************** *** 6272,6278 **** if (cmdmod.tab != 0) wp = NULL; else ! for (wp = firstwin; wp != NULL; wp = wp->w_next) if (wp->w_buffer != NULL && wp->w_buffer->b_help) break; if (wp != NULL && wp->w_buffer->b_nwindows > 0) --- 6272,6278 ---- if (cmdmod.tab != 0) wp = NULL; else ! FOR_ALL_WINDOWS(wp) if (wp->w_buffer != NULL && wp->w_buffer->b_help) break; if (wp != NULL && wp->w_buffer->b_nwindows > 0) *************** *** 7745,7751 **** if (idx == SIGNCMD_UNPLACE && *arg == NUL) { /* ":sign unplace {id}": remove placed sign by number */ ! for (buf = firstbuf; buf != NULL; buf = buf->b_next) if ((lnum = buf_delsign(buf, id)) != 0) update_debug_sign(buf, lnum); return; --- 7745,7751 ---- if (idx == SIGNCMD_UNPLACE && *arg == NUL) { /* ":sign unplace {id}": remove placed sign by number */ ! FOR_ALL_BUFFERS(buf) if ((lnum = buf_delsign(buf, id)) != 0) update_debug_sign(buf, lnum); return; *** ../vim-7.4.2100/src/ex_cmds2.c 2016-07-22 21:49:36.678031435 +0200 --- src/ex_cmds2.c 2016-07-24 21:51:19.892108988 +0200 *************** *** 1721,1727 **** if (!(p_aw || p_awa) || !p_write) return; ! for (buf = firstbuf; buf; buf = buf->b_next) if (bufIsChanged(buf) && !buf->b_p_ro) { #ifdef FEAT_AUTOCMD --- 1721,1727 ---- if (!(p_aw || p_awa) || !p_write) return; ! FOR_ALL_BUFFERS(buf) if (bufIsChanged(buf) && !buf->b_p_ro) { #ifdef FEAT_AUTOCMD *************** *** 1764,1770 **** int count = 0; if (flags & CCGD_ALLBUF) ! for (buf2 = firstbuf; buf2 != NULL; buf2 = buf2->b_next) if (bufIsChanged(buf2) && (buf2->b_ffname != NULL # ifdef FEAT_BROWSE --- 1764,1770 ---- int count = 0; if (flags & CCGD_ALLBUF) ! FOR_ALL_BUFFERS(buf2) if (bufIsChanged(buf2) && (buf2->b_ffname != NULL # ifdef FEAT_BROWSE *************** *** 1868,1874 **** * Skip readonly buffers, these need to be confirmed * individually. */ ! for (buf2 = firstbuf; buf2 != NULL; buf2 = buf2->b_next) { if (bufIsChanged(buf2) && (buf2->b_ffname != NULL --- 1868,1874 ---- * Skip readonly buffers, these need to be confirmed * individually. */ ! FOR_ALL_BUFFERS(buf2) { if (bufIsChanged(buf2) && (buf2->b_ffname != NULL *************** *** 1904,1910 **** /* * mark all buffers as unchanged */ ! for (buf2 = firstbuf; buf2 != NULL; buf2 = buf2->b_next) unchanged(buf2, TRUE); } } --- 1904,1910 ---- /* * mark all buffers as unchanged */ ! FOR_ALL_BUFFERS(buf2) unchanged(buf2, TRUE); } } *************** *** 1964,1970 **** win_T *wp; #endif ! for (buf = firstbuf; buf != NULL; buf = buf->b_next) ++bufcount; if (bufcount == 0) --- 1964,1970 ---- win_T *wp; #endif ! FOR_ALL_BUFFERS(buf) ++bufcount; if (bufcount == 0) *************** *** 1983,1995 **** add_bufnum(bufnrs, &bufnum, wp->w_buffer->b_fnum); /* buf in other tab */ ! for (tp = first_tabpage; tp != NULL; tp = tp->tp_next) if (tp != curtab) for (wp = tp->tp_firstwin; wp != NULL; wp = wp->w_next) add_bufnum(bufnrs, &bufnum, wp->w_buffer->b_fnum); #endif /* any other buf */ ! for (buf = firstbuf; buf != NULL; buf = buf->b_next) add_bufnum(bufnrs, &bufnum, buf->b_fnum); for (i = 0; i < bufnum; ++i) --- 1983,1995 ---- add_bufnum(bufnrs, &bufnum, wp->w_buffer->b_fnum); /* buf in other tab */ ! FOR_ALL_TABPAGES(tp) if (tp != curtab) for (wp = tp->tp_firstwin; wp != NULL; wp = wp->w_next) add_bufnum(bufnrs, &bufnum, wp->w_buffer->b_fnum); #endif /* any other buf */ ! FOR_ALL_BUFFERS(buf) add_bufnum(bufnrs, &bufnum, buf->b_fnum); for (i = 0; i < bufnum; ++i) *************** *** 2924,2930 **** if (next_fnum < 0 || next_fnum > eap->line2) break; /* Check if the buffer still exists. */ ! for (buf = firstbuf; buf != NULL; buf = buf->b_next) if (buf->b_fnum == next_fnum) break; if (buf == NULL) --- 2924,2930 ---- if (next_fnum < 0 || next_fnum > eap->line2) break; /* Check if the buffer still exists. */ ! FOR_ALL_BUFFERS(buf) if (buf->b_fnum == next_fnum) break; if (buf == NULL) *** ../vim-7.4.2100/src/ex_docmd.c 2016-07-16 16:54:18.334699590 +0200 --- src/ex_docmd.c 2016-07-24 21:51:19.892108988 +0200 *************** *** 1708,1714 **** win_T *wp; int nr = 0; ! for (wp = firstwin; wp != NULL; wp = wp->w_next) { ++nr; if (wp == win) --- 1708,1714 ---- win_T *wp; int nr = 0; ! FOR_ALL_WINDOWS(wp) { ++nr; if (wp == win) *************** *** 1723,1729 **** tabpage_T *tp; int nr = 0; ! for (tp = first_tabpage; tp != NULL; tp = tp->tp_next) { ++nr; if (tp == tab) --- 1723,1729 ---- tabpage_T *tp; int nr = 0; ! FOR_ALL_TABPAGES(tp) { ++nr; if (tp == tab) *************** *** 7273,7279 **** if (eap->addr_count == 0) ex_win_close(eap->forceit, curwin, NULL); else { ! for (win = firstwin; win != NULL; win = win->w_next) { winnr++; if (winnr == eap->line2) --- 7273,7279 ---- if (eap->addr_count == 0) ex_win_close(eap->forceit, curwin, NULL); else { ! FOR_ALL_WINDOWS(win) { winnr++; if (winnr == eap->line2) *************** *** 7295,7301 **** { win_T *win; ! for (win = firstwin; win != NULL; win = win->w_next) if (win->w_p_pvw) { ex_win_close(eap->forceit, win, NULL); --- 7295,7301 ---- { win_T *win; ! FOR_ALL_WINDOWS(win) if (win->w_p_pvw) { ex_win_close(eap->forceit, win, NULL); *************** *** 7415,7421 **** * up the lists. */ for (done = 0; done < 1000; ++done) { ! for (tp = first_tabpage; tp != NULL; tp = tp->tp_next) if (tp->tp_topframe != topframe) { tabpage_close_other(tp, eap->forceit); --- 7415,7421 ---- * up the lists. */ for (done = 0; done < 1000; ++done) { ! FOR_ALL_TABPAGES(tp) if (tp->tp_topframe != topframe) { tabpage_close_other(tp, eap->forceit); *************** *** 7474,7479 **** --- 7474,7483 ---- break; } + #ifdef FEAT_AUTOCMD + apply_autocmds(EVENT_TABCLOSED, NULL, NULL, FALSE, curbuf); + #endif + redraw_tabline = TRUE; if (h != tabline_height()) shell_new_rows(); *************** *** 7540,7546 **** int winnr = 0; win_T *win; ! for (win = firstwin; win != NULL; win = win->w_next) { winnr++; if (winnr == eap->line2) --- 7544,7550 ---- int winnr = 0; win_T *win; ! FOR_ALL_WINDOWS(win) { winnr++; if (winnr == eap->line2) *************** *** 8686,8692 **** if (curwin->w_p_scb) { topline = curwin->w_topline; ! for (wp = firstwin; wp; wp = wp->w_next) { if (wp->w_p_scb && wp->w_buffer) { --- 8690,8696 ---- if (curwin->w_p_scb) { topline = curwin->w_topline; ! FOR_ALL_WINDOWS(wp) { if (wp->w_p_scb && wp->w_buffer) { *************** *** 8707,8713 **** /* * Set all scrollbind windows to the same topline. */ ! for (curwin = firstwin; curwin; curwin = curwin->w_next) { if (curwin->w_p_scb) { --- 8711,8717 ---- /* * Set all scrollbind windows to the same topline. */ ! FOR_ALL_WINDOWS(curwin) { if (curwin->w_p_scb) { *************** *** 10957,10963 **** return FAIL; /* Now put the other buffers into the buffer list */ ! for (buf = firstbuf; buf != NULL; buf = buf->b_next) { if (!(only_save_windows && buf->b_nwindows == 0) && !(buf->b_help && !(ssop_flags & SSOP_HELP)) --- 10961,10967 ---- return FAIL; /* Now put the other buffers into the buffer list */ ! FOR_ALL_BUFFERS(buf) { if (!(only_save_windows && buf->b_nwindows == 0) && !(buf->b_help && !(ssop_flags & SSOP_HELP)) *** ../vim-7.4.2100/src/fileio.c 2016-07-19 23:12:18.712611729 +0200 --- src/fileio.c 2016-07-24 21:51:19.892108988 +0200 *************** *** 6088,6094 **** char_u *p; mch_dirname(dirname, MAXPATHL); ! for (buf = firstbuf; buf != NULL; buf = buf->b_next) { if (buf->b_fname != NULL #ifdef FEAT_QUICKFIX --- 6088,6094 ---- char_u *p; mch_dirname(dirname, MAXPATHL); ! FOR_ALL_BUFFERS(buf) { if (buf->b_fname != NULL #ifdef FEAT_QUICKFIX *************** *** 6680,6686 **** ++no_wait_return; did_check_timestamps = TRUE; already_warned = FALSE; ! for (buf = firstbuf; buf != NULL; ) { /* Only check buffers in a window. */ if (buf->b_nwindows > 0) --- 6680,6686 ---- ++no_wait_return; did_check_timestamps = TRUE; already_warned = FALSE; ! FOR_ALL_BUFFERS(buf) { /* Only check buffers in a window. */ if (buf->b_nwindows > 0) *************** *** 6699,6705 **** continue; } } - buf = buf->b_next; } --no_wait_return; need_check_timestamps = FALSE; --- 6699,6704 ---- *************** *** 8759,8765 **** * gives problems when the autocommands make changes to the list of * buffers or windows... */ ! for (buf = firstbuf; buf != NULL; buf = buf->b_next) { if (buf->b_ml.ml_mfp != NULL) { --- 8758,8764 ---- * gives problems when the autocommands make changes to the list of * buffers or windows... */ ! FOR_ALL_BUFFERS(buf) { if (buf->b_ml.ml_mfp != NULL) { *************** *** 8831,8837 **** win = curwin; else #ifdef FEAT_WINDOWS ! for (win = firstwin; win != NULL; win = win->w_next) if (win->w_buffer == buf) break; #else --- 8830,8836 ---- win = curwin; else #ifdef FEAT_WINDOWS ! FOR_ALL_WINDOWS(win) if (win->w_buffer == buf) break; #else *** ../vim-7.4.2100/src/globals.h 2016-07-17 22:13:26.813095293 +0200 --- src/globals.h 2016-07-24 21:51:19.896108951 +0200 *************** *** 548,553 **** --- 548,557 ---- EXTERN win_T *prevwin INIT(= NULL); /* previous window */ # define W_NEXT(wp) ((wp)->w_next) # define FOR_ALL_WINDOWS(wp) for (wp = firstwin; wp != NULL; wp = wp->w_next) + # define FOR_ALL_TABPAGES(tp) for (tp = first_tabpage; tp != NULL; tp = tp->tp_next) + # define FOR_ALL_WINDOWS_IN_TAB(tp, wp) \ + for ((wp) = ((tp) == NULL || (tp) == curtab) \ + ? firstwin : (tp)->tp_firstwin; (wp); (wp) = (wp)->w_next) /* * When using this macro "break" only breaks out of the inner loop. Use "goto" * to break out of the tabpage loop. *************** *** 561,566 **** --- 565,572 ---- # define lastwin curwin # define W_NEXT(wp) NULL # define FOR_ALL_WINDOWS(wp) wp = curwin; + # define FOR_ALL_TABPAGES(tp) for (;FALSE;) + # define FOR_ALL_WINDOWS_IN_TAB(tp, wp) wp = curwin; # define FOR_ALL_TAB_WINDOWS(tp, wp) wp = curwin; #endif *************** *** 595,600 **** --- 601,608 ---- EXTERN buf_T *lastbuf INIT(= NULL); /* last buffer */ EXTERN buf_T *curbuf INIT(= NULL); /* currently active buffer */ + #define FOR_ALL_BUFFERS(buf) for (buf = firstbuf; buf != NULL; buf = buf->b_next) + /* Flag that is set when switching off 'swapfile'. It means that all blocks * are to be loaded into memory. Shouldn't be global... */ EXTERN int mf_dont_release INIT(= FALSE); /* don't release blocks */ *** ../vim-7.4.2100/src/gui.c 2016-07-01 17:17:13.286266820 +0200 --- src/gui.c 2016-07-24 21:51:19.896108951 +0200 *************** *** 4082,4088 **** { do_check_scrollbind(TRUE); /* need to update the window right here */ ! for (wp = firstwin; wp != NULL; wp = wp->w_next) if (wp->w_redr_type > 0) updateWindow(wp); setcursor(); --- 4082,4088 ---- { do_check_scrollbind(TRUE); /* need to update the window right here */ ! FOR_ALL_WINDOWS(wp) if (wp->w_redr_type > 0) updateWindow(wp); setcursor(); *************** *** 4166,4172 **** /* avoid that moving components around generates events */ ++hold_gui_events; ! for (wp = firstwin; wp != NULL; wp = W_NEXT(wp)) { if (wp->w_buffer == NULL) /* just in case */ continue; --- 4166,4172 ---- /* avoid that moving components around generates events */ ++hold_gui_events; ! FOR_ALL_WINDOWS(wp) { if (wp->w_buffer == NULL) /* just in case */ continue; *** ../vim-7.4.2100/src/gui_mac.c 2016-07-07 16:42:57.314788421 +0200 --- src/gui_mac.c 2016-07-24 21:51:19.896108951 +0200 *************** *** 633,639 **** if (error) return error; ! for (buf = firstbuf; buf != NULL; buf = buf->b_next) if (buf->b_ml.ml_mfp != NULL && SearchData.theFile.parID == buf->b_FSSpec.parID && SearchData.theFile.name[0] == buf->b_FSSpec.name[0] --- 633,639 ---- if (error) return error; ! FOR_ALL_BUFFERS(buf) if (buf->b_ml.ml_mfp != NULL && SearchData.theFile.parID == buf->b_FSSpec.parID && SearchData.theFile.name[0] == buf->b_FSSpec.name[0] *************** *** 725,731 **** #endif numFiles = 0; ! for (buf = firstbuf; buf != NULL; buf = buf->b_next) if (buf->b_ml.ml_mfp != NULL) { /* Add this file to the list */ --- 725,731 ---- #endif numFiles = 0; ! FOR_ALL_BUFFERS(buf) if (buf->b_ml.ml_mfp != NULL) { /* Add this file to the list */ *************** *** 807,813 **** if (error) return error; ! for (buf = firstbuf; buf != NULL; buf = buf->b_next) if (buf->b_ml.ml_mfp != NULL) if (GetTextData.theFile.parID == buf->b_FSSpec.parID) { --- 807,813 ---- if (error) return error; ! FOR_ALL_BUFFERS(buf) if (buf->b_ml.ml_mfp != NULL) if (GetTextData.theFile.parID == buf->b_FSSpec.parID) { *************** *** 6422,6428 **** tabpage_T *tp; int numTabs = 0; ! for (tp = first_tabpage; tp != NULL; tp = tp->tp_next) ++numTabs; return numTabs; } --- 6422,6428 ---- tabpage_T *tp; int numTabs = 0; ! FOR_ALL_TABPAGES(tp) ++numTabs; return numTabs; } *** ../vim-7.4.2100/src/if_lua.c 2016-03-19 22:11:47.424674965 +0100 --- src/if_lua.c 2016-07-24 21:51:19.896108951 +0200 *************** *** 1402,1414 **** if (lua_isnumber(L, 1)) /* by number? */ { int n = lua_tointeger(L, 1); ! for (buf = firstbuf; buf != NULL; buf = buf->b_next) if (buf->b_fnum == n) break; } else { /* by name */ size_t l; const char *s = lua_tolstring(L, 1, &l); ! for (buf = firstbuf; buf != NULL; buf = buf->b_next) { if (buf->b_ffname == NULL || buf->b_sfname == NULL) { --- 1402,1414 ---- if (lua_isnumber(L, 1)) /* by number? */ { int n = lua_tointeger(L, 1); ! FOR_ALL_BUFFERS(buf) if (buf->b_fnum == n) break; } else { /* by name */ size_t l; const char *s = lua_tolstring(L, 1, &l); ! FOR_ALL_BUFFERS(buf) { if (buf->b_ffname == NULL || buf->b_sfname == NULL) { *** ../vim-7.4.2100/src/if_mzsch.c 2016-06-13 19:54:18.392171818 +0200 --- src/if_mzsch.c 2016-07-24 21:51:19.896108951 +0200 *************** *** 1916,1922 **** #ifdef FEAT_WINDOWS win_T *w; ! for (w = firstwin; w != NULL; w = w->w_next) #endif ++n; return scheme_make_integer(n); --- 1916,1922 ---- #ifdef FEAT_WINDOWS win_T *w; ! FOR_ALL_WINDOWS(w) #endif ++n; return scheme_make_integer(n); *************** *** 2197,2203 **** fnum = SCHEME_INT_VAL(GUARANTEE_INTEGER(prim->name, 0)); ! for (buf = firstbuf; buf; buf = buf->b_next) if (buf->b_fnum == fnum) return buffer_new(buf); --- 2197,2203 ---- fnum = SCHEME_INT_VAL(GUARANTEE_INTEGER(prim->name, 0)); ! FOR_ALL_BUFFERS(buf) if (buf->b_fnum == fnum) return buffer_new(buf); *************** *** 2220,2226 **** fname = GUARANTEED_STRING_ARG(prim->name, 0); buffer = scheme_false; ! for (buf = firstbuf; buf; buf = buf->b_next) { if (buf->b_ffname == NULL || buf->b_sfname == NULL) /* empty string */ --- 2220,2226 ---- fname = GUARANTEED_STRING_ARG(prim->name, 0); buffer = scheme_false; ! FOR_ALL_BUFFERS(buf) { if (buf->b_ffname == NULL || buf->b_sfname == NULL) /* empty string */ *************** *** 2283,2289 **** buf_T *b; int n = 0; ! for (b = firstbuf; b; b = b->b_next) ++n; return scheme_make_integer(n); } --- 2283,2289 ---- buf_T *b; int n = 0; ! FOR_ALL_BUFFERS(b) ++n; return scheme_make_integer(n); } *** ../vim-7.4.2100/src/if_perl.xs 2016-06-26 17:19:42.362180288 +0200 --- src/if_perl.xs 2016-07-24 21:51:19.896108951 +0200 *************** *** 1534,1547 **** if (GIMME == G_SCALAR) { i = 0; ! for (vimbuf = firstbuf; vimbuf; vimbuf = vimbuf->b_next) ++i; XPUSHs(sv_2mortal(newSViv(i))); } else { ! for (vimbuf = firstbuf; vimbuf; vimbuf = vimbuf->b_next) XPUSHs(newBUFrv(newSV(0), vimbuf)); } } --- 1534,1547 ---- if (GIMME == G_SCALAR) { i = 0; ! FOR_ALL_BUFFERS(vimbuf) ++i; XPUSHs(sv_2mortal(newSViv(i))); } else { ! FOR_ALL_BUFFERS(vimbuf) XPUSHs(newBUFrv(newSV(0), vimbuf)); } } *************** *** 1586,1592 **** XPUSHs(sv_2mortal(newSViv(win_count()))); else { ! for (vimwin = firstwin; vimwin != NULL; vimwin = W_NEXT(vimwin)) XPUSHs(newWINrv(newSV(0), vimwin)); } } --- 1586,1592 ---- XPUSHs(sv_2mortal(newSViv(win_count()))); else { ! FOR_ALL_WINDOWS(vimwin) XPUSHs(newWINrv(newSV(0), vimwin)); } } *** ../vim-7.4.2100/src/if_ruby.c 2016-06-13 20:08:39.879032005 +0200 --- src/if_ruby.c 2016-07-24 21:51:19.896108951 +0200 *************** *** 1151,1157 **** buf_T *b; int n = 0; ! for (b = firstbuf; b != NULL; b = b->b_next) { /* Deleted buffers should not be counted * SegPhault - 01/07/05 */ --- 1151,1157 ---- buf_T *b; int n = 0; ! FOR_ALL_BUFFERS(b) { /* Deleted buffers should not be counted * SegPhault - 01/07/05 */ *************** *** 1167,1173 **** buf_T *b; int n = NUM2INT(num); ! for (b = firstbuf; b != NULL; b = b->b_next) { /* Deleted buffers should not be counted * SegPhault - 01/07/05 */ --- 1167,1173 ---- buf_T *b; int n = NUM2INT(num); ! FOR_ALL_BUFFERS(b) { /* Deleted buffers should not be counted * SegPhault - 01/07/05 */ *************** *** 1418,1424 **** win_T *w; int n = 0; ! for (w = firstwin; w != NULL; w = w->w_next) n++; return INT2NUM(n); #else --- 1418,1424 ---- win_T *w; int n = 0; ! FOR_ALL_WINDOWS(w) n++; return INT2NUM(n); #else *** ../vim-7.4.2100/src/if_tcl.c 2016-01-30 17:24:01.798502450 +0100 --- src/if_tcl.c 2016-07-24 21:51:19.896108951 +0200 *************** *** 388,394 **** Tcl_WrongNumArgs(interp, 1, objv, "bufNumber"); return TCL_ERROR; } ! for (buf = firstbuf; buf != NULL; buf = buf->b_next) { if (buf->b_fnum == n) { --- 388,394 ---- Tcl_WrongNumArgs(interp, 1, objv, "bufNumber"); return TCL_ERROR; } ! FOR_ALL_BUFFERS(buf) { if (buf->b_fnum == n) { *************** *** 416,422 **** err = TCL_ERROR; break; } ! for (buf = firstbuf; buf != NULL; buf = buf->b_next) { name = tclgetbuffer(interp, buf); if (name == NULL) --- 416,422 ---- err = TCL_ERROR; break; } ! FOR_ALL_BUFFERS(buf) { name = tclgetbuffer(interp, buf); if (name == NULL) *** ../vim-7.4.2100/src/main.c 2016-07-16 19:49:54.372304144 +0200 --- src/main.c 2016-07-24 21:51:19.896108951 +0200 *************** *** 742,748 **** win_T *wp; /* set options in each window for "vimdiff". */ ! for (wp = firstwin; wp != NULL; wp = wp->w_next) diff_win_options(wp, TRUE); } #endif --- 742,748 ---- win_T *wp; /* set options in each window for "vimdiff". */ ! FOR_ALL_WINDOWS(wp) diff_win_options(wp, TRUE); } #endif *************** *** 1375,1382 **** for (tp = first_tabpage; tp != NULL; tp = next_tp) { next_tp = tp->tp_next; ! for (wp = (tp == curtab) ! ? firstwin : tp->tp_firstwin; wp != NULL; wp = wp->w_next) { if (wp->w_buffer == NULL) /* Autocmd must have close the buffer already, skip. */ --- 1375,1381 ---- for (tp = first_tabpage; tp != NULL; tp = next_tp) { next_tp = tp->tp_next; ! FOR_ALL_WINDOWS_IN_TAB(tp, wp) { if (wp->w_buffer == NULL) /* Autocmd must have close the buffer already, skip. */ *************** *** 1399,1405 **** # endif /* Trigger BufUnload for buffers that are loaded */ ! for (buf = firstbuf; buf != NULL; buf = buf->b_next) if (buf->b_ml.ml_mfp != NULL) { bufref_T bufref; --- 1398,1404 ---- # endif /* Trigger BufUnload for buffers that are loaded */ ! FOR_ALL_BUFFERS(buf) if (buf->b_ml.ml_mfp != NULL) { bufref_T bufref; *** ../vim-7.4.2100/src/mark.c 2016-07-03 17:47:21.858812593 +0200 --- src/mark.c 2016-07-24 21:51:19.896108951 +0200 *************** *** 1864,1870 **** #endif fputs(_("\n# History of marks within files (newest to oldest):\n"), fp_out); ! for (buf = firstbuf; buf != NULL; buf = buf->b_next) { /* * Only write something if buffer has been loaded and at least one --- 1864,1870 ---- #endif fputs(_("\n# History of marks within files (newest to oldest):\n"), fp_out); ! FOR_ALL_BUFFERS(buf) { /* * Only write something if buffer has been loaded and at least one *************** *** 2018,2024 **** else /* fp_out != NULL */ { /* This is slow if there are many buffers!! */ ! for (buf = firstbuf; buf != NULL; buf = buf->b_next) if (buf->b_ffname != NULL) { home_replace(NULL, buf->b_ffname, name_buf, LSIZE, TRUE); --- 2018,2024 ---- else /* fp_out != NULL */ { /* This is slow if there are many buffers!! */ ! FOR_ALL_BUFFERS(buf) if (buf->b_ffname != NULL) { home_replace(NULL, buf->b_ffname, name_buf, LSIZE, TRUE); *** ../vim-7.4.2100/src/memfile.c 2016-07-16 14:46:51.127240626 +0200 --- src/memfile.c 2016-07-24 21:51:19.900108914 +0200 *************** *** 796,802 **** if (mfp->mf_fd < 0 && need_release && p_uc) { /* find for which buffer this memfile is */ ! for (buf = firstbuf; buf != NULL; buf = buf->b_next) if (buf->b_ml.ml_mfp == mfp) break; if (buf != NULL && buf->b_may_swap) --- 796,802 ---- if (mfp->mf_fd < 0 && need_release && p_uc) { /* find for which buffer this memfile is */ ! FOR_ALL_BUFFERS(buf) if (buf->b_ml.ml_mfp == mfp) break; if (buf != NULL && buf->b_may_swap) *************** *** 861,867 **** bhdr_T *hp; int retval = FALSE; ! for (buf = firstbuf; buf != NULL; buf = buf->b_next) { mfp = buf->b_ml.ml_mfp; if (mfp != NULL) --- 861,867 ---- bhdr_T *hp; int retval = FALSE; ! FOR_ALL_BUFFERS(buf) { mfp = buf->b_ml.ml_mfp; if (mfp != NULL) *** ../vim-7.4.2100/src/memline.c 2016-07-16 14:46:51.127240626 +0200 --- src/memline.c 2016-07-24 21:51:19.900108914 +0200 *************** *** 739,745 **** { buf_T *buf; ! for (buf = firstbuf; buf != NULL; buf = buf->b_next) if (!buf->b_p_ro || buf->b_changed) ml_open_file(buf); } --- 739,745 ---- { buf_T *buf; ! FOR_ALL_BUFFERS(buf) if (!buf->b_p_ro || buf->b_changed) ml_open_file(buf); } *************** *** 873,879 **** { buf_T *buf; ! for (buf = firstbuf; buf != NULL; buf = buf->b_next) ml_close(buf, del_file && ((buf->b_flags & BF_PRESERVED) == 0 || vim_strchr(p_cpo, CPO_PRESERVE) == NULL)); #ifdef FEAT_SPELL --- 873,879 ---- { buf_T *buf; ! FOR_ALL_BUFFERS(buf) ml_close(buf, del_file && ((buf->b_flags & BF_PRESERVED) == 0 || vim_strchr(p_cpo, CPO_PRESERVE) == NULL)); #ifdef FEAT_SPELL *************** *** 893,899 **** { buf_T *buf; ! for (buf = firstbuf; buf != NULL; buf = buf->b_next) if (!bufIsChanged(buf)) ml_close(buf, TRUE); /* close all not-modified buffers */ } --- 893,899 ---- { buf_T *buf; ! FOR_ALL_BUFFERS(buf) if (!bufIsChanged(buf)) ml_close(buf, TRUE); /* close all not-modified buffers */ } *************** *** 2264,2270 **** buf_T *buf; stat_T st; ! for (buf = firstbuf; buf != NULL; buf = buf->b_next) { if (buf->b_ml.ml_mfp == NULL || buf->b_ml.ml_mfp->mf_fname == NULL) continue; /* no file */ --- 2264,2270 ---- buf_T *buf; stat_T st; ! FOR_ALL_BUFFERS(buf) { if (buf->b_ml.ml_mfp == NULL || buf->b_ml.ml_mfp->mf_fname == NULL) continue; /* no file */ *** ../vim-7.4.2100/src/misc1.c 2016-07-16 14:46:51.131240585 +0200 --- src/misc1.c 2016-07-24 21:51:19.900108914 +0200 *************** *** 2814,2820 **** win_T *wp; linenr_T wlnum; ! for (wp = firstwin; wp != NULL; wp = wp->w_next) if (wp->w_p_diff && wp != curwin) { redraw_win_later(wp, VALID); --- 2814,2820 ---- win_T *wp; linenr_T wlnum; ! FOR_ALL_WINDOWS(wp) if (wp->w_p_diff && wp != curwin) { redraw_win_later(wp, VALID); *************** *** 2924,2930 **** win_T *wp; linenr_T wlnum; ! for (wp = firstwin; wp != NULL; wp = wp->w_next) if (wp->w_p_diff && wp != curwin) { redraw_win_later(wp, VALID); --- 2924,2930 ---- win_T *wp; linenr_T wlnum; ! FOR_ALL_WINDOWS(wp) if (wp->w_p_diff && wp != curwin) { redraw_win_later(wp, VALID); *************** *** 3213,3219 **** { win_T *wp; ! for (wp = firstwin; wp != NULL; wp = wp->w_next) if (wp->w_buffer == buf && wp->w_status_height) { wp->w_redr_status = TRUE; --- 3213,3219 ---- { win_T *wp; ! FOR_ALL_WINDOWS(wp) if (wp->w_buffer == buf && wp->w_status_height) { wp->w_redr_status = TRUE; *************** *** 9475,9481 **** ml_close_notmod(); /* close all not-modified buffers */ ! for (buf = firstbuf; buf != NULL; buf = buf->b_next) { if (buf->b_ml.ml_mfp != NULL && buf->b_ml.ml_mfp->mf_fname != NULL) { --- 9475,9481 ---- ml_close_notmod(); /* close all not-modified buffers */ ! FOR_ALL_BUFFERS(buf) { if (buf->b_ml.ml_mfp != NULL && buf->b_ml.ml_mfp->mf_fname != NULL) { *** ../vim-7.4.2100/src/move.c 2016-03-19 22:11:47.428674921 +0100 --- src/move.c 2016-07-24 21:51:19.900108914 +0200 *************** *** 2820,2826 **** * loop through the cursorbound windows */ VIsual_select = VIsual_active = 0; ! for (curwin = firstwin; curwin; curwin = curwin->w_next) { curbuf = curwin->w_buffer; /* skip original window and windows with 'noscrollbind' */ --- 2820,2826 ---- * loop through the cursorbound windows */ VIsual_select = VIsual_active = 0; ! FOR_ALL_WINDOWS(curwin) { curbuf = curwin->w_buffer; /* skip original window and windows with 'noscrollbind' */ *** ../vim-7.4.2100/src/netbeans.c 2016-07-21 22:10:06.051248382 +0200 --- src/netbeans.c 2016-07-24 21:51:19.900108914 +0200 *************** *** 473,479 **** { buf_T *buf; ! for (buf = firstbuf; buf != NULL; buf = buf->b_next) buf->b_has_sign_column = FALSE; /* The IDE is breaking the connection. */ --- 473,479 ---- { buf_T *buf; ! FOR_ALL_BUFFERS(buf) buf->b_has_sign_column = FALSE; /* The IDE is breaking the connection. */ *************** *** 721,727 **** int n; n = 0; ! for (bufp = firstbuf; bufp != NULL; bufp = bufp->b_next) if (bufp->b_changed) ++n; return n; --- 721,727 ---- int n; n = 0; ! FOR_ALL_BUFFERS(bufp) if (bufp->b_changed) ++n; return n; *** ../vim-7.4.2100/src/normal.c 2016-07-02 18:25:15.724879148 +0200 --- src/normal.c 2016-07-24 21:51:19.900108914 +0200 *************** *** 4073,4079 **** * loop through the scrollbound windows and scroll accordingly */ VIsual_select = VIsual_active = 0; ! for (curwin = firstwin; curwin; curwin = curwin->w_next) { curbuf = curwin->w_buffer; /* skip original window and windows with 'noscrollbind' */ --- 4073,4079 ---- * loop through the scrollbound windows and scroll accordingly */ VIsual_select = VIsual_active = 0; ! FOR_ALL_WINDOWS(curwin) { curbuf = curwin->w_buffer; /* skip original window and windows with 'noscrollbind' */ *** ../vim-7.4.2100/src/option.c 2016-07-16 14:46:51.131240585 +0200 --- src/option.c 2016-07-24 21:51:19.904108878 +0200 *************** *** 6342,6348 **** { buf_T *buf; ! for (buf = firstbuf; buf != NULL; buf = buf->b_next) if (buf != curbuf && *buf->b_p_cm == NUL) ml_set_crypt_key(buf, buf->b_p_key, oldval); } --- 6342,6348 ---- { buf_T *buf; ! FOR_ALL_BUFFERS(buf) if (buf != curbuf && *buf->b_p_cm == NUL) ml_set_crypt_key(buf, buf->b_p_key, oldval); } *************** *** 7864,7870 **** char_u hash[UNDO_HASH_SIZE]; buf_T *save_curbuf = curbuf; ! for (curbuf = firstbuf; curbuf != NULL; curbuf = curbuf->b_next) { /* When 'undofile' is set globally: for every buffer, otherwise * only for the current buffer: Try to read in the undofile, --- 7864,7870 ---- char_u hash[UNDO_HASH_SIZE]; buf_T *save_curbuf = curbuf; ! FOR_ALL_BUFFERS(curbuf) { /* When 'undofile' is set globally: for every buffer, otherwise * only for the current buffer: Try to read in the undofile, *************** *** 8040,8046 **** { win_T *win; ! for (win = firstwin; win != NULL; win = win->w_next) if (win->w_p_pvw && win != curwin) { curwin->w_p_pvw = FALSE; --- 8040,8046 ---- { win_T *win; ! FOR_ALL_WINDOWS(win) if (win->w_p_pvw && win != curwin) { curwin->w_p_pvw = FALSE; *************** *** 11651,11657 **** if (!old_p_paste) { /* save options for each buffer */ ! for (buf = firstbuf; buf != NULL; buf = buf->b_next) { buf->b_p_tw_nopaste = buf->b_p_tw; buf->b_p_wm_nopaste = buf->b_p_wm; --- 11651,11657 ---- if (!old_p_paste) { /* save options for each buffer */ ! FOR_ALL_BUFFERS(buf) { buf->b_p_tw_nopaste = buf->b_p_tw; buf->b_p_wm_nopaste = buf->b_p_wm; *************** *** 11683,11689 **** * already on. */ /* set options for each buffer */ ! for (buf = firstbuf; buf != NULL; buf = buf->b_next) { buf->b_p_tw = 0; /* textwidth is 0 */ buf->b_p_wm = 0; /* wrapmargin is 0 */ --- 11683,11689 ---- * already on. */ /* set options for each buffer */ ! FOR_ALL_BUFFERS(buf) { buf->b_p_tw = 0; /* textwidth is 0 */ buf->b_p_wm = 0; /* wrapmargin is 0 */ *************** *** 11719,11725 **** else if (old_p_paste) { /* restore options for each buffer */ ! for (buf = firstbuf; buf != NULL; buf = buf->b_next) { buf->b_p_tw = buf->b_p_tw_nopaste; buf->b_p_wm = buf->b_p_wm_nopaste; --- 11719,11725 ---- else if (old_p_paste) { /* restore options for each buffer */ ! FOR_ALL_BUFFERS(buf) { buf->b_p_tw = buf->b_p_tw_nopaste; buf->b_p_wm = buf->b_p_wm_nopaste; *** ../vim-7.4.2100/src/quickfix.c 2016-07-20 21:44:33.366131742 +0200 --- src/quickfix.c 2016-07-24 21:51:19.904108878 +0200 *************** *** 2040,2046 **** if (cmdmod.tab != 0) wp = NULL; else ! for (wp = firstwin; wp != NULL; wp = wp->w_next) if (wp->w_buffer != NULL && wp->w_buffer->b_help) break; if (wp != NULL && wp->w_buffer->b_nwindows > 0) --- 2040,2046 ---- if (cmdmod.tab != 0) wp = NULL; else ! FOR_ALL_WINDOWS(wp) if (wp->w_buffer != NULL && wp->w_buffer->b_help) break; if (wp != NULL && wp->w_buffer->b_nwindows > 0) *** ../vim-7.4.2100/src/screen.c 2016-07-24 16:17:55.753759205 +0200 --- src/screen.c 2016-07-24 21:51:19.904108878 +0200 *************** *** 730,736 **** #ifdef FEAT_WINDOWS /* Reset b_mod_set flags. Going through all windows is probably faster * than going through all buffers (there could be many buffers). */ ! for (wp = firstwin; wp != NULL; wp = wp->w_next) wp->w_buffer->b_mod_set = FALSE; #else curbuf->b_mod_set = FALSE; --- 730,736 ---- #ifdef FEAT_WINDOWS /* Reset b_mod_set flags. Going through all windows is probably faster * than going through all buffers (there could be many buffers). */ ! FOR_ALL_WINDOWS(wp) wp->w_buffer->b_mod_set = FALSE; #else curbuf->b_mod_set = FALSE; *************** *** 962,968 **** update_prepare(); # ifdef FEAT_WINDOWS ! for (wp = firstwin; wp; wp = wp->w_next) { if (wp->w_redr_type != 0) win_update(wp); --- 962,968 ---- update_prepare(); # ifdef FEAT_WINDOWS ! FOR_ALL_WINDOWS(wp) { if (wp->w_redr_type != 0) win_update(wp); *************** *** 6271,6277 **** { win_T *wp; ! for (wp = firstwin; wp; wp = wp->w_next) if (wp->w_status_height) { wp->w_redr_status = TRUE; --- 6271,6277 ---- { win_T *wp; ! FOR_ALL_WINDOWS(wp) if (wp->w_status_height) { wp->w_redr_status = TRUE; *************** *** 6287,6293 **** { win_T *wp; ! for (wp = firstwin; wp; wp = wp->w_next) if (wp->w_status_height != 0 && wp->w_buffer == curbuf) { wp->w_redr_status = TRUE; --- 6287,6293 ---- { win_T *wp; ! FOR_ALL_WINDOWS(wp) if (wp->w_status_height != 0 && wp->w_buffer == curbuf) { wp->w_redr_status = TRUE; *************** *** 6303,6309 **** { win_T *wp; ! for (wp = firstwin; wp; wp = wp->w_next) if (wp->w_redr_status) win_redr_status(wp); if (redraw_tabline) --- 6303,6309 ---- { win_T *wp; ! FOR_ALL_WINDOWS(wp) if (wp->w_redr_status) win_redr_status(wp); if (redraw_tabline) *************** *** 10360,10366 **** else #endif { ! for (tp = first_tabpage; tp != NULL; tp = tp->tp_next) ++tabcount; tabwidth = (Columns - 1 + tabcount / 2) / tabcount; --- 10360,10366 ---- else #endif { ! FOR_ALL_TABPAGES(tp) ++tabcount; tabwidth = (Columns - 1 + tabcount / 2) / tabcount; *** ../vim-7.4.2100/src/spell.c 2016-07-19 16:38:45.499087078 +0200 --- src/spell.c 2016-07-24 21:51:19.904108878 +0200 *************** *** 2875,2881 **** buf_T *buf; /* Go through all buffers and handle 'spelllang'. */ ! for (buf = firstbuf; buf != NULL; buf = buf->b_next) ga_clear(&buf->b_s.b_langp); while (first_lang != NULL) --- 2875,2881 ---- buf_T *buf; /* Go through all buffers and handle 'spelllang'. */ ! FOR_ALL_BUFFERS(buf) ga_clear(&buf->b_s.b_langp); while (first_lang != NULL) *************** *** 2911,2917 **** spell_free_all(); /* Go through all buffers and handle 'spelllang'. */ ! for (wp = firstwin; wp != NULL; wp = wp->w_next) { /* Only load the wordlists when 'spelllang' is set and there is a * window for this buffer in which 'spell' is set. */ --- 2911,2917 ---- spell_free_all(); /* Go through all buffers and handle 'spelllang'. */ ! FOR_ALL_WINDOWS(wp) { /* Only load the wordlists when 'spelllang' is set and there is a * window for this buffer in which 'spell' is set. */ *** ../vim-7.4.2100/src/term.c 2016-07-22 22:12:33.457219452 +0200 --- src/term.c 2016-07-24 21:51:19.908108841 +0200 *************** *** 1907,1913 **** * loaded. */ set_bufref(&old_curbuf, curbuf); ! for (curbuf = firstbuf; curbuf != NULL; curbuf = curbuf->b_next) { if (curbuf->b_ml.ml_mfp != NULL) apply_autocmds(EVENT_TERMCHANGED, NULL, NULL, FALSE, --- 1907,1913 ---- * loaded. */ set_bufref(&old_curbuf, curbuf); ! FOR_ALL_BUFFERS(curbuf) { if (curbuf->b_ml.ml_mfp != NULL) apply_autocmds(EVENT_TERMCHANGED, NULL, NULL, FALSE, *** ../vim-7.4.2100/src/window.c 2016-07-19 23:12:18.712611729 +0200 --- src/window.c 2016-07-24 21:51:19.908108841 +0200 *************** *** 209,215 **** /* cursor to preview window */ case 'P': ! for (wp = firstwin; wp != NULL; wp = wp->w_next) if (wp->w_p_pvw) break; if (wp == NULL) --- 209,215 ---- /* cursor to preview window */ case 'P': ! FOR_ALL_WINDOWS(wp) if (wp->w_p_pvw) break; if (wp == NULL) *************** *** 1367,1373 **** if (win == NULL) return FALSE; ! for (wp = firstwin; wp != NULL; wp = wp->w_next) if (wp == win) return TRUE; return FALSE; --- 1367,1373 ---- if (win == NULL) return FALSE; ! FOR_ALL_WINDOWS(wp) if (wp == win) return TRUE; return FALSE; *************** *** 1382,1388 **** win_T *wp; int count = 0; ! for (wp = firstwin; wp != NULL; wp = wp->w_next) ++count; return count; } --- 1382,1388 ---- win_T *wp; int count = 0; ! FOR_ALL_WINDOWS(wp) ++count; return count; } *************** *** 3712,3718 **** { tabpage_T *tp; ! for (tp = first_tabpage; tp != NULL; tp = tp->tp_next) if (tp == tpc) return TRUE; return FALSE; --- 3712,3718 ---- { tabpage_T *tp; ! FOR_ALL_TABPAGES(tp) if (tp == tpc) return TRUE; return FALSE; *************** *** 4012,4018 **** first_tabpage = curtab->tp_next; else { ! for (tp = first_tabpage; tp != NULL; tp = tp->tp_next) if (tp->tp_next == curtab) break; if (tp == NULL) /* "cannot happen" */ --- 4012,4018 ---- first_tabpage = curtab->tp_next; else { ! FOR_ALL_TABPAGES(tp) if (tp->tp_next == curtab) break; if (tp == NULL) /* "cannot happen" */ *************** *** 4091,4097 **** win_T *wp; # ifdef FEAT_WINDOWS ! for (wp = firstwin; wp != NULL; wp = wp->w_next) if (--winnr == 0) break; return wp; --- 4091,4097 ---- win_T *wp; # ifdef FEAT_WINDOWS ! FOR_ALL_WINDOWS(wp) if (--winnr == 0) break; return wp; *************** *** 4112,4120 **** win_T *wp; tabpage_T *tp; ! for (tp = first_tabpage; tp != NULL; tp = tp->tp_next) ! for (wp = (tp == curtab ? firstwin : tp->tp_firstwin); ! wp != NULL; wp = wp->w_next) if (wp == win) return tp; return NULL; --- 4112,4118 ---- win_T *wp; tabpage_T *tp; ! FOR_ALL_TAB_WINDOWS(tp, wp) if (wp == win) return tp; return NULL; *************** *** 4404,4410 **** wp = curwin; # ifdef FEAT_WINDOWS else ! for (wp = firstwin; wp != NULL; wp = wp->w_next) if (wp->w_buffer == buf) break; if (wp != NULL) --- 4402,4408 ---- wp = curwin; # ifdef FEAT_WINDOWS else ! FOR_ALL_WINDOWS(wp) if (wp->w_buffer == buf) break; if (wp != NULL) *************** *** 4428,4434 **** if (wp != NULL) return wp; ! for (tp = first_tabpage; tp != NULL; tp = tp->tp_next) if (tp != curtab) { for (wp = tp->tp_firstwin; wp != NULL; wp = wp->w_next) --- 4426,4432 ---- if (wp != NULL) return wp; ! FOR_ALL_TABPAGES(tp) if (tp != curtab) { for (wp = tp->tp_firstwin; wp != NULL; wp = wp->w_next) *************** *** 4607,4613 **** if (prevwin == wp) prevwin = NULL; ! for (ttp = first_tabpage; ttp != NULL; ttp = ttp->tp_next) if (ttp->tp_prevwin == wp) ttp->tp_prevwin = NULL; } --- 4605,4611 ---- if (prevwin == wp) prevwin = NULL; ! FOR_ALL_TABPAGES(ttp) if (ttp->tp_prevwin == wp) ttp->tp_prevwin = NULL; } *************** *** 4620,4626 **** /* Remove the window from the b_wininfo lists, it may happen that the * freed memory is re-used for another window. */ ! for (buf = firstbuf; buf != NULL; buf = buf->b_next) for (wip = buf->b_wininfo; wip != NULL; wip = wip->wi_next) if (wip->wi_win == wp) wip->wi_win = NULL; --- 4618,4624 ---- /* Remove the window from the b_wininfo lists, it may happen that the * freed memory is re-used for another window. */ ! FOR_ALL_BUFFERS(buf) for (wip = buf->b_wininfo; wip != NULL; wip = wip->wi_next) if (wip->wi_win == wp) wip->wi_win = NULL; *************** *** 4863,4869 **** ga_init2(gap, (int)sizeof(int), 1); if (ga_grow(gap, win_count() * 2) == OK) ! for (wp = firstwin; wp != NULL; wp = wp->w_next) { ((int *)gap->ga_data)[gap->ga_len++] = wp->w_width + wp->w_vsep_width; --- 4861,4867 ---- ga_init2(gap, (int)sizeof(int), 1); if (ga_grow(gap, win_count() * 2) == OK) ! FOR_ALL_WINDOWS(wp) { ((int *)gap->ga_data)[gap->ga_len++] = wp->w_width + wp->w_vsep_width; *************** *** 4888,4894 **** for (j = 0; j < 2; ++j) { i = 0; ! for (wp = firstwin; wp != NULL; wp = wp->w_next) { frame_setwidth(wp->w_frame, ((int *)gap->ga_data)[i++]); win_setheight_win(((int *)gap->ga_data)[i++], wp); --- 4886,4892 ---- for (j = 0; j < 2; ++j) { i = 0; ! FOR_ALL_WINDOWS(wp) { frame_setwidth(wp->w_frame, ((int *)gap->ga_data)[i++]); win_setheight_win(((int *)gap->ga_data)[i++], wp); *************** *** 5384,5390 **** { /* TODO: handle vertical splits */ room = -p_wh; ! for (wp = firstwin; wp != NULL; wp = wp->w_next) room += wp->w_height - p_wmh; if (room >= 0) break; --- 5382,5388 ---- { /* TODO: handle vertical splits */ room = -p_wh; ! FOR_ALL_WINDOWS(wp) room += wp->w_height - p_wmh; if (room >= 0) break; *************** *** 6344,6350 **** #ifdef FEAT_WINDOWS total = 0; ! for (tp = first_tabpage; tp != NULL; tp = tp->tp_next) { n = frame_minheight(tp->tp_topframe, NULL); if (total < n) --- 6342,6348 ---- #ifdef FEAT_WINDOWS total = 0; ! FOR_ALL_TABPAGES(tp) { n = frame_minheight(tp->tp_topframe, NULL); if (total < n) *************** *** 6374,6380 **** if (first_tabpage->tp_next != NULL) return FALSE; ! for (wp = firstwin; wp != NULL; wp = wp->w_next) if (wp->w_buffer != NULL && (!((wp->w_buffer->b_help && !curbuf->b_help) # ifdef FEAT_QUICKFIX --- 6372,6378 ---- if (first_tabpage->tp_next != NULL) return FALSE; ! FOR_ALL_WINDOWS(wp) if (wp->w_buffer != NULL && (!((wp->w_buffer->b_help && !curbuf->b_help) # ifdef FEAT_QUICKFIX *************** *** 7091,7097 **** tabpage_T *tp; int tabnr = get_tv_number(&argvars[1]); ! for (tp = first_tabpage; tp != NULL; tp = tp->tp_next) if (--tabnr == 0) break; if (tp == NULL) --- 7089,7095 ---- tabpage_T *tp; int tabnr = get_tv_number(&argvars[1]); ! FOR_ALL_TABPAGES(tp) if (--tabnr == 0) break; if (tp == NULL) *************** *** 7112,7120 **** tabpage_T *tp; int id = get_tv_number(&argvars[0]); ! for (tp = first_tabpage; tp != NULL; tp = tp->tp_next) ! for (wp = tp == curtab ? firstwin : tp->tp_firstwin; ! wp != NULL; wp = wp->w_next) if (wp->w_id == id) { goto_tabpage_win(tp, wp); --- 7110,7116 ---- tabpage_T *tp; int id = get_tv_number(&argvars[0]); ! FOR_ALL_TAB_WINDOWS(tp, wp) if (wp->w_id == id) { goto_tabpage_win(tp, wp); *************** *** 7132,7141 **** int tabnr = 1; int id = get_tv_number(&argvars[0]); ! for (tp = first_tabpage; tp != NULL; tp = tp->tp_next) { ! for (wp = tp == curtab ? firstwin : tp->tp_firstwin; ! wp != NULL; wp = wp->w_next) { if (wp->w_id == id) { --- 7128,7136 ---- int tabnr = 1; int id = get_tv_number(&argvars[0]); ! FOR_ALL_TABPAGES(tp) { ! FOR_ALL_WINDOWS_IN_TAB(tp, wp) { if (wp->w_id == id) { *************** *** 7159,7165 **** int nr = 1; int id = get_tv_number(&argvars[0]); ! for (wp = firstwin; wp != NULL; wp = wp->w_next) { if (wp->w_id == id) return nr; --- 7154,7160 ---- int nr = 1; int id = get_tv_number(&argvars[0]); ! FOR_ALL_WINDOWS(wp) { if (wp->w_id == id) return nr; *************** *** 7175,7183 **** tabpage_T *tp; int bufnr = get_tv_number(&argvars[0]); ! for (tp = first_tabpage; tp != NULL; tp = tp->tp_next) ! for (wp = tp == curtab ? firstwin : tp->tp_firstwin; ! wp != NULL; wp = wp->w_next) if (wp->w_buffer->b_fnum == bufnr) list_append_number(list, wp->w_id); } --- 7170,7176 ---- tabpage_T *tp; int bufnr = get_tv_number(&argvars[0]); ! FOR_ALL_TAB_WINDOWS(tp, wp) if (wp->w_buffer->b_fnum == bufnr) list_append_number(list, wp->w_id); } *** ../vim-7.4.2100/src/workshop.c 2016-01-30 21:29:52.232928463 +0100 --- src/workshop.c 2016-07-24 21:51:19.908108841 +0200 *************** *** 1319,1325 **** { win_T *wp = NULL; /* window filename is in */ ! for (wp = firstwin; wp != NULL; wp = W_NEXT(wp)) if (buf == wp->w_buffer) break; return wp; --- 1319,1325 ---- { win_T *wp = NULL; /* window filename is in */ ! FOR_ALL_WINDOWS(wp) if (buf == wp->w_buffer) break; return wp; *** ../vim-7.4.2100/src/version.c 2016-07-24 17:32:41.881505040 +0200 --- src/version.c 2016-07-24 20:08:55.668948234 +0200 *************** *** 760,761 **** --- 760,763 ---- { /* Add new patch number below this line */ + /**/ + 2101, /**/ -- Why isn't there mouse-flavored cat food? /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\ /// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\ \\\ an exciting new programming language -- http://www.Zimbu.org /// \\\ help me help AIDS victims -- http://ICCF-Holland.org ///