chore: refine creating floating win (#182)
This commit is contained in:
		
							parent
							
								
									4693da8757
								
							
						
					
					
						commit
						f2173c9a3c
					
				@ -24,13 +24,13 @@ setmetatable(FloatingWindow, {
 | 
				
			|||||||
  end,
 | 
					  end,
 | 
				
			||||||
})
 | 
					})
 | 
				
			||||||
 | 
					
 | 
				
			||||||
---@class opts
 | 
					---@class FloatingWindowOptions
 | 
				
			||||||
---@field enter? boolean
 | 
					---@field enter? boolean
 | 
				
			||||||
---@field buf_options? table<string, any>
 | 
					---@field buf_options? table<string, any>
 | 
				
			||||||
---@field win_options? table<string, any>
 | 
					---@field win_options? table<string, any>
 | 
				
			||||||
---@field float_options? table<string, any>
 | 
					---@field float_options? table<string, any>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
---@param opts opts
 | 
					---@param opts FloatingWindowOptions
 | 
				
			||||||
---@return FloatingWindow
 | 
					---@return FloatingWindow
 | 
				
			||||||
function FloatingWindow.new(opts)
 | 
					function FloatingWindow.new(opts)
 | 
				
			||||||
  local instance = setmetatable({}, FloatingWindow)
 | 
					  local instance = setmetatable({}, FloatingWindow)
 | 
				
			||||||
@ -47,7 +47,7 @@ function FloatingWindow.new(opts)
 | 
				
			|||||||
end
 | 
					end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
---@param split_winid integer
 | 
					---@param split_winid integer
 | 
				
			||||||
---@param opts opts
 | 
					---@param opts FloatingWindowOptions
 | 
				
			||||||
---@return FloatingWindow
 | 
					---@return FloatingWindow
 | 
				
			||||||
function FloatingWindow.from_split_win(split_winid, opts)
 | 
					function FloatingWindow.from_split_win(split_winid, opts)
 | 
				
			||||||
  local split_win_width = api.nvim_win_get_width(split_winid)
 | 
					  local split_win_width = api.nvim_win_get_width(split_winid)
 | 
				
			||||||
 | 
				
			|||||||
@ -1307,15 +1307,22 @@ function Sidebar:get_selected_code_size()
 | 
				
			|||||||
  return selected_code_size
 | 
					  return selected_code_size
 | 
				
			||||||
end
 | 
					end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
local function create_floating_window_for_split(split_winid, buf_opts, win_opts, float_opts)
 | 
					---@class CreateFloatingWindowForSplitOptions
 | 
				
			||||||
  local win_opts_ = vim.tbl_deep_extend("force", get_win_options(), win_opts or {})
 | 
					---@field split_winid integer | nil
 | 
				
			||||||
 | 
					---@field buf_opts table | nil
 | 
				
			||||||
 | 
					---@field win_opts table | nil
 | 
				
			||||||
 | 
					---@field float_opts table | nil
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  local buf_opts_ = vim.tbl_deep_extend("force", buf_options, buf_opts or {})
 | 
					---@param opts CreateFloatingWindowForSplitOptions
 | 
				
			||||||
 | 
					local function create_floating_window_for_split(opts)
 | 
				
			||||||
 | 
					  local win_opts_ = vim.tbl_deep_extend("force", get_win_options(), opts.win_opts or {})
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  local floating_win = FloatingWindow.from_split_win(split_winid, {
 | 
					  local buf_opts_ = vim.tbl_deep_extend("force", buf_options, opts.buf_opts or {})
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  local floating_win = FloatingWindow.from_split_win(opts.split_winid, {
 | 
				
			||||||
    buf_options = buf_opts_,
 | 
					    buf_options = buf_opts_,
 | 
				
			||||||
    win_options = win_opts_,
 | 
					    win_options = win_opts_,
 | 
				
			||||||
    float_options = float_opts,
 | 
					    float_options = opts.float_opts,
 | 
				
			||||||
  })
 | 
					  })
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  return floating_win
 | 
					  return floating_win
 | 
				
			||||||
@ -1339,20 +1346,19 @@ function Sidebar:render()
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
  self.result_container:mount()
 | 
					  self.result_container:mount()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  self.result = create_floating_window_for_split(
 | 
					  self.result = create_floating_window_for_split({
 | 
				
			||||||
    self.result_container.winid,
 | 
					    split_winid = self.result_container.winid,
 | 
				
			||||||
    {
 | 
					    buf_opts = {
 | 
				
			||||||
      modifiable = false,
 | 
					      modifiable = false,
 | 
				
			||||||
      swapfile = false,
 | 
					      swapfile = false,
 | 
				
			||||||
      buftype = "nofile",
 | 
					      buftype = "nofile",
 | 
				
			||||||
      bufhidden = "wipe",
 | 
					      bufhidden = "wipe",
 | 
				
			||||||
      filetype = "Avante",
 | 
					      filetype = "Avante",
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
    nil,
 | 
					    float_opts = {
 | 
				
			||||||
    {
 | 
					 | 
				
			||||||
      height = math.max(0, sidebar_height - selected_code_size - 9),
 | 
					      height = math.max(0, sidebar_height - selected_code_size - 9),
 | 
				
			||||||
    }
 | 
					    },
 | 
				
			||||||
  )
 | 
					  })
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  self.result:on(event.BufWinEnter, function()
 | 
					  self.result:on(event.BufWinEnter, function()
 | 
				
			||||||
    xpcall(function()
 | 
					    xpcall(function()
 | 
				
			||||||
@ -1411,7 +1417,7 @@ function Sidebar:render()
 | 
				
			|||||||
      },
 | 
					      },
 | 
				
			||||||
    })
 | 
					    })
 | 
				
			||||||
    self.selected_code_container:mount()
 | 
					    self.selected_code_container:mount()
 | 
				
			||||||
    self.selected_code = create_floating_window_for_split(self.selected_code_container.winid)
 | 
					    self.selected_code = create_floating_window_for_split({ split_winid = self.selected_code_container.winid })
 | 
				
			||||||
    self.selected_code:mount()
 | 
					    self.selected_code:mount()
 | 
				
			||||||
  end
 | 
					  end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user