diff src/buffer.c @ 13931:fc03fabbedc5 v8.0.1836

patch 8.0.1836: buffer-local window options may not be recent commit https://github.com/vim/vim/commit/25782a7ff4755daf16c2e1cb5e5f826b13b672ce Author: Bram Moolenaar <Bram@vim.org> Date: Sun May 13 18:05:33 2018 +0200 patch 8.0.1836: buffer-local window options may not be recent Problem: Buffer-local window options may not be recent if the buffer is still open in another window. Solution: Copy the options from the window instead of the outdated window options. (Bjorn Linse, closes #2336)
author Christian Brabandt <cb@256bit.org>
date Sun, 13 May 2018 18:15:05 +0200
parents 3be5e8306a3e
children dc67449d648c
line wrap: on
line diff
--- a/src/buffer.c
+++ b/src/buffer.c
@@ -2895,8 +2895,23 @@ get_winopts(buf_T *buf)
 #endif
 
     wip = find_wininfo(buf, TRUE);
-    if (wip != NULL && wip->wi_optset)
+    if (wip != NULL && wip->wi_win != NULL
+	    && wip->wi_win != curwin && wip->wi_win->w_buffer == buf)
     {
+	/* The buffer is currently displayed in the window: use the actual
+	 * option values instead of the saved (possibly outdated) values. */
+	win_T *wp = wip->wi_win;
+
+	copy_winopt(&wp->w_onebuf_opt, &curwin->w_onebuf_opt);
+#ifdef FEAT_FOLDING
+	curwin->w_fold_manual = wp->w_fold_manual;
+	curwin->w_foldinvalid = TRUE;
+	cloneFoldGrowArray(&wp->w_folds, &curwin->w_folds);
+#endif
+    }
+    else if (wip != NULL && wip->wi_optset)
+    {
+	/* the buffer was displayed in the current window earlier */
 	copy_winopt(&wip->wi_opt, &curwin->w_onebuf_opt);
 #ifdef FEAT_FOLDING
 	curwin->w_fold_manual = wip->wi_fold_manual;