fix(sidebar): account for sidebar header on/off for selected code
Current implementation always says that first 5 lines of code is shown when selected code does not fully fit into its window. This is not correct as the window can be resized, may have a header occupying one line, and the lines may not be the first ones. Also the wording is awkward. Correct these issues by checking current window height, accounting for the potential header presence by checking sidebar.enabled config flag, and updating the message format to be more concise: " Selected Code (4/15 lines)" While at it switch to using Utils.count_lines() which does not need creating temporary tables. Note that this does not deal with the header info being stale after resizing sidebar windows.
This commit is contained in:
@@ -1017,23 +1017,15 @@ function Sidebar:render_input(ask)
|
|||||||
end
|
end
|
||||||
|
|
||||||
function Sidebar:render_selected_code()
|
function Sidebar:render_selected_code()
|
||||||
|
if not self.code.selection then return end
|
||||||
if not Utils.is_valid_container(self.containers.selected_code) then return end
|
if not Utils.is_valid_container(self.containers.selected_code) then return end
|
||||||
|
|
||||||
local selected_code_lines_count = 0
|
local count = Utils.count_lines(self.code.selection.content)
|
||||||
local selected_code_max_lines_count = 5
|
local max_shown = api.nvim_win_get_height(self.containers.selected_code.winid)
|
||||||
|
if Config.windows.sidebar_header.enabled then max_shown = max_shown - 1 end
|
||||||
|
|
||||||
if self.code.selection ~= nil then
|
local header_text = Utils.icon(" ") .. "Selected Code"
|
||||||
local selected_code_lines = vim.split(self.code.selection.content, "\n")
|
if max_shown < count then header_text = string.format("%s (%d/%d lines)", header_text, max_shown, count) end
|
||||||
selected_code_lines_count = #selected_code_lines
|
|
||||||
end
|
|
||||||
|
|
||||||
local header_text = Utils.icon(" ")
|
|
||||||
.. "Selected Code"
|
|
||||||
.. (
|
|
||||||
selected_code_lines_count > selected_code_max_lines_count
|
|
||||||
and " (Show only the first " .. tostring(selected_code_max_lines_count) .. " lines)"
|
|
||||||
or ""
|
|
||||||
)
|
|
||||||
|
|
||||||
self:render_header(
|
self:render_header(
|
||||||
self.containers.selected_code.winid,
|
self.containers.selected_code.winid,
|
||||||
@@ -2816,17 +2808,14 @@ function Sidebar:get_input_value()
|
|||||||
end
|
end
|
||||||
|
|
||||||
function Sidebar:get_selected_code_container_height()
|
function Sidebar:get_selected_code_container_height()
|
||||||
local selected_code_max_lines_count = 5
|
if not self.code.selection then return 0 end
|
||||||
|
|
||||||
local selected_code_size = 0
|
local max_height = 5
|
||||||
|
|
||||||
if self.code.selection ~= nil then
|
local count = Utils.count_lines(self.code.selection.content)
|
||||||
local selected_code_lines = vim.split(self.code.selection.content, "\n")
|
if Config.windows.sidebar_header.enabled then count = count + 1 end
|
||||||
local selected_code_lines_count = #selected_code_lines + 1
|
|
||||||
selected_code_size = math.min(selected_code_lines_count, selected_code_max_lines_count)
|
|
||||||
end
|
|
||||||
|
|
||||||
return selected_code_size
|
return math.min(count, max_height)
|
||||||
end
|
end
|
||||||
|
|
||||||
function Sidebar:get_todos_container_height()
|
function Sidebar:get_todos_container_height()
|
||||||
|
|||||||
Reference in New Issue
Block a user