Hi, I got reentrancy side effect with a bufenter autocommand on header considering these feature.
- First def func1 is processing current buffer (cpp, h) to add text_prop on header file and underline them. => works Fin - Inside this func1 declare func2 to search and open underlined header double cliked. The vim9script that do the job : *export def* UnderLineHeaders(): void var *headers*: dict<string> = {} .. some stuff .. some stuff *def* *g:OpeningHeader*(): void .. some stuff .. some stuff *enddef* nnoremap <buffer> <2-Leftmouse> :call *g:OpeningHeader*()<CR> *enddef* The error I got when double clik on header : Error detected while processing function OpeningHeader[21]..BufEnter Autocommands for "*.h"..function nvhelper#UnderLineHeaders: line 28: E122: Function OpeningHeader already exists, add ! to replace it How can I force the g:OpeningHeader def func ? Thank you Nicolas The complete code export def UnderLineHeaders(): void var patterns: dict<string> = { 'header': '\w\+\.h' } var headers: dict<string> = {} var list_of_line: list<string> = getline(1, '$') var lineno: number = 1 var res: string = '' # identify headers' lines for line in list_of_line res = matchstr(line, patterns.header) if res != "" headers[lineno] = res endif lineno = lineno + 1 endfor # some declarations before adding text prop call prop_type_delete('header') hi Underlined_Header ctermbg=NONE ctermfg=NONE cterm=UNDERLINE guibg=NONE guifg=NONE gui=UNDERLINE call prop_type_add('header', {'highlight': 'Underlined_Header'}) # add prop on headers var col: number = -1 for key in keys(headers) lineno = key->str2nr() col = stridx(getline(lineno), headers[key]) + 1 call prop_add(lineno, col, {'length': headers[key]->len(), 'type': 'header'}) endfor def g:OpeningHeader(): void var curlnum: number = getcurpos()[1] var key: string = getcurpos()[1]->string() if has_key(headers, key) var searchedfile: string = headers[getcurpos()[1]->string()] echomsg 'File to search for is ' .. searchedfile var currentpath: list<string> = expand("%:p:h")->split('\\') var idxfolder: number = 1 var maxfolders: number = currentpath->len() var foundedfile: string = '' while idxfolder < maxfolders foundedfile = globpath( currentpath[ : -1 * idxfolder ]->join('\'), "**/" .. searchedfile ) if foundedfile != '' break endif idxfolder += 1 endwhile echomsg foundedfile exe 'e ' .. foundedfile else echomsg 'Sorry no File to search for.' endif enddef # add double clickable feature => opening header nnoremap <buffer> <2-Leftmouse> :call g:OpeningHeader()<CR> enddef -- -- You received this message from the "vim_use" maillist. Do not top-post! Type your reply below the text you are replying to. For more information, visit http://www.vim.org/maillist.php --- You received this message because you are subscribed to the Google Groups "vim_use" group. To unsubscribe from this group and stop receiving emails from it, send an email to vim_use+unsubscr...@googlegroups.com. To view this discussion on the web visit https://groups.google.com/d/msgid/vim_use/3ecb6d5d-8bc1-44a0-9e9e-e798549c1695n%40googlegroups.com.