mirror of
				https://github.com/neovim/neovim.git
				synced 2025-10-26 12:27:24 +00:00 
			
		
		
		
	fix(autocmd): 'cmdheight' OptionSet with valid window grids (#34619)
Problem:  OptionSet autocmd emitted with invalid grids after entering
          tabpage with different 'cmdheight'.
Solution: First call `tabpage_check_windows()` before changing 'cmdheight'.
          Add a test that exercises the `vim._extui` cmdline.
			
			
This commit is contained in:
		| @@ -4441,6 +4441,8 @@ static void enter_tabpage(tabpage_T *tp, buf_T *old_curbuf, bool trigger_enter_a | ||||
|  | ||||
|   use_tabpage(tp); | ||||
|  | ||||
|   if (old_curtab != curtab) { | ||||
|     tabpage_check_windows(old_curtab); | ||||
|     if (p_ch != curtab->tp_ch_used) { | ||||
|       // Use the stored value of p_ch, so that it can be different for each tab page. | ||||
|       // Handle other side-effects but avoid setting frame sizes, which are still correct. | ||||
| @@ -4450,9 +4452,6 @@ static void enter_tabpage(tabpage_T *tp, buf_T *old_curbuf, bool trigger_enter_a | ||||
|       set_option_value(kOptCmdheight, NUMBER_OPTVAL(new_ch), 0); | ||||
|       command_frame_height = true; | ||||
|     } | ||||
|  | ||||
|   if (old_curtab != curtab) { | ||||
|     tabpage_check_windows(old_curtab); | ||||
|   } | ||||
|  | ||||
|   // We would like doing the TabEnter event first, but we don't have a | ||||
|   | ||||
							
								
								
									
										46
									
								
								test/functional/ui/cmdline2_spec.lua
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										46
									
								
								test/functional/ui/cmdline2_spec.lua
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,46 @@ | ||||
| -- Tests for (protocol-driven) ui2, intended to replace the legacy message grid UI. | ||||
|  | ||||
| local n = require('test.functional.testnvim')() | ||||
| local Screen = require('test.functional.ui.screen') | ||||
|  | ||||
| local clear, exec, exec_lua, feed = n.clear, n.exec, n.exec_lua, n.feed | ||||
|  | ||||
| describe('cmdline2', function() | ||||
|   local screen | ||||
|   before_each(function() | ||||
|     clear() | ||||
|     screen = Screen.new() | ||||
|     screen:add_extra_attr_ids({ | ||||
|       [100] = { foreground = Screen.colors.Magenta1, bold = true }, | ||||
|     }) | ||||
|     exec_lua(function() | ||||
|       require('vim._extui').enable({}) | ||||
|     end) | ||||
|   end) | ||||
|  | ||||
|   it("no crash for invalid grid after 'cmdheight' OptionSet", function() | ||||
|     exec('tabnew | tabprev') | ||||
|     feed(':set ch=0') | ||||
|     screen:expect([[ | ||||
|       {5: }{100:2}{5: [No Name] }{24: [No Name] }{2:                            }{24:X}| | ||||
|                                                            | | ||||
|       {1:~                                                    }|*11 | ||||
|       {16::}{15:set} {16:ch}{15:=}0^                                            | | ||||
|     ]]) | ||||
|     feed('<CR>') | ||||
|     exec('tabnext') | ||||
|     screen:expect([[ | ||||
|       {24: [No Name] }{5: }{100:2}{5: [No Name] }{2:                            }{24:X}| | ||||
|       ^                                                     | | ||||
|       {1:~                                                    }|*11 | ||||
|       {16::}{15:set} {16:ch}{15:=}0                                            | | ||||
|     ]]) | ||||
|     exec('tabnext') | ||||
|     screen:expect([[ | ||||
|       {5: }{100:2}{5: [No Name] }{24: [No Name] }{2:                            }{24:X}| | ||||
|       ^                                                     | | ||||
|       {1:~                                                    }|*12 | ||||
|     ]]) | ||||
|     n.assert_alive() | ||||
|   end) | ||||
| end) | ||||
| @@ -1,3 +1,5 @@ | ||||
| -- Tests for (protocol-driven) ui2, intended to replace the legacy message grid UI. | ||||
|  | ||||
| local n = require('test.functional.testnvim')() | ||||
| local Screen = require('test.functional.ui.screen') | ||||
|  | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 luukvbaal
					luukvbaal