mirror of
https://github.com/Myzel394/easytables.nvim.git
synced 2025-06-18 14:55:26 +02:00
feat: Add toggleable header
This commit is contained in:
parent
fa24b7f69f
commit
67a2a9e86b
@ -14,6 +14,7 @@ function M:create(cols, rows)
|
|||||||
col = 1,
|
col = 1,
|
||||||
row = 1,
|
row = 1,
|
||||||
}
|
}
|
||||||
|
self.header_enabled = true
|
||||||
|
|
||||||
return self
|
return self
|
||||||
end
|
end
|
||||||
@ -26,6 +27,10 @@ function M:value_at(row, col)
|
|||||||
return self.table[row][col]
|
return self.table[row][col]
|
||||||
end
|
end
|
||||||
|
|
||||||
|
function M:toggle_header()
|
||||||
|
self.header_enabled = not self.header_enabled
|
||||||
|
end
|
||||||
|
|
||||||
function M:get_largest_length_for_column(
|
function M:get_largest_length_for_column(
|
||||||
col, --[[ int ]]
|
col, --[[ int ]]
|
||||||
should_use_strwidth --[[ bool ]]
|
should_use_strwidth --[[ bool ]]
|
||||||
|
@ -13,7 +13,12 @@ DEFAULT_DRAW_REPRESENTATION_OPTIONS = {
|
|||||||
right_t = "┤",
|
right_t = "┤",
|
||||||
top_t = "┬",
|
top_t = "┬",
|
||||||
bottom_t = "┴",
|
bottom_t = "┴",
|
||||||
cross = "┼"
|
cross = "┼",
|
||||||
|
header_left_t = "╞",
|
||||||
|
header_right_t = "╡",
|
||||||
|
header_bottom_t = "╧",
|
||||||
|
header_cross = "╪",
|
||||||
|
header_horizontal = "═",
|
||||||
}
|
}
|
||||||
|
|
||||||
function create_horizontal_line(cell_widths, left, middle, right, middle_t)
|
function create_horizontal_line(cell_widths, left, middle, right, middle_t)
|
||||||
@ -56,6 +61,10 @@ function create_horizontal_divider(
|
|||||||
local top_t = options.top_t or DEFAULT_DRAW_REPRESENTATION_OPTIONS.top_t
|
local top_t = options.top_t or DEFAULT_DRAW_REPRESENTATION_OPTIONS.top_t
|
||||||
local bottom_t = options.bottom_t or DEFAULT_DRAW_REPRESENTATION_OPTIONS.bottom_t
|
local bottom_t = options.bottom_t or DEFAULT_DRAW_REPRESENTATION_OPTIONS.bottom_t
|
||||||
local cross = options.cross or DEFAULT_DRAW_REPRESENTATION_OPTIONS.cross
|
local cross = options.cross or DEFAULT_DRAW_REPRESENTATION_OPTIONS.cross
|
||||||
|
local header_left_t = options.header_left_t or DEFAULT_DRAW_REPRESENTATION_OPTIONS.header_left_t
|
||||||
|
local header_right_t = options.header_right_t or DEFAULT_DRAW_REPRESENTATION_OPTIONS.header_right_t
|
||||||
|
local header_cross = options.header_cross or DEFAULT_DRAW_REPRESENTATION_OPTIONS.header_cross
|
||||||
|
local header_horizontal = options.header_horizontal or DEFAULT_DRAW_REPRESENTATION_OPTIONS.header_horizontal
|
||||||
local min_width = options.min_width or DEFAULT_DRAW_REPRESENTATION_OPTIONS.min_width
|
local min_width = options.min_width or DEFAULT_DRAW_REPRESENTATION_OPTIONS.min_width
|
||||||
local variant = options.variant or "between"
|
local variant = options.variant or "between"
|
||||||
|
|
||||||
@ -67,10 +76,15 @@ function create_horizontal_divider(
|
|||||||
return create_horizontal_line(widths, left_t, horizontal, right_t, cross)
|
return create_horizontal_line(widths, left_t, horizontal, right_t, cross)
|
||||||
elseif variant == "bottom" then
|
elseif variant == "bottom" then
|
||||||
return create_horizontal_line(widths, bottom_left, horizontal, bottom_right, bottom_t)
|
return create_horizontal_line(widths, bottom_left, horizontal, bottom_right, bottom_t)
|
||||||
|
elseif variant == "header" then
|
||||||
|
return create_horizontal_line(widths, header_left_t, header_horizontal, header_right_t, header_cross)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
function table.draw_representation(table, options)
|
function table.draw_representation(
|
||||||
|
table, -- [[ table ]]
|
||||||
|
options -- [[ table ]] -- optional
|
||||||
|
)
|
||||||
local options = options or {}
|
local options = options or {}
|
||||||
local min_width = options.min_width or DEFAULT_DRAW_REPRESENTATION_OPTIONS.min_width
|
local min_width = options.min_width or DEFAULT_DRAW_REPRESENTATION_OPTIONS.min_width
|
||||||
local filler = options.filler or DEFAULT_DRAW_REPRESENTATION_OPTIONS.filler
|
local filler = options.filler or DEFAULT_DRAW_REPRESENTATION_OPTIONS.filler
|
||||||
@ -107,7 +121,9 @@ function table.draw_representation(table, options)
|
|||||||
|
|
||||||
representation[#representation + 1] = line
|
representation[#representation + 1] = line
|
||||||
|
|
||||||
if i ~= table:rows_amount() then
|
if i == 1 and table.header_enabled then
|
||||||
|
representation[#representation + 1] = create_horizontal_divider(table, { variant = "header" })
|
||||||
|
elseif i ~= table:rows_amount() then
|
||||||
representation[#representation + 1] = horizontal_divider
|
representation[#representation + 1] = horizontal_divider
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
@ -293,6 +293,16 @@ function M:register_listeners()
|
|||||||
end,
|
end,
|
||||||
{}
|
{}
|
||||||
)
|
)
|
||||||
|
|
||||||
|
vim.api.nvim_buf_create_user_command(
|
||||||
|
self.prompt_buffer,
|
||||||
|
"ToggleHeader",
|
||||||
|
function()
|
||||||
|
self.table:toggle_header()
|
||||||
|
self:draw_table()
|
||||||
|
end,
|
||||||
|
{}
|
||||||
|
)
|
||||||
end
|
end
|
||||||
|
|
||||||
return M
|
return M
|
||||||
|
Loading…
x
Reference in New Issue
Block a user