Handle all combinations of 'autowriteall' and 'hidden'

Ref #445
This commit is contained in:
EinfachToll 2018-03-16 21:39:24 +01:00
parent 4bacbe0000
commit 8009e5c7cf
2 changed files with 21 additions and 13 deletions

View File

@ -690,14 +690,6 @@ endfunction "}}}
" vimwiki#base#edit_file " vimwiki#base#edit_file
function! vimwiki#base#edit_file(command, filename, anchor, ...) "{{{ function! vimwiki#base#edit_file(command, filename, anchor, ...) "{{{
" XXX: Should we allow * in filenames!?
" Maxim: It is allowed, escaping here is for vim to be able to open files
" which have that symbols.
" Try to remove * from escaping and open&save :
" [[testBLAfile]]...
" then
" [[test*file]]...
" you'll have E77: Too many file names
let fname = escape(a:filename, '% *|#`') let fname = escape(a:filename, '% *|#`')
let dir = fnamemodify(a:filename, ":p:h") let dir = fnamemodify(a:filename, ":p:h")
@ -709,12 +701,24 @@ function! vimwiki#base#edit_file(command, filename, anchor, ...) "{{{
return return
endif endif
" check if the file we want to open is already the current file " Check if the file we want to open is already the current file
" which happens if we jump to an achor in the current file. " which happens if we jump to an achor in the current file.
" This hack is necessary because apparently Vim messes up the result of " This hack is necessary because apparently Vim messes up the result of
" getpos() directly after this command. Strange. " getpos() directly after this command. Strange.
if !(a:command ==# ':e ' && vimwiki#path#is_equal(a:filename, expand('%:p'))) if !(a:command ==# ':e ' && vimwiki#path#is_equal(a:filename, expand('%:p')))
execute a:command.' '.fname try
if &autowriteall && !&hidden " in this case, the file is saved before switching to the
" new buffer. This causes Vim to show two messages in the command line which triggers
" the annoying hit-enter prompt. Solution: show no messages at all.
silent execute a:command fname
else
execute a:command fname
endif
catch /E37:/
echomsg 'Vimwiki: The current file is modified. Hint: Take a look at'
\ ''':h g:vimwiki_autowriteall'' to see how to save automatically.'
return
endtry
" If the opened file was not already loaded by Vim, an autocommand is " If the opened file was not already loaded by Vim, an autocommand is
" triggered at this point " triggered at this point
@ -1166,7 +1170,7 @@ function! vimwiki#base#go_back_link() "{{{
let prev_link = vimwiki#vars#get_bufferlocal('prev_link') let prev_link = vimwiki#vars#get_bufferlocal('prev_link')
if !empty(prev_link) if !empty(prev_link)
" go back to saved wiki link " go back to saved wiki link
execute ":e ".substitute(prev_link[0], '\s', '\\\0', 'g') call vimwiki#base#edit_file(':e ', prev_link[0], '')
call setpos('.', prev_link[1]) call setpos('.', prev_link[1])
else else
" maybe we came here by jumping to a tag -> pop from the tag stack " maybe we came here by jumping to a tag -> pop from the tag stack

View File

@ -2731,8 +2731,12 @@ Default: 2
------------------------------------------------------------------------------ ------------------------------------------------------------------------------
*g:vimwiki_autowriteall* *g:vimwiki_autowriteall*
In Vim 'autowriteall' is a global setting. With g:vimwiki_autowriteall Vimwiki Automatically save a modified wiki buffer when switching wiki pages. Has the
makes it local to its buffers. same effect like setting the Vim option 'autowriteall', but it works for wiki
files only, while the Vim option is global.
Hint: if you're just annoyed that you have to save files manually to switch
wiki pages, consider setting the Vim option 'hidden' which makes that modified
files don't need to be saved.
Value Description~ Value Description~
0 autowriteall is off 0 autowriteall is off