Fix: update_listing_in_buffer is clearing the buffer (Issue #921)
Problem: VimwikiGenerateTags and VimwikiDiaryGenerateLinks end up with empty wiki files when foldlevel=0 and g:vimwiki_folding='expr' Solution: Set an initial foldlevel to 100 in update_listing in diary Optionaly: Comment a little the big messy, geeky hack !
This commit is contained in:
parent
d9d14cc3f7
commit
af08e34000
@ -1223,12 +1223,12 @@ endfunction
|
|||||||
" Called: by functions adding listing to buffer (this is an util function)
|
" Called: by functions adding listing to buffer (this is an util function)
|
||||||
function! vimwiki#base#update_listing_in_buffer(Generator, start_header,
|
function! vimwiki#base#update_listing_in_buffer(Generator, start_header,
|
||||||
\ content_regex, default_lnum, header_level, create) abort
|
\ content_regex, default_lnum, header_level, create) abort
|
||||||
" Vim behaves strangely when files change while in diff mode
|
" Clause: Vim behaves strangely when files change while in diff mode
|
||||||
if &diff || &readonly
|
if &diff || &readonly
|
||||||
return
|
return
|
||||||
endif
|
endif
|
||||||
|
|
||||||
" Check if the listing is already there
|
" Clause: Check if the listing is already there
|
||||||
let already_there = 0
|
let already_there = 0
|
||||||
|
|
||||||
let header_level = 'rxH' . a:header_level . '_Template'
|
let header_level = 'rxH' . a:header_level . '_Template'
|
||||||
@ -1248,17 +1248,21 @@ function! vimwiki#base#update_listing_in_buffer(Generator, start_header,
|
|||||||
return
|
return
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
" Save state
|
||||||
let winview_save = winsaveview()
|
let winview_save = winsaveview()
|
||||||
|
" Work is supposing an initial visibility (Issue: #921)
|
||||||
|
let foldlevel_save = &l:foldlevel
|
||||||
|
let &l:foldlevel = 100
|
||||||
let cursor_line = winview_save.lnum
|
let cursor_line = winview_save.lnum
|
||||||
let is_cursor_after_listing = 0
|
let is_cursor_after_listing = 0
|
||||||
|
|
||||||
let is_fold_closed = 1
|
let is_fold_closed = 1
|
||||||
|
|
||||||
let lines_diff = 0
|
let lines_diff = 0
|
||||||
|
|
||||||
|
" Set working range according to listing presence
|
||||||
if already_there
|
if already_there
|
||||||
let is_fold_closed = ( foldclosed(start_lnum) > -1 )
|
let is_fold_closed = ( foldclosed(start_lnum) > -1 )
|
||||||
" delete the old listing
|
" Delete the old listing
|
||||||
let whitespaces_in_first_line = matchstr(getline(start_lnum), '\m^\s*')
|
let whitespaces_in_first_line = matchstr(getline(start_lnum), '\m^\s*')
|
||||||
let end_lnum = start_lnum + 1
|
let end_lnum = start_lnum + 1
|
||||||
while end_lnum <= line('$') && getline(end_lnum) =~# a:content_regex
|
while end_lnum <= line('$') && getline(end_lnum) =~# a:content_regex
|
||||||
@ -1278,7 +1282,7 @@ function! vimwiki#base#update_listing_in_buffer(Generator, start_header,
|
|||||||
let start_lnum = a:default_lnum
|
let start_lnum = a:default_lnum
|
||||||
let is_cursor_after_listing = ( cursor_line > a:default_lnum )
|
let is_cursor_after_listing = ( cursor_line > a:default_lnum )
|
||||||
let whitespaces_in_first_line = ''
|
let whitespaces_in_first_line = ''
|
||||||
" append newline if not replacing first line
|
" Append newline if not replacing first line
|
||||||
if start_lnum > 1
|
if start_lnum > 1
|
||||||
keepjumps call append(start_lnum -1, '')
|
keepjumps call append(start_lnum -1, '')
|
||||||
let start_lnum += 1
|
let start_lnum += 1
|
||||||
@ -1324,6 +1328,9 @@ function! vimwiki#base#update_listing_in_buffer(Generator, start_header,
|
|||||||
if is_cursor_after_listing
|
if is_cursor_after_listing
|
||||||
let winview_save.lnum += lines_diff
|
let winview_save.lnum += lines_diff
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
" Restore state
|
||||||
|
let &l:foldlevel = foldlevel_save
|
||||||
call winrestview(winview_save)
|
call winrestview(winview_save)
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user