1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
|
-- In-buffer markdown rendering: headings, code blocks, tables, callouts and
-- checkboxes rendered in place, in the one buffer. No preview window or split.
-- The cursor line keeps its raw syntax (the plugin's anti_conceal), so editing
-- is unaffected. <leader>mt toggles rendering for the current buffer.
return {
{
"MeanderingProgrammer/render-markdown.nvim",
ft = { "markdown" },
dependencies = { "nvim-tree/nvim-web-devicons" },
opts = {},
config = function(_, opts)
require("render-markdown").setup(opts)
-- render-markdown takes its per-level heading colours from the
-- treesitter captures @markup.heading.{1..6}.markdown. None of the
-- colourschemes under config/nvim/colors/ define treesitter groups
-- at all -- happy_hacking, onehalfdark and ayu were each checked --
-- so those captures resolve to nothing and every heading level
-- renders with no colour. Supply a ramp, but only where the theme
-- left the group undefined, so a theme that does define them keeps
-- its own. Re-applied on ColorScheme, since cfg-watch switches the
-- theme at runtime and `:colorscheme` can clear highlight groups.
local ramps = {
dark = {
{ "#F3F2CC", 230 },
{ "#FAD566", 221 },
{ "#B3EBBF", 157 },
{ "#81A2C7", 103 },
{ "#F77EBD", 211 },
{ "#fcb280", 179 },
},
light = {
{ "#2F2F2F", 236 },
{ "#8C6D1F", 136 },
{ "#3F6B3F", 22 },
{ "#3A5A8C", 24 },
{ "#8C3A6B", 89 },
{ "#8C5A2F", 130 },
},
}
local function set_heading_colors()
local ramp = ramps[vim.o.background] or ramps.dark
for level = 1, 6 do
local name = "RenderMarkdownH" .. level
-- Put render-markdown's own link back first, so a theme that
-- does define the capture wins, and so this stays correct
-- after a theme switch.
vim.api.nvim_set_hl(0, name, { link = "@markup.heading." .. level .. ".markdown" })
local hl = vim.api.nvim_get_hl(0, { name = name })
if not (hl.fg or hl.bg or hl.bold or hl.italic or hl.underline) then
vim.api.nvim_set_hl(0, name, {
fg = ramp[level][1],
ctermfg = ramp[level][2],
bold = true,
})
end
end
end
set_heading_colors()
vim.api.nvim_create_autocmd("ColorScheme", { callback = set_heading_colors })
vim.api.nvim_create_autocmd("FileType", {
pattern = "markdown",
callback = function(event)
vim.keymap.set("n", "<leader>mt", "<cmd>RenderMarkdown buf_toggle<cr>", {
buffer = event.buf,
desc = "Toggle markdown rendering",
})
end,
})
end,
},
}
|