I notice that it calls imported def function UnderLineHeaders() only on the first entering file.h, not the others.
Don"t understand why ?
Thank you for help
Nicolas
------------------------------------------------------
_vimrc:
import autoload './vimfiles/plugged/foobarhelper.vim/autoload/foobarhelper.vim' as that
autocmd BufEnter *.cpp,*.hpp,*.h,*.c call that.UnderLineHeaders()
:autocmd
--- Autocommands ---
.. some other stuff
.. some other stuff
BufEnter
*.cpp call that.UnderLineHeaders()
*.hpp call that.UnderLineHeaders()
*.h call that.UnderLineHeaders() > > >> >>> works only on first entering *.h buffer.
*.c call that.UnderLineHeaders()
*.cpp call that.UnderLineHeaders()
*.hpp call that.UnderLineHeaders()
*.h call that.UnderLineHeaders() > > >> >>> works only on first entering *.h buffer.
*.c call that.UnderLineHeaders()
_autoload/myhelper/myhelper.vim:
export def UnderLineHeaders(): void
echomsg 'UnderLineHeaders called for buffer ' .. expand("%:p")
some stuff....
if !exists('*g:OpeningHeader')
def g:OpeningHeader(): void
some other stuff
echomsg 'UnderLineHeaders called for buffer ' .. expand("%:p")
some stuff....
if !exists('*g:OpeningHeader')
def g:OpeningHeader(): void
some other stuff
enddef
enddef
Le vendredi 14 octobre 2022 à 22:34:07 UTC+2, N V a écrit :
Solved by this prevent conditionnal testif !exists('*MyFunction') fun MyFunction ... endfun endif as described https://stackoverflow.com/questions/31663750/function-already-exists-vimLe vendredi 14 octobre 2022 à 22:25:29 UTC+2, N V a écrit :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>
enddefThe 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 itHow can I force the g:OpeningHeader def func ?Thank youNicolasThe complete codeexport 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+unsubscribe@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/vim_use/b9e27fbe-c5e7-4a51-a78e-ae82391b97a4n%40googlegroups.com.
No comments:
Post a Comment