vimwiki

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

commit c58268df3f8f397b19a5cee09a6e1d4f1fcd7b78
parent b997e687c3e34c1451d8573a23d91dfe6b4122c5
Author: Rane Brown <rane.brown@gmail.com>
Date:   Wed, 10 Jul 2019 21:06:33 -0600

Make normalized links in diary pages use relative path.

A previous PR added this feature to the default syntax. This add the
same functionality to markdown syntax. Fixes #729

Diffstat:
Mautoload/vimwiki/base.vim | 39++++++++++++++++++++++++---------------
Mautoload/vimwiki/markdown_base.vim | 19++++++++++++++-----
2 files changed, 38 insertions(+), 20 deletions(-)

diff --git a/autoload/vimwiki/base.vim b/autoload/vimwiki/base.vim @@ -386,7 +386,7 @@ function! vimwiki#base#generate_links(create) let bullet = repeat(' ', vimwiki#lst#get_list_margin()) . vimwiki#lst#default_symbol().' ' for link in links let link_infos = vimwiki#base#resolve_link(link) - if !s:is_diary_file(link_infos.filename) + if !vimwiki#base#is_diary_file(link_infos.filename) if vimwiki#vars#get_wikilocal('syntax') == 'markdown' let link_tpl = vimwiki#vars#get_syntaxlocal('Weblink1Template') else @@ -2080,7 +2080,7 @@ function! s:clean_url(url) endfunction -function! s:is_diary_file(filename) +function! vimwiki#base#is_diary_file(filename) let file_path = vimwiki#path#path_norm(a:filename) let rel_path = vimwiki#vars#get_wikilocal('diary_rel_path') let diary_path = vimwiki#path#path_norm(vimwiki#vars#get_wikilocal('path') . rel_path) @@ -2107,26 +2107,31 @@ function! vimwiki#base#normalize_imagelink_helper(str, rxUrl, rxDesc, rxStyle, t return lnk endfunction - -function! s:normalize_link_in_diary(lnk) +function! vimwiki#base#normalize_link_in_diary(lnk) + let sc = vimwiki#vars#get_wikilocal('links_space_char') let link = a:lnk . vimwiki#vars#get_wikilocal('ext') - let link_wiki = vimwiki#vars#get_wikilocal('path') . '/' . link - let link_diary = vimwiki#vars#get_wikilocal('path') . '/' - \ . vimwiki#vars#get_wikilocal('diary_rel_path') . '/' . link + let link_wiki = substitute(vimwiki#vars#get_wikilocal('path') . '/' . link, '\s', sc, 'g') + let link_diary = substitute(vimwiki#vars#get_wikilocal('path') . '/' + \ . vimwiki#vars#get_wikilocal('diary_rel_path') . '/' . link, '\s', sc, 'g') let link_exists_in_diary = filereadable(link_diary) let link_exists_in_wiki = filereadable(link_wiki) let link_is_date = a:lnk =~# '\d\d\d\d-\d\d-\d\d' - if link_exists_in_diary || link_is_date + if link_is_date + let str = a:lnk + let rxUrl = vimwiki#vars#get_global('rxWord') + let rxDesc = '\d\d\d\d-\d\d-\d\d' + let template = vimwiki#vars#get_global('WikiLinkTemplate1') + elseif link_exists_in_diary let str = a:lnk let rxUrl = vimwiki#vars#get_global('rxWord') let rxDesc = '' let template = vimwiki#vars#get_global('WikiLinkTemplate1') elseif link_exists_in_wiki let depth = len(split(vimwiki#vars#get_wikilocal('diary_rel_path'), '/')) - let str = repeat('../', depth) . a:lnk . '|' . a:lnk - let rxUrl = '^.*\ze|' - let rxDesc = '|\zs.*$' + let str = repeat('../', depth) . a:lnk + let rxUrl = '.*' + let rxDesc = '[^/]*$' let template = vimwiki#vars#get_global('WikiLinkTemplate2') else let str = a:lnk @@ -2135,6 +2140,10 @@ function! s:normalize_link_in_diary(lnk) let template = vimwiki#vars#get_global('WikiLinkTemplate1') endif + if vimwiki#vars#get_wikilocal('syntax') ==? 'markdown' + let template = vimwiki#vars#get_syntaxlocal('Weblink1Template') + endif + return vimwiki#base#normalize_link_helper(str, rxUrl, rxDesc, template) endfunction @@ -2173,8 +2182,8 @@ function! s:normalize_link_syntax_n() " normalize_link_syntax_v let lnk = vimwiki#base#matchstr_at_cursor(vimwiki#vars#get_global('rxWord')) if !empty(lnk) - if s:is_diary_file(expand("%:p")) - let sub = s:normalize_link_in_diary(lnk) + if vimwiki#base#is_diary_file(expand("%:p")) + let sub = vimwiki#base#normalize_link_in_diary(lnk) else let sub = s:safesubstitute( \ vimwiki#vars#get_global('WikiLinkTemplate1'), '__LinkUrl__', lnk, '') @@ -2197,8 +2206,8 @@ function! s:normalize_link_syntax_v() normal! gv""y " Set substitution - if s:is_diary_file(expand("%:p")) - let sub = s:normalize_link_in_diary(@") + if vimwiki#base#is_diary_file(expand("%:p")) + let sub = vimwiki#base#normalize_link_in_diary(@") else let sub = s:safesubstitute(vimwiki#vars#get_global('WikiLinkTemplate1'), \ '__LinkUrl__', @", '') diff --git a/autoload/vimwiki/markdown_base.vim b/autoload/vimwiki/markdown_base.vim @@ -97,9 +97,13 @@ function! s:normalize_link_syntax_n() " normalize_link_syntax_v let lnk = vimwiki#base#matchstr_at_cursor(vimwiki#vars#get_global('rxWord')) if !empty(lnk) - let sub = vimwiki#base#normalize_link_helper(lnk, - \ vimwiki#vars#get_global('rxWord'), '', - \ vimwiki#vars#get_syntaxlocal('Weblink1Template')) + if vimwiki#base#is_diary_file(expand("%:p")) + let sub = vimwiki#base#normalize_link_in_diary(lnk) + else + let sub = vimwiki#base#normalize_link_helper(lnk, + \ vimwiki#vars#get_global('rxWord'), '', + \ vimwiki#vars#get_syntaxlocal('Weblink1Template')) + endif call vimwiki#base#replacestr_at_cursor('\V'.lnk, sub) return endif @@ -118,8 +122,13 @@ function! s:normalize_link_syntax_v() try norm! gvy let visual_selection = @" - let link = s:safesubstitute(vimwiki#vars#get_syntaxlocal('Weblink1Template'), - \ '__LinkUrl__', visual_selection, '') + + if vimwiki#base#is_diary_file(expand('%:p')) + let link = vimwiki#base#normalize_link_in_diary(visual_selection) + else + let link = s:safesubstitute(vimwiki#vars#get_syntaxlocal('Weblink1Template'), + \ '__LinkUrl__', visual_selection, '') + endif " replace spaces with new character if option is set let link = substitute(link, '\s', vimwiki#vars#get_wikilocal('links_space_char'), 'g')