@@ -163,6 +163,19 @@ vimdoc.code_block = function (buffer, item)
163163 local decorations = filetypes .get (item .language );
164164 local label = { string.format (" %s%s " , decorations .icon , decorations .name ), utils .set_hl (config .label_hl or decorations .icon_hl ) };
165165
166+ local function show_tooltip ()
167+ if vim .fn .has (" nvim-0.11.0" ) == 0 then
168+ -- Only do this on nightly versions
169+ return false ;
170+ else
171+ local ft = vim .filetype .match ({
172+ filename = string.format (" example.%s" , item .language )
173+ });
174+
175+ return vim .list_contains ({ " vim" , " lua" }, ft );
176+ end
177+ end
178+
166179 if item .top_border [1 ] == true then
167180 --- Virtual line
168181 vim .api .nvim_buf_set_extmark (buffer , vimdoc .ns , range .row_start , range .col_start , {
@@ -176,11 +189,13 @@ vimdoc.code_block = function (buffer, item)
176189 },
177190 {
178191 label ,
192+ show_tooltip () == true and { " • Run with g==" , " HelpviewCodeInfo" } or { " " },
179193 { string.rep (" " , vim .o .columns ), utils .set_hl (config .border_hl ) }
180- }
194+ },
181195 } or {
182196 {
183197 label ,
198+ show_tooltip () == true and { " • Run with g==" , " HelpviewCodeInfo" } or { " " },
184199 { string.rep (" " , vim .o .columns ), utils .set_hl (config .border_hl ) }
185200 }
186201 }
@@ -199,7 +214,10 @@ vimdoc.code_block = function (buffer, item)
199214 } or nil ,
200215
201216 virt_text_pos = " overlay" ,
202- virt_text = { label },
217+ virt_text = {
218+ label ,
219+ show_tooltip () == true and { " • Run with g==" , " HelpviewCodeInfo" } or { " " },
220+ },
203221 line_hl_group = utils .set_hl (config .border_hl )
204222 });
205223 end
@@ -1048,6 +1066,9 @@ end
10481066vimdoc .render = function (buffer , content )
10491067 --- +
10501068
1069+ --- Clear the message namespace.
1070+ vimdoc .__message_clear (buffer , content )
1071+
10511072 --- Custom renderers.
10521073 --- @type { [string] : fun ( buffer : integer , item : table ): nil }
10531074 local custom_renderers = spec .get ({ " renderers" }, { fallback = {} });
@@ -1073,6 +1094,41 @@ vimdoc.render = function (buffer, content)
10731094 --- _
10741095end
10751096
1097+ --- Clears help message namespace.
1098+ --- @param buffer integer
1099+ --- @param content table[]
1100+ vimdoc .__message_clear = function (buffer , content )
1101+ --- +
1102+
1103+ --- Map of namespace IDs.
1104+ --- @type { [string] : integer }
1105+ local namespaces = vim .api .nvim_get_namespaces ();
1106+
1107+ if not namespaces [" nvim.vimdoc.run_message" ] then
1108+ --- Message namespace doesn't exist.
1109+ --- Abort.
1110+ return ;
1111+ elseif not package.loaded [" helpview.renderer" ] or not package.loaded [" helpview.renderer" ].get_range then
1112+ --- In case the renderer module isn't available
1113+ --- just clear everything.
1114+ vim .api .nvim_buf_clear_namespace (buffer , namespaces [" nvim.vimdoc.run_message" ], 0 , - 1 );
1115+ else
1116+ --- Line range to clear.
1117+ --- @type integer , integer
1118+ local from , to = package.loaded [" helpview.renderer" ].get_range ({
1119+ vimdoc = content
1120+ });
1121+
1122+ vim .api .nvim_buf_clear_namespace (buffer , namespaces [" nvim.vimdoc.run_message" ], from , to );
1123+ end
1124+
1125+ --- _
1126+ end
1127+
1128+ --- Clears preview decorations.
1129+ --- @param buffer integer
1130+ --- @param from integer | nil
1131+ --- @param to integer | nil
10761132vimdoc .clear = function (buffer , from , to )
10771133 vim .api .nvim_buf_clear_namespace (buffer , vimdoc .ns , from or 0 , to or - 1 );
10781134end
0 commit comments