mirror of
https://github.com/Myzel394/easytables.nvim.git
synced 2025-06-18 14:55:26 +02:00
feat: Add basic export support
This commit is contained in:
parent
67a2a9e86b
commit
f5a9a3cdcf
61
lua/easytables/export.lua
Normal file
61
lua/easytables/export.lua
Normal file
@ -0,0 +1,61 @@
|
|||||||
|
local M = {}
|
||||||
|
|
||||||
|
---comment
|
||||||
|
---@param content string
|
||||||
|
---@param width number
|
||||||
|
---@return table
|
||||||
|
function M:export_cell(content, width)
|
||||||
|
return "| " .. content .. string.rep(" ", width - #content) .. " "
|
||||||
|
end
|
||||||
|
|
||||||
|
---Exports a line to a string
|
||||||
|
---@param line table Cells divided into columns
|
||||||
|
---@param widths table Width of each column
|
||||||
|
---@return string
|
||||||
|
function M:export_line(line, widths)
|
||||||
|
local str = ""
|
||||||
|
|
||||||
|
for i, cell in ipairs(line) do
|
||||||
|
local width = widths[i]
|
||||||
|
|
||||||
|
str = str .. self:export_cell(cell, width)
|
||||||
|
end
|
||||||
|
|
||||||
|
return str .. "|"
|
||||||
|
end
|
||||||
|
|
||||||
|
---comment
|
||||||
|
---@param widths table
|
||||||
|
---@return string
|
||||||
|
function M:create_header_line(widths)
|
||||||
|
local str = ""
|
||||||
|
|
||||||
|
-- No idea why, but "ipairs" is required otherwise lua complains
|
||||||
|
for _, width in ipairs(widths) do
|
||||||
|
str = str .. "|" .. string.rep("-", width + 2)
|
||||||
|
end
|
||||||
|
|
||||||
|
return str .. "|"
|
||||||
|
end
|
||||||
|
|
||||||
|
---comment
|
||||||
|
---@return table
|
||||||
|
function M:export_table(
|
||||||
|
table
|
||||||
|
)
|
||||||
|
local representation = {}
|
||||||
|
|
||||||
|
local widths = table:get_widths_for_columns(1)
|
||||||
|
|
||||||
|
for i, line in ipairs(table.table) do
|
||||||
|
representation[#representation + 1] = self:export_line(line, widths)
|
||||||
|
|
||||||
|
if i == 1 and table.header_enabled then
|
||||||
|
representation[#representation + 1] = self:create_header_line(widths)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
return representation
|
||||||
|
end
|
||||||
|
|
||||||
|
return M
|
@ -1,4 +1,5 @@
|
|||||||
local table_builder = require("easytables.tablebuilder")
|
local table_builder = require("easytables.tablebuilder")
|
||||||
|
local export = require("easytables.export")
|
||||||
local math = require("math")
|
local math = require("math")
|
||||||
|
|
||||||
local M = {}
|
local M = {}
|
||||||
@ -20,6 +21,7 @@ function M:create(table, options)
|
|||||||
self.height = options.height or DEFAULT_OPTIONS.height
|
self.height = options.height or DEFAULT_OPTIONS.height
|
||||||
self.min_value_width = options.min_value_width or DEFAULT_OPTIONS.min_value_width
|
self.min_value_width = options.min_value_width or DEFAULT_OPTIONS.min_value_width
|
||||||
self.table = table
|
self.table = table
|
||||||
|
self.previous_buffer = vim.api.nvim_get_current_buf()
|
||||||
|
|
||||||
return self
|
return self
|
||||||
end
|
end
|
||||||
@ -142,6 +144,14 @@ function M:draw_table()
|
|||||||
self:_draw_highlight()
|
self:_draw_highlight()
|
||||||
end
|
end
|
||||||
|
|
||||||
|
function M:close()
|
||||||
|
vim.api.nvim_win_close(self.preview_window, true)
|
||||||
|
vim.api.nvim_win_close(self.prompt_window, true)
|
||||||
|
|
||||||
|
self.preview_window = nil
|
||||||
|
self.prompt_window = nil
|
||||||
|
end
|
||||||
|
|
||||||
function M:register_listeners()
|
function M:register_listeners()
|
||||||
vim.api.nvim_buf_attach(self.prompt_buffer, false, {
|
vim.api.nvim_buf_attach(self.prompt_buffer, false, {
|
||||||
on_lines = function(_, handle)
|
on_lines = function(_, handle)
|
||||||
@ -303,6 +313,27 @@ function M:register_listeners()
|
|||||||
end,
|
end,
|
||||||
{}
|
{}
|
||||||
)
|
)
|
||||||
|
|
||||||
|
vim.api.nvim_buf_create_user_command(
|
||||||
|
self.prompt_buffer,
|
||||||
|
"ExportTable",
|
||||||
|
function()
|
||||||
|
local markdown_table = export:export_table(self.table)
|
||||||
|
|
||||||
|
self:close()
|
||||||
|
vim.schedule(function()
|
||||||
|
vim.api.nvim_buf_set_text(
|
||||||
|
self.previous_buffer,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
markdown_table
|
||||||
|
)
|
||||||
|
end)
|
||||||
|
end,
|
||||||
|
{}
|
||||||
|
)
|
||||||
end
|
end
|
||||||
|
|
||||||
return M
|
return M
|
||||||
|
Loading…
x
Reference in New Issue
Block a user