@@ -12,13 +12,14 @@ local M = {}
12
12
13
13
local SIGN_GROUP = " NvimTreeRendererSigns"
14
14
15
- local namespace_id = vim .api .nvim_create_namespace " NvimTreeHighlights"
15
+ local namespace_highlights_id = vim .api .nvim_create_namespace " NvimTreeHighlights"
16
+ local namespace_extmarks_id = vim .api .nvim_create_namespace " NvimTreeExtmarks"
16
17
17
18
--- @param bufnr number
18
19
--- @param lines string[]
19
20
--- @param hl_args AddHighlightArgs[]
20
21
--- @param signs string[]
21
- local function _draw (bufnr , lines , hl_args , signs )
22
+ local function _draw (bufnr , lines , hl_args , signs , extmarks )
22
23
if vim .fn .has " nvim-0.10" == 1 then
23
24
vim .api .nvim_set_option_value (" modifiable" , true , { buf = bufnr })
24
25
else
@@ -38,17 +39,28 @@ local function _draw(bufnr, lines, hl_args, signs)
38
39
for i , sign_name in pairs (signs ) do
39
40
vim .fn .sign_place (0 , SIGN_GROUP , sign_name , bufnr , { lnum = i + 1 })
40
41
end
42
+
43
+ vim .api .nvim_buf_clear_namespace (bufnr , namespace_extmarks_id , 0 , - 1 )
44
+ for i , extname in pairs (extmarks ) do
45
+ for _ , mark in ipairs (extname ) do
46
+ vim .api .nvim_buf_set_extmark (bufnr , namespace_extmarks_id , i , - 1 , {
47
+ virt_text = { { mark .str , mark .hl } },
48
+ virt_text_pos = " right_align" ,
49
+ hl_mode = " combine" ,
50
+ })
51
+ end
52
+ end
41
53
end
42
54
43
55
function M .render_hl (bufnr , hl )
44
56
if not bufnr or not vim .api .nvim_buf_is_loaded (bufnr ) then
45
57
return
46
58
end
47
- vim .api .nvim_buf_clear_namespace (bufnr , namespace_id , 0 , - 1 )
59
+ vim .api .nvim_buf_clear_namespace (bufnr , namespace_highlights_id , 0 , - 1 )
48
60
for _ , data in ipairs (hl ) do
49
61
if type (data [1 ]) == " table" then
50
62
for _ , group in ipairs (data [1 ]) do
51
- vim .api .nvim_buf_add_highlight (bufnr , namespace_id , group , data [2 ], data [3 ], data [4 ])
63
+ vim .api .nvim_buf_add_highlight (bufnr , namespace_highlights_id , group , data [2 ], data [3 ], data [4 ])
52
64
end
53
65
end
54
66
end
@@ -67,7 +79,7 @@ function M.draw()
67
79
68
80
local builder = Builder :new ():build ()
69
81
70
- _draw (bufnr , builder .lines , builder .hl_args , builder .signs )
82
+ _draw (bufnr , builder .lines , builder .hl_args , builder .signs , builder . extmarks )
71
83
72
84
if cursor and # builder .lines >= cursor [1 ] then
73
85
vim .api .nvim_win_set_cursor (view .get_winnr () or 0 , cursor )
0 commit comments