Skip to content

Commit c00870e

Browse files
committed
feat(experimental): Added option to prevent org_ondent's from being hidden
Closes #360
1 parent a225dcb commit c00870e

File tree

5 files changed

+47
-5
lines changed

5 files changed

+47
-5
lines changed

lua/definitions/experimental.lua

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,3 +12,5 @@
1212
---@field list_empty_line_tolerance integer Maximum number of empty lines that can stay between text of a list item.
1313
---
1414
---@field read_chunk_size integer Number of `bytes` to check before opening a link. Used for detecting when to open files inside Neovim.
15+
---
16+
---@field linewise_ignore_org_indent? boolean Prevents indentation of sections from being cleared in `linewise_hybrid_mode`.

lua/markview.lua

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -322,7 +322,8 @@ markview.render = function (buffer, state, config)
322322

323323
renderer.clear(buffer,
324324
math.max(0, cursor[1] - edit_range[1]),
325-
math.min(cursor[1] + 1 + edit_range[2], line_count)
325+
math.min(cursor[1] + 1 + edit_range[2], line_count),
326+
true
326327
);
327328
end
328329
else

lua/markview/renderer.lua

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -475,7 +475,8 @@ end
475475
---@param buffer integer
476476
---@param from? integer
477477
---@param to? integer
478-
renderer.clear = function (buffer, from, to)
478+
---@param hybrid_mode? boolean
479+
renderer.clear = function (buffer, from, to, hybrid_mode)
479480
---|fS
480481

481482
local _renderers = {
@@ -502,7 +503,7 @@ renderer.clear = function (buffer, from, to)
502503

503504
for _, lang in ipairs(langs) do
504505
if _renderers[lang] then
505-
_renderers[lang].clear(buffer, from, to);
506+
_renderers[lang].clear(buffer, from, to, hybrid_mode);
506507
end
507508
end
508509

lua/markview/renderers/markdown.lua

Lines changed: 37 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3724,8 +3724,43 @@ end
37243724
---@param buffer integer
37253725
---@param from integer?
37263726
---@param to integer?
3727-
markdown.clear = function (buffer, from, to)
3728-
vim.api.nvim_buf_clear_namespace(buffer, markdown.ns, from or 0, to or -1);
3727+
---@param hybrid_mode boolean
3728+
markdown.clear = function (buffer, from, to, hybrid_mode)
3729+
---@type boolean
3730+
local experimental = require("markview.spec").get({ "experimental", "linewise_ignore_org_indent" }, { fallback = false });
3731+
3732+
if not experimental or not hybrid_mode then
3733+
vim.api.nvim_buf_clear_namespace(buffer, markdown.ns, from or 0, to or -1);
3734+
return;
3735+
end
3736+
3737+
--- Extmarks in this range.
3738+
local exts = vim.api.nvim_buf_get_extmarks(buffer, markdown.ns, { from or 0, 0 }, { to and (to - 1) or -1, -1 }, { type = "virt_text" });
3739+
3740+
for _, ext in ipairs(exts) do
3741+
local _ext = vim.api.nvim_buf_get_extmark_by_id(buffer, markdown.ns, ext[1], { details = true });
3742+
3743+
local col = _ext[2];
3744+
local detail = _ext[3];
3745+
3746+
if detail then
3747+
local pos = detail.virt_text_pos;
3748+
local virt_text = detail.virt_text;
3749+
3750+
local conceal = detail.conceal;
3751+
3752+
if
3753+
col == 0 and virt_text and ( not conceal and pos == "inline" ) and -- Check if it's a space/border type extmark.
3754+
#virt_text == 1 and string.match(virt_text[1][1], "^%s+$") -- Check if it's an org indent border.
3755+
then
3756+
goto ignore;
3757+
end
3758+
end
3759+
3760+
vim.api.nvim_buf_del_extmark(buffer, markdown.ns, ext[1]);
3761+
3762+
::ignore::
3763+
end
37293764
end
37303765

37313766
return markdown;

lua/markview/spec.lua

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -140,6 +140,9 @@ spec.default = {
140140
list_empty_line_tolerance = 3,
141141

142142
read_chunk_size = 1024,
143+
144+
145+
linewise_ignore_org_indent = false
143146
};
144147

145148
highlight_groups = {},

0 commit comments

Comments
 (0)