vimwiki

Personal wiki for vim
git clone https://github.com/vimwiki/vimwiki.git
Log | Files | Refs | README | LICENSE

commit 8cc99c00c2fa03b263d137cdb841bb335a909c60
parent b1de908f0eba603dd4d5b5747990478a50dfbffd
Author: Tinmarino <tinmarino@gmail.com>
Date:   Wed,  5 Aug 2020 00:39:00 -0400

Fix VimwikiRenameLink ruins window layout (Issue #592)

Diffstat:
MDockerfile | 3+--
Mautoload/vimwiki/base.vim | 49+++++++++++++++++++++++++++++++++----------------
Mtest/command_rename_link.vader | 14++++++++++++--
3 files changed, 46 insertions(+), 20 deletions(-)

diff --git a/Dockerfile b/Dockerfile @@ -21,5 +21,4 @@ RUN install_vim -tag v7.3.429 -name vim_7.3.429 -build \ -tag v7.4.1546 -name vim_7.4.1546 -build \ -tag v8.0.0027 -name vim_8.0.0027 -build \ -tag v8.1.0519 -name vim_8.1.0519 -build \ -+ -tag neovim:v0.2.2 -name nvim_0.2.2 -build \ -+ -tag neovim:v0.3.8 -name nvim_0.3.8 -build \ + -tag neovim:v0.3.8 -name nvim_0.3.8 -build \ diff --git a/autoload/vimwiki/base.vim b/autoload/vimwiki/base.vim @@ -1734,6 +1734,7 @@ endfunction " Rename current file, update all links to it " Param: [new_filepath <string>] +" Exported: VimwikiRenameFile function! vimwiki#base#rename_link(...) abort " Get filename and dir relative to wiki root let subdir = vimwiki#vars#get_bufferlocal('subdir') @@ -1788,25 +1789,22 @@ function! vimwiki#base#rename_link(...) abort let &buftype='nofile' - " Save current buffer: [file_name, buffer_name] - let cur_buffer = [expand('%:p'), vimwiki#vars#get_bufferlocal('prev_links')] + " Save current buffer: [file_name, previous_name, buffer_number] + let buf_old_info = [expand('%:p'), vimwiki#vars#get_bufferlocal('prev_links'), bufnr('%')] + if v:version > 800 || has('patch-8.0.0083') + let win_old_id = win_getid() + endif " Get all wiki buffer let blist = s:get_wiki_buffers() - " Save wiki buffers + " Dump wiki buffers: they may change for bitem in blist execute ':b '.escape(bitem[0], ' ') execute ':update' endfor - execute ':b '.escape(cur_buffer[0], ' ') - - " Remove wiki buffers - for bitem in blist - execute 'bwipeout '.escape(bitem[0], ' ') - endfor - + " Prevent prompt from scrolling alone let more_save = &more setlocal nomore @@ -1820,20 +1818,39 @@ function! vimwiki#base#rename_link(...) abort \ fnamemodify(new_fname_rel_dir, ':r') \ ) - " Restore wiki buffers + "" Restore wiki buffers + let autoread_save = &autoread + set autoread for bitem in blist - if !vimwiki#path#is_equal(bitem[0], cur_buffer[0]) - call s:open_wiki_buffer(bitem) - endif + execute ':b '.escape(bitem[0], ' ') + execute ':e!' endfor + let &autoread = autoread_save " Open the new buffer - call s:open_wiki_buffer([new_fname, cur_buffer[1]]) - " execute 'bwipeout '.escape(cur_buffer[0], ' ') + call s:open_wiki_buffer([new_fname, buf_old_info[1]]) + let buf_new_nb = bufnr('%') + + " Change old_buffer by new buffer in all window + windo if bufnr('%') == buf_old_info[2] | exe 'b ' . buf_new_nb | endif + " Goto the window I belong + if v:version > 800 || has('patch-8.0.0083') + call win_gotoid(win_old_id) + endif + + " Wipeout the old buffer: avoid surprises <= If it is not the same + if buf_old_info[2] != buf_new_nb + exe 'bwipeout! ' . buf_old_info[2] + else + " Should not happen + echomsg 'Vimwiki Error: New buffer is the same as old, so will not delete: ' + \ . buf_new_nb . '.Please open an issue if see this messsage' + endif " Log success echomsg 'Vimwiki: '.old_fname.' is renamed to '.new_fname + " Restore prompt let &more = more_save endfunction diff --git a/test/command_rename_link.vader b/test/command_rename_link.vader @@ -1,5 +1,6 @@ # VimwikiRenameFile # Related to link, file navigation +# Many commands are made with Do: They block with Execute # Create directories I remove at end {{{1 @@ -32,6 +33,15 @@ Execute (Create 3 files): edit $HOME/testmarkdown/Test-Rename-Completion.md call WriteMe() + +Do (Testing Old buffer has been wiped out {{{2): + :edit $HOME/testmarkdown/Test-Rename-Completion.md\<Cr> + :let buf_old = bufnr('%')\<Cr> + :VimwikiRenameFile Test-Rename-new1\<Cr> + :AssertEqual 'Test-Rename-new1', expand('%:t:r')\<Cr> + :VimwikiRenameFile Test-Rename-Completion\<Cr> + :AssertEqual expand('%'), $HOME . '/testmarkdown/Test-Rename-Completion.md'\<Cr> + Do (Testing Completion {{{2): # Rename and test (zzz) :VimwikiRenameFile Test-Rename-z\<C-l>1\<Cr> @@ -45,6 +55,7 @@ Do (Testing transforward {{{2): :Log 'Forward: root -> dir1/dir11 {{{3'\<Cr> # Create dir1/dir11/Test-Rename and link to it :edit $HOME/testmarkdown/Test-Rename-Completion.md\<Cr> + ggdG idir1/dir11/Test-Rename.md\<Esc> \<Cr>\<Cr> :VimwikiRenameFile ../Test-Rename-2\<Cr> @@ -70,9 +81,8 @@ Do (Testing transforward {{{2): :VimwikiRenameFile dir1/Test-Rename-Completion-2\<Cr> :AssertEqual expand('%'), $HOME . '/testmarkdown/dir1/Test-Rename-Completion-2.md'\<Cr> -# Delete smaller unit changed {{{2 -Execute (Clean): +Execute (Delete smaller unit changed {{{2): call DeleteFile('$HOME/testmarkdown/Test-Rename-zzz.md') call DeleteFile('$HOME/testmarkdown/dir1/Test-Rename-Completion_2.md') call DeleteFile('$HOME/testmarkdown/dir1/Test-Rename-2.md')