diff --git a/lua/definitions.lua b/lua/definitions.lua index d27a29e..d237c98 100644 --- a/lua/definitions.lua +++ b/lua/definitions.lua @@ -417,6 +417,9 @@ --- Enable/Disable custom list items ---@field enable boolean? --- +--- Indent size of list items +---@field indent_size number? +--- --- Number of characters to shift per level ---@field shift_width number? --- diff --git a/lua/markview.lua b/lua/markview.lua index b40d8ff..3409c8a 100644 --- a/lua/markview.lua +++ b/lua/markview.lua @@ -1379,6 +1379,9 @@ markview.configuration = { }, list_items = { + indent_size = 2, + shift_width = 4, + marker_minus = { add_padding = true, diff --git a/lua/markview/parser.lua b/lua/markview/parser.lua index 819452e..57d20e7 100644 --- a/lua/markview/parser.lua +++ b/lua/markview/parser.lua @@ -1,6 +1,8 @@ local parser = {}; -- local renderer = require("markview/renderer"); +parser.cached_conf = {}; + parser.fiter_lines = function (buffer, from, to) local captured_lines = vim.api.nvim_buf_get_lines(buffer, from, to, false); local filtered_lines = {}; @@ -709,6 +711,10 @@ parser.parse_range = function (buffer, config_table, from, to) local root_parser = vim.treesitter.get_parser(buffer); root_parser:parse(true); + if config_table then + parser.cached_conf = config_table; + end + -- Clear the previous contents parser.parsed_content = {}; diff --git a/lua/markview/renderer.lua b/lua/markview/renderer.lua index 6fa0c46..1f3f6e2 100644 --- a/lua/markview/renderer.lua +++ b/lua/markview/renderer.lua @@ -1496,7 +1496,7 @@ renderer.render_lists = function (buffer, content, config_table) ls_conf = config_table.marker_dot or {}; end - -- Do not render list types with no configuraton + -- Do not render list types with no configuration if not ls_conf then return; end @@ -1518,10 +1518,12 @@ renderer.render_lists = function (buffer, content, config_table) use_text = ""; end + local level = math.floor(before / (config_table.indent_size or 2)) + 1; + vim.api.nvim_buf_set_extmark(buffer, renderer.namespace, line_num, 0, { virt_text_pos = "inline", virt_text = { - { string.rep(" ", (math.floor(before / 2) + 1) * shift) }, + { string.rep(" ", level * shift) }, { vim.trim(use_text), set_hl(ls_conf.hl) or "Special" } }, @@ -1531,10 +1533,12 @@ renderer.render_lists = function (buffer, content, config_table) elseif vim.list_contains(content.list_candidates, l) then local line_len = vim.fn.strchars(line); + local level = math.floor(before / (config_table.indent_size or 2)) + 1; + vim.api.nvim_buf_set_extmark(buffer, renderer.namespace, line_num, 0, { virt_text_pos = "inline", virt_text = { - { string.rep(" ", (math.floor(before / 2) + 1) * shift) } + { string.rep(" ", level * shift) } }, end_col = line_len < before and line_len or before, diff --git a/markview.nvim.wiki b/markview.nvim.wiki index 1a52fa6..a2e6430 160000 --- a/markview.nvim.wiki +++ b/markview.nvim.wiki @@ -1 +1 @@ -Subproject commit 1a52fa6dfa2e18c88c650afff65e2ec122ce1ae2 +Subproject commit a2e64302a0620a8acc44be809ad1e00fcb066b87