mirror of
				https://github.com/neovim/neovim.git
				synced 2025-10-26 12:27:24 +00:00 
			
		
		
		
	vim-patch:7.4.2101
Problem:    Looping over windows, buffers and tab pages is inconsistant.
Solution:   Use FOR_ALL_ macros everywhere. (Yegappan Lakshmanan)
2932359000
			
			
This commit is contained in:
		| @@ -4365,10 +4365,15 @@ void ex_help(exarg_T *eap) | |||||||
|       ) { |       ) { | ||||||
|     if (cmdmod.tab != 0) |     if (cmdmod.tab != 0) | ||||||
|       wp = NULL; |       wp = NULL; | ||||||
|     else |     else { | ||||||
|       for (wp = firstwin; wp != NULL; wp = wp->w_next) |       wp = NULL; | ||||||
|         if (wp->w_buffer != NULL && wp->w_buffer->b_help) |       FOR_ALL_WINDOWS_IN_TAB(wp2, curtab) { | ||||||
|  |         if (wp2->w_buffer != NULL && wp2->w_buffer->b_help) { | ||||||
|  |           wp = wp2; | ||||||
|           break; |           break; | ||||||
|  |         } | ||||||
|  |       } | ||||||
|  |     } | ||||||
|     if (wp != NULL && wp->w_buffer->b_nwindows > 0) |     if (wp != NULL && wp->w_buffer->b_nwindows > 0) | ||||||
|       win_enter(wp, true); |       win_enter(wp, true); | ||||||
|     else { |     else { | ||||||
|   | |||||||
| @@ -5851,7 +5851,7 @@ static void ex_quit_all(exarg_T *eap) | |||||||
|  */ |  */ | ||||||
| static void ex_close(exarg_T *eap) | static void ex_close(exarg_T *eap) | ||||||
| { | { | ||||||
|   win_T *win; |   win_T *win = NULL; | ||||||
|   int winnr = 0; |   int winnr = 0; | ||||||
|   if (cmdwin_type != 0) |   if (cmdwin_type != 0) | ||||||
|     cmdwin_result = Ctrl_C; |     cmdwin_result = Ctrl_C; | ||||||
| @@ -5859,11 +5859,13 @@ static void ex_close(exarg_T *eap) | |||||||
|     if (eap->addr_count == 0) |     if (eap->addr_count == 0) | ||||||
|       ex_win_close(eap->forceit, curwin, NULL); |       ex_win_close(eap->forceit, curwin, NULL); | ||||||
|     else { |     else { | ||||||
|       for (win = firstwin; win != NULL; win = win->w_next) { |       FOR_ALL_WINDOWS_IN_TAB(wp, curtab) { | ||||||
|         winnr++; |         winnr++; | ||||||
|         if (winnr == eap->line2) |         if (winnr == eap->line2) { | ||||||
|  |           win = wp; | ||||||
|           break; |           break; | ||||||
|         } |         } | ||||||
|  |       } | ||||||
|       if (win == NULL) |       if (win == NULL) | ||||||
|         win = lastwin; |         win = lastwin; | ||||||
|       ex_win_close(eap->forceit, win, NULL); |       ex_win_close(eap->forceit, win, NULL); | ||||||
| @@ -6074,13 +6076,15 @@ static void ex_hide(exarg_T *eap) | |||||||
|         win_close(curwin, FALSE); /* don't free buffer */ |         win_close(curwin, FALSE); /* don't free buffer */ | ||||||
|       else { |       else { | ||||||
|         int winnr = 0; |         int winnr = 0; | ||||||
|         win_T *win; |         win_T *win = NULL; | ||||||
|  |  | ||||||
|         for (win = firstwin; win != NULL; win = win->w_next) { |         FOR_ALL_WINDOWS_IN_TAB(wp, curtab) { | ||||||
|           winnr++; |           winnr++; | ||||||
|           if (winnr == eap->line2) |           if (winnr == eap->line2) { | ||||||
|  |             win = wp; | ||||||
|             break; |             break; | ||||||
|           } |           } | ||||||
|  |         } | ||||||
|         if (win == NULL) |         if (win == NULL) | ||||||
|           win = lastwin; |           win = lastwin; | ||||||
|         win_close(win, FALSE); |         win_close(win, FALSE); | ||||||
| @@ -6846,7 +6850,8 @@ static void ex_syncbind(exarg_T *eap) | |||||||
|   /* |   /* | ||||||
|    * Set all scrollbind windows to the same topline. |    * Set all scrollbind windows to the same topline. | ||||||
|    */ |    */ | ||||||
|   for (curwin = firstwin; curwin; curwin = curwin->w_next) { |   FOR_ALL_WINDOWS_IN_TAB(wp, curtab) { | ||||||
|  |     curwin = wp; | ||||||
|     if (curwin->w_p_scb) { |     if (curwin->w_p_scb) { | ||||||
|       curbuf = curwin->w_buffer; |       curbuf = curwin->w_buffer; | ||||||
|       y = topline - curwin->w_topline; |       y = topline - curwin->w_topline; | ||||||
|   | |||||||
| @@ -4733,7 +4733,6 @@ check_timestamps ( | |||||||
|     int focus                      /* called for GUI focus event */ |     int focus                      /* called for GUI focus event */ | ||||||
| ) | ) | ||||||
| { | { | ||||||
|   buf_T       *buf; |  | ||||||
|   int didit = 0; |   int didit = 0; | ||||||
|   int n; |   int n; | ||||||
|  |  | ||||||
| @@ -4758,7 +4757,7 @@ check_timestamps ( | |||||||
|     ++no_wait_return; |     ++no_wait_return; | ||||||
|     did_check_timestamps = TRUE; |     did_check_timestamps = TRUE; | ||||||
|     already_warned = FALSE; |     already_warned = FALSE; | ||||||
|     for (buf = firstbuf; buf != NULL; ) { |     FOR_ALL_BUFFERS(buf) { | ||||||
|       /* Only check buffers in a window. */ |       /* Only check buffers in a window. */ | ||||||
|       if (buf->b_nwindows > 0) { |       if (buf->b_nwindows > 0) { | ||||||
|         bufref_T bufref; |         bufref_T bufref; | ||||||
| @@ -4773,7 +4772,6 @@ check_timestamps ( | |||||||
|           continue; |           continue; | ||||||
|         } |         } | ||||||
|       } |       } | ||||||
|       buf = buf->b_next; |  | ||||||
|     } |     } | ||||||
|     --no_wait_return; |     --no_wait_return; | ||||||
|     need_check_timestamps = FALSE; |     need_check_timestamps = FALSE; | ||||||
|   | |||||||
| @@ -556,7 +556,6 @@ EXTERN win_T    *prevwin INIT(= NULL);  /* previous window */ | |||||||
|   FOR_ALL_TABS(tp) \ |   FOR_ALL_TABS(tp) \ | ||||||
|     FOR_ALL_WINDOWS_IN_TAB(wp, tp) |     FOR_ALL_WINDOWS_IN_TAB(wp, tp) | ||||||
|  |  | ||||||
| # define FOR_ALL_WINDOWS(wp) for (wp = firstwin; wp != NULL; wp = wp->w_next) |  | ||||||
| # define FOR_ALL_WINDOWS_IN_TAB(wp, tp) \ | # define FOR_ALL_WINDOWS_IN_TAB(wp, tp) \ | ||||||
|   for (win_T *wp = ((tp) == curtab) \ |   for (win_T *wp = ((tp) == curtab) \ | ||||||
|               ? firstwin : (tp)->tp_firstwin; wp != NULL; wp = wp->w_next) |               ? firstwin : (tp)->tp_firstwin; wp != NULL; wp = wp->w_next) | ||||||
|   | |||||||
| @@ -2137,7 +2137,8 @@ void do_check_cursorbind(void) | |||||||
|    * loop through the cursorbound windows |    * loop through the cursorbound windows | ||||||
|    */ |    */ | ||||||
|   VIsual_select = VIsual_active = 0; |   VIsual_select = VIsual_active = 0; | ||||||
|   for (curwin = firstwin; curwin; curwin = curwin->w_next) { |   FOR_ALL_WINDOWS_IN_TAB(wp, curtab) { | ||||||
|  |     curwin = wp; | ||||||
|     curbuf = curwin->w_buffer; |     curbuf = curwin->w_buffer; | ||||||
|     /* skip original window  and windows with 'noscrollbind' */ |     /* skip original window  and windows with 'noscrollbind' */ | ||||||
|     if (curwin != old_curwin && curwin->w_p_crb) { |     if (curwin != old_curwin && curwin->w_p_crb) { | ||||||
|   | |||||||
| @@ -3512,7 +3512,8 @@ void check_scrollbind(linenr_T topline_diff, long leftcol_diff) | |||||||
|    * loop through the scrollbound windows and scroll accordingly |    * loop through the scrollbound windows and scroll accordingly | ||||||
|    */ |    */ | ||||||
|   VIsual_select = VIsual_active = 0; |   VIsual_select = VIsual_active = 0; | ||||||
|   for (curwin = firstwin; curwin; curwin = curwin->w_next) { |   FOR_ALL_WINDOWS_IN_TAB(wp, curtab) { | ||||||
|  |     curwin = wp; | ||||||
|     curbuf = curwin->w_buffer; |     curbuf = curwin->w_buffer; | ||||||
|     /* skip original window  and windows with 'noscrollbind' */ |     /* skip original window  and windows with 'noscrollbind' */ | ||||||
|     if (curwin == old_curwin || !curwin->w_p_scb) { |     if (curwin == old_curwin || !curwin->w_p_scb) { | ||||||
|   | |||||||
| @@ -3623,7 +3623,8 @@ set_bool_option ( | |||||||
|       char_u hash[UNDO_HASH_SIZE]; |       char_u hash[UNDO_HASH_SIZE]; | ||||||
|       buf_T       *save_curbuf = curbuf; |       buf_T       *save_curbuf = curbuf; | ||||||
|  |  | ||||||
|       for (curbuf = firstbuf; curbuf != NULL; curbuf = curbuf->b_next) { |       FOR_ALL_BUFFERS(bp) { | ||||||
|  |         curbuf = bp; | ||||||
|         /* When 'undofile' is set globally: for every buffer, otherwise |         /* When 'undofile' is set globally: for every buffer, otherwise | ||||||
|          * only for the current buffer: Try to read in the undofile, |          * only for the current buffer: Try to read in the undofile, | ||||||
|          * if one exists, the buffer wasn't changed and the buffer was |          * if one exists, the buffer wasn't changed and the buffer was | ||||||
|   | |||||||
| @@ -73,7 +73,6 @@ void pum_display(pumitem_T *array, int size, int selected, bool array_changed) | |||||||
|   int above_row; |   int above_row; | ||||||
|   int below_row; |   int below_row; | ||||||
|   int redo_count = 0; |   int redo_count = 0; | ||||||
|   win_T *pvwin; |  | ||||||
|  |  | ||||||
|   if (!pum_is_visible) { |   if (!pum_is_visible) { | ||||||
|     // To keep the code simple, we only allow changing the |     // To keep the code simple, we only allow changing the | ||||||
| @@ -126,8 +125,10 @@ redo: | |||||||
|   kind_width = 0; |   kind_width = 0; | ||||||
|   extra_width = 0; |   extra_width = 0; | ||||||
|  |  | ||||||
|   FOR_ALL_WINDOWS(pvwin) { |   win_T *pvwin = NULL; | ||||||
|     if (pvwin->w_p_pvw) { |   FOR_ALL_WINDOWS_IN_TAB(wp, curtab) { | ||||||
|  |     if (wp->w_p_pvw) { | ||||||
|  |       pvwin = wp; | ||||||
|       break; |       break; | ||||||
|     } |     } | ||||||
|   } |   } | ||||||
|   | |||||||
| @@ -339,7 +339,7 @@ static int included_patches[] = { | |||||||
|   // 2104, |   // 2104, | ||||||
|   2103, |   2103, | ||||||
|   // 2102 NA |   // 2102 NA | ||||||
|   // 2101, |   2101, | ||||||
|   2100, |   2100, | ||||||
|   2099, |   2099, | ||||||
|   2098, |   2098, | ||||||
|   | |||||||
| @@ -161,9 +161,13 @@ newwindow: | |||||||
|  |  | ||||||
|   /* cursor to preview window */ |   /* cursor to preview window */ | ||||||
|   case 'P': |   case 'P': | ||||||
|     for (wp = firstwin; wp != NULL; wp = wp->w_next) |     wp = NULL; | ||||||
|       if (wp->w_p_pvw) |     FOR_ALL_WINDOWS_IN_TAB(wp2, curtab) { | ||||||
|  |       if (wp2->w_p_pvw) { | ||||||
|  |         wp = wp2; | ||||||
|         break; |         break; | ||||||
|  |       } | ||||||
|  |     } | ||||||
|     if (wp == NULL) |     if (wp == NULL) | ||||||
|       EMSG(_("E441: There is no preview window")); |       EMSG(_("E441: There is no preview window")); | ||||||
|     else |     else | ||||||
| @@ -3366,9 +3370,13 @@ void tabpage_move(int nr) | |||||||
|   if (curtab == first_tabpage) |   if (curtab == first_tabpage) | ||||||
|     first_tabpage = curtab->tp_next; |     first_tabpage = curtab->tp_next; | ||||||
|   else { |   else { | ||||||
|     for (tp = first_tabpage; tp != NULL; tp = tp->tp_next) |     tp = NULL; | ||||||
|       if (tp->tp_next == curtab) |     FOR_ALL_TABS(tp2) { | ||||||
|  |       if (tp2->tp_next == curtab) { | ||||||
|  |         tp = tp2; | ||||||
|         break; |         break; | ||||||
|  |       } | ||||||
|  |     } | ||||||
|     if (tp == NULL)     /* "cannot happen" */ |     if (tp == NULL)     /* "cannot happen" */ | ||||||
|       return; |       return; | ||||||
|     tp->tp_next = curtab->tp_next; |     tp->tp_next = curtab->tp_next; | ||||||
| @@ -5753,10 +5761,11 @@ int win_getid(typval_T *argvars) | |||||||
|     if (argvars[1].v_type == VAR_UNKNOWN) { |     if (argvars[1].v_type == VAR_UNKNOWN) { | ||||||
|       wp = firstwin; |       wp = firstwin; | ||||||
|     } else { |     } else { | ||||||
|       tabpage_T *tp; |       tabpage_T *tp = NULL; | ||||||
|       int tabnr = get_tv_number(&argvars[1]); |       int tabnr = get_tv_number(&argvars[1]); | ||||||
|       for (tp = first_tabpage; tp != NULL; tp = tp->tp_next) { |       FOR_ALL_TABS(tp2) { | ||||||
|         if (--tabnr == 0) { |         if (--tabnr == 0) { | ||||||
|  |           tp = tp2; | ||||||
|           break; |           break; | ||||||
|         } |         } | ||||||
|       } |       } | ||||||
| @@ -5833,11 +5842,10 @@ win_T * win_id2wp(typval_T *argvars) | |||||||
|  |  | ||||||
| int win_id2win(typval_T *argvars) | int win_id2win(typval_T *argvars) | ||||||
| { | { | ||||||
|   win_T   *wp; |  | ||||||
|   int nr = 1; |   int nr = 1; | ||||||
|   int id = get_tv_number(&argvars[0]); |   int id = get_tv_number(&argvars[0]); | ||||||
|  |  | ||||||
|   for (wp = firstwin; wp != NULL; wp = wp->w_next) { |   FOR_ALL_WINDOWS_IN_TAB(wp, curtab) { | ||||||
|     if (wp->handle == id) { |     if (wp->handle == id) { | ||||||
|       return nr; |       return nr; | ||||||
|     } |     } | ||||||
| @@ -5850,12 +5858,9 @@ void win_findbuf(typval_T *argvars, list_T *list) | |||||||
| { | { | ||||||
|   int bufnr = get_tv_number(&argvars[0]); |   int bufnr = get_tv_number(&argvars[0]); | ||||||
|  |  | ||||||
|   for (tabpage_T *tp = first_tabpage; tp != NULL; tp = tp->tp_next) { |   FOR_ALL_TAB_WINDOWS(tp, wp) { | ||||||
|     for (win_T *wp = tp == curtab ? firstwin : tp->tp_firstwin; |  | ||||||
|          wp != NULL; wp = wp->w_next) { |  | ||||||
|     if (wp->w_buffer->b_fnum == bufnr) { |     if (wp->w_buffer->b_fnum == bufnr) { | ||||||
|       list_append_number(list, wp->handle); |       list_append_number(list, wp->handle); | ||||||
|     } |     } | ||||||
|   } |   } | ||||||
| } | } | ||||||
| } |  | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user
	 James McCoy
					James McCoy