diff src/evalvars.c @ 29448:8f1e16995118 v9.0.0066

patch 9.0.0066: switching window uneccarily when getting buffer options Commit: https://github.com/vim/vim/commit/cd6ad6439da2ee2d1a8a6934c9d69e9c2664ba55 Author: zeertzjq <zeertzjq@outlook.com> Date: Mon Jul 25 12:28:09 2022 +0100 patch 9.0.0066: switching window uneccarily when getting buffer options Problem: Switching window uneccarily when getting buffer options. Solution: Do not switch window when getting buffer options. (closes https://github.com/vim/vim/issues/10767)
author Bram Moolenaar <Bram@vim.org>
date Mon, 25 Jul 2022 13:30:05 +0200
parents a74398c432a4
children 9908c07ccb56
line wrap: on
line diff
--- a/src/evalvars.c
+++ b/src/evalvars.c
@@ -4098,6 +4098,7 @@ get_var_from(
     int		done = FALSE;
     switchwin_T	switchwin;
     int		need_switch_win;
+    int		do_change_curbuf = buf != NULL && htname == 'b';
 
     ++emsg_off;
 
@@ -4112,7 +4113,7 @@ get_var_from(
 	// autocommands get blocked.
 	// If we have a buffer reference avoid the switching, we're saving and
 	// restoring curbuf directly.
-	need_switch_win = !(tp == curtab && win == curwin) || (buf != NULL);
+	need_switch_win = !(tp == curtab && win == curwin) && !do_change_curbuf;
 	if (!need_switch_win || switch_win(&switchwin, win, tp, TRUE) == OK)
 	{
 	    // Handle options. There are no tab-local options.
@@ -4121,12 +4122,12 @@ get_var_from(
 		buf_T	*save_curbuf = curbuf;
 
 		// Change curbuf so the option is read from the correct buffer.
-		if (buf != NULL && htname == 'b')
+		if (do_change_curbuf)
 		    curbuf = buf;
 
 		if (varname[1] == NUL)
 		{
-		    // get all window-local options in a dict
+		    // get all window-local or buffer-local options in a dict
 		    dict_T	*opts = get_winbuf_options(htname == 'b');
 
 		    if (opts != NULL)