@@ -12,13 +12,14 @@ local M = {}
1212
1313local SIGN_GROUP = " NvimTreeRendererSigns"
1414
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"
1617
1718--- @param bufnr number
1819--- @param lines string[]
1920--- @param hl_args AddHighlightArgs[]
2021--- @param signs string[]
21- local function _draw (bufnr , lines , hl_args , signs )
22+ local function _draw (bufnr , lines , hl_args , signs , extmarks )
2223 if vim .fn .has " nvim-0.10" == 1 then
2324 vim .api .nvim_set_option_value (" modifiable" , true , { buf = bufnr })
2425 else
@@ -38,17 +39,28 @@ local function _draw(bufnr, lines, hl_args, signs)
3839 for i , sign_name in pairs (signs ) do
3940 vim .fn .sign_place (0 , SIGN_GROUP , sign_name , bufnr , { lnum = i + 1 })
4041 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
4153end
4254
4355function M .render_hl (bufnr , hl )
4456 if not bufnr or not vim .api .nvim_buf_is_loaded (bufnr ) then
4557 return
4658 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 )
4860 for _ , data in ipairs (hl ) do
4961 if type (data [1 ]) == " table" then
5062 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 ])
5264 end
5365 end
5466 end
@@ -67,7 +79,7 @@ function M.draw()
6779
6880 local builder = Builder :new ():build ()
6981
70- _draw (bufnr , builder .lines , builder .hl_args , builder .signs )
82+ _draw (bufnr , builder .lines , builder .hl_args , builder .signs , builder . extmarks )
7183
7284 if cursor and # builder .lines >= cursor [1 ] then
7385 vim .api .nvim_win_set_cursor (view .get_winnr () or 0 , cursor )
0 commit comments