mirror of
				https://github.com/neovim/neovim.git
				synced 2025-11-04 09:44:31 +00:00 
			
		
		
		
	fix(float): make bufpos work properly with resized parent grid
This commit is contained in:
		@@ -966,18 +966,18 @@ void textpos2screenpos(win_T *wp, pos_T *pos, int *rowp, int *scolp, int *ccolp,
 | 
				
			|||||||
      // similar to what is done in validate_cursor_col()
 | 
					      // similar to what is done in validate_cursor_col()
 | 
				
			||||||
      colnr_T col = scol;
 | 
					      colnr_T col = scol;
 | 
				
			||||||
      col += off;
 | 
					      col += off;
 | 
				
			||||||
      int width = wp->w_width - off + win_col_off2(wp);
 | 
					      int width = wp->w_width_inner - off + win_col_off2(wp);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
      // long line wrapping, adjust row
 | 
					      // long line wrapping, adjust row
 | 
				
			||||||
      if (wp->w_p_wrap && col >= (colnr_T)wp->w_width && width > 0) {
 | 
					      if (wp->w_p_wrap && col >= (colnr_T)wp->w_width_inner && width > 0) {
 | 
				
			||||||
        // use same formula as what is used in curs_columns()
 | 
					        // use same formula as what is used in curs_columns()
 | 
				
			||||||
        rowoff = visible_row ? ((col - wp->w_width) / width + 1) : 0;
 | 
					        rowoff = visible_row ? ((col - wp->w_width_inner) / width + 1) : 0;
 | 
				
			||||||
        col -= rowoff * width;
 | 
					        col -= rowoff * width;
 | 
				
			||||||
      }
 | 
					      }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
      col -= wp->w_leftcol;
 | 
					      col -= wp->w_leftcol;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
      if (col >= 0 && col < wp->w_width && row + rowoff <= wp->w_height) {
 | 
					      if (col >= 0 && col < wp->w_width_inner && row + rowoff <= wp->w_height_inner) {
 | 
				
			||||||
        coloff = col - scol + (local ? 0 : wp->w_wincol + wp->w_wincol_off) + 1;
 | 
					        coloff = col - scol + (local ? 0 : wp->w_wincol + wp->w_wincol_off) + 1;
 | 
				
			||||||
        row += local ? 0 : wp->w_winrow + wp->w_winrow_off;
 | 
					        row += local ? 0 : wp->w_winrow + wp->w_winrow_off;
 | 
				
			||||||
      } else {
 | 
					      } else {
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -37,6 +37,8 @@ describe('ext_multigrid', function()
 | 
				
			|||||||
      [18] = {bold = true, foreground = Screen.colors.Magenta},
 | 
					      [18] = {bold = true, foreground = Screen.colors.Magenta},
 | 
				
			||||||
      [19] = {foreground = Screen.colors.Brown},
 | 
					      [19] = {foreground = Screen.colors.Brown},
 | 
				
			||||||
      [20] = {background = Screen.colors.LightGrey},
 | 
					      [20] = {background = Screen.colors.LightGrey},
 | 
				
			||||||
 | 
					      [21] = {background = Screen.colors.LightMagenta},
 | 
				
			||||||
 | 
					      [22] = {background = Screen.colors.LightMagenta, bold = true, foreground = Screen.colors.Blue},
 | 
				
			||||||
    })
 | 
					    })
 | 
				
			||||||
  end)
 | 
					  end)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -1060,6 +1062,107 @@ describe('ext_multigrid', function()
 | 
				
			|||||||
                                                             |
 | 
					                                                             |
 | 
				
			||||||
      ]]}
 | 
					      ]]}
 | 
				
			||||||
    end)
 | 
					    end)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    it('anchored float window "bufpos"', function()
 | 
				
			||||||
 | 
					      insert(('c'):rep(1111))
 | 
				
			||||||
 | 
					      screen:expect{grid=[[
 | 
				
			||||||
 | 
					      ## grid 1
 | 
				
			||||||
 | 
					        [2:-----------------------------------------------------]|
 | 
				
			||||||
 | 
					        [2:-----------------------------------------------------]|
 | 
				
			||||||
 | 
					        [2:-----------------------------------------------------]|
 | 
				
			||||||
 | 
					        [2:-----------------------------------------------------]|
 | 
				
			||||||
 | 
					        [2:-----------------------------------------------------]|
 | 
				
			||||||
 | 
					        [2:-----------------------------------------------------]|
 | 
				
			||||||
 | 
					        [2:-----------------------------------------------------]|
 | 
				
			||||||
 | 
					        [2:-----------------------------------------------------]|
 | 
				
			||||||
 | 
					        [2:-----------------------------------------------------]|
 | 
				
			||||||
 | 
					        [2:-----------------------------------------------------]|
 | 
				
			||||||
 | 
					        [2:-----------------------------------------------------]|
 | 
				
			||||||
 | 
					        [2:-----------------------------------------------------]|
 | 
				
			||||||
 | 
					        {11:[No Name] [+]                                        }|
 | 
				
			||||||
 | 
					        [3:-----------------------------------------------------]|
 | 
				
			||||||
 | 
					      ## grid 2
 | 
				
			||||||
 | 
					        cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc|
 | 
				
			||||||
 | 
					        cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc|
 | 
				
			||||||
 | 
					        cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc|
 | 
				
			||||||
 | 
					        cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc|
 | 
				
			||||||
 | 
					        cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc|
 | 
				
			||||||
 | 
					        cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc|
 | 
				
			||||||
 | 
					        cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc|
 | 
				
			||||||
 | 
					        cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc|
 | 
				
			||||||
 | 
					        cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc|
 | 
				
			||||||
 | 
					        cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc|
 | 
				
			||||||
 | 
					        cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc|
 | 
				
			||||||
 | 
					        cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc|
 | 
				
			||||||
 | 
					        cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc|
 | 
				
			||||||
 | 
					        cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc|
 | 
				
			||||||
 | 
					        cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc|
 | 
				
			||||||
 | 
					        cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc|
 | 
				
			||||||
 | 
					        cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc|
 | 
				
			||||||
 | 
					        cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc|
 | 
				
			||||||
 | 
					        cccccccccccccccccccccccccccccc^c                             |
 | 
				
			||||||
 | 
					        {1:~                                                           }|
 | 
				
			||||||
 | 
					      ## grid 3
 | 
				
			||||||
 | 
					                                                             |
 | 
				
			||||||
 | 
					      ]]}
 | 
				
			||||||
 | 
					      local float_buf = meths.create_buf(false, false)
 | 
				
			||||||
 | 
					      meths.open_win(float_buf, false, {
 | 
				
			||||||
 | 
					        relative = 'win',
 | 
				
			||||||
 | 
					        win = curwin(),
 | 
				
			||||||
 | 
					        bufpos = {0, 1018},
 | 
				
			||||||
 | 
					        anchor = 'SE',
 | 
				
			||||||
 | 
					        width = 5,
 | 
				
			||||||
 | 
					        height = 5,
 | 
				
			||||||
 | 
					      })
 | 
				
			||||||
 | 
					      screen:expect{grid=[[
 | 
				
			||||||
 | 
					      ## grid 1
 | 
				
			||||||
 | 
					        [2:-----------------------------------------------------]|
 | 
				
			||||||
 | 
					        [2:-----------------------------------------------------]|
 | 
				
			||||||
 | 
					        [2:-----------------------------------------------------]|
 | 
				
			||||||
 | 
					        [2:-----------------------------------------------------]|
 | 
				
			||||||
 | 
					        [2:-----------------------------------------------------]|
 | 
				
			||||||
 | 
					        [2:-----------------------------------------------------]|
 | 
				
			||||||
 | 
					        [2:-----------------------------------------------------]|
 | 
				
			||||||
 | 
					        [2:-----------------------------------------------------]|
 | 
				
			||||||
 | 
					        [2:-----------------------------------------------------]|
 | 
				
			||||||
 | 
					        [2:-----------------------------------------------------]|
 | 
				
			||||||
 | 
					        [2:-----------------------------------------------------]|
 | 
				
			||||||
 | 
					        [2:-----------------------------------------------------]|
 | 
				
			||||||
 | 
					        {11:[No Name] [+]                                        }|
 | 
				
			||||||
 | 
					        [3:-----------------------------------------------------]|
 | 
				
			||||||
 | 
					      ## grid 2
 | 
				
			||||||
 | 
					        cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc|
 | 
				
			||||||
 | 
					        cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc|
 | 
				
			||||||
 | 
					        cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc|
 | 
				
			||||||
 | 
					        cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc|
 | 
				
			||||||
 | 
					        cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc|
 | 
				
			||||||
 | 
					        cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc|
 | 
				
			||||||
 | 
					        cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc|
 | 
				
			||||||
 | 
					        cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc|
 | 
				
			||||||
 | 
					        cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc|
 | 
				
			||||||
 | 
					        cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc|
 | 
				
			||||||
 | 
					        cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc|
 | 
				
			||||||
 | 
					        cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc|
 | 
				
			||||||
 | 
					        cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc|
 | 
				
			||||||
 | 
					        cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc|
 | 
				
			||||||
 | 
					        cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc|
 | 
				
			||||||
 | 
					        cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc|
 | 
				
			||||||
 | 
					        cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc|
 | 
				
			||||||
 | 
					        cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc|
 | 
				
			||||||
 | 
					        cccccccccccccccccccccccccccccc^c                             |
 | 
				
			||||||
 | 
					        {1:~                                                           }|
 | 
				
			||||||
 | 
					      ## grid 3
 | 
				
			||||||
 | 
					                                                             |
 | 
				
			||||||
 | 
					      ## grid 4
 | 
				
			||||||
 | 
					        {21:     }|
 | 
				
			||||||
 | 
					        {22:~    }|
 | 
				
			||||||
 | 
					        {22:~    }|
 | 
				
			||||||
 | 
					        {22:~    }|
 | 
				
			||||||
 | 
					        {22:~    }|
 | 
				
			||||||
 | 
					      ]], float_pos={
 | 
				
			||||||
 | 
					        [4] = {{id = 1001}, "SE", 2, 16, 58, true, 50};
 | 
				
			||||||
 | 
					      }}
 | 
				
			||||||
 | 
					    end)
 | 
				
			||||||
  end)
 | 
					  end)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  it('multiline messages scroll over windows', function()
 | 
					  it('multiline messages scroll over windows', function()
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user