From e8ad164fb0394054ad82b8a8a6b5efaf9e6f8cda Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Karl=20Yngve=20Lerv=C3=A5g?= Date: Mon, 15 Sep 2014 21:44:32 +0200 Subject: [PATCH 1/4] Improved normalize links in diary (fixes #66) --- autoload/vimwiki/base.vim | 55 +++++++++++++++++++++++++++++++-------- 1 file changed, 44 insertions(+), 11 deletions(-) diff --git a/autoload/vimwiki/base.vim b/autoload/vimwiki/base.vim index ef07b06..38788d4 100644 --- a/autoload/vimwiki/base.vim +++ b/autoload/vimwiki/base.vim @@ -1691,6 +1691,15 @@ function! s:clean_url(url) " {{{ return join(url, " ") endfunction " }}} +" s:in_diary +function! s:in_diary() " {{{ + let file_path = vimwiki#u#path_norm(expand("%:p")) + let rel_path = VimwikiGet('diary_rel_path') + let diary_path = vimwiki#u#path_norm(VimwikiGet('path') . rel_path) + return rel_path != '' + \ && file_path =~# '^'.vimwiki#u#escape(diary_path) +endfunction " }}} + " vimwiki#base#normalize_link_helper function! vimwiki#base#normalize_link_helper(str, rxUrl, rxDesc, template) " {{{ let str = a:str @@ -1713,6 +1722,22 @@ function! vimwiki#base#normalize_imagelink_helper(str, rxUrl, rxDesc, rxStyle, t return lnk endfunction " }}} +" s:normalize_link_in_diary +function! s:normalize_link_in_diary(lnk) " {{{ + + " Check if link already exists or is a date + if filereadable(a:lnk . '.wiki') || a:lnk =~# '\d\d\d\d-\d\d-\d\d' + let sub = vimwiki#base#normalize_link_helper(a:lnk, + \ g:vimwiki_rxWord, '', + \ g:vimwiki_WikiLinkTemplate1) + else + let depth = len(split(VimwikiGet('diary_rel_path'), '/')) + let sub = '[[' . repeat('../', depth) . a:lnk . '|' . a:lnk . ']]' + endif + + return sub +endfunction " }}} + " s:normalize_link_syntax_n function! s:normalize_link_syntax_n() " {{{ @@ -1744,9 +1769,13 @@ function! s:normalize_link_syntax_n() " {{{ " normalize_link_syntax_v let lnk = vimwiki#base#matchstr_at_cursor(g:vimwiki_rxWord) if !empty(lnk) - let sub = vimwiki#base#normalize_link_helper(lnk, - \ g:vimwiki_rxWord, '', - \ g:vimwiki_WikiLinkTemplate1) + if s:in_diary() + let sub = s:normalize_link_in_diary(lnk) + else + let sub = vimwiki#base#normalize_link_helper(lnk, + \ g:vimwiki_rxWord, '', + \ g:vimwiki_WikiLinkTemplate1) + endif call vimwiki#base#replacestr_at_cursor('\V'.lnk, sub) if g:vimwiki_debug > 1 echomsg "Word: ".lnk." Sub: ".sub @@ -1764,20 +1793,24 @@ function! s:normalize_link_syntax_v() " {{{ let rt = getregtype('"') try - norm! gv""y - let visual_selection = @" - let visual_selection = substitute(g:vimwiki_WikiLinkTemplate1, '__LinkUrl__', '\='."'".visual_selection."'", '') + " Save selected text to register " + normal! gv""y - call setreg('"', visual_selection, 'v') - - " paste result - norm! `>""pgvd + " Set substitution + if s:in_diary() + let sub = s:normalize_link_in_diary(@") + else + let sub = substitute(g:vimwiki_WikiLinkTemplate1, + \ '__LinkUrl__', '\=' . "'" . @" . "'", '') + endif + " Put substitution in register " and change text + call setreg('"', sub, 'v') + normal! `>""pgvd finally call setreg('"', rv, rt) let &selection = sel_save endtry - endfunction " }}} " vimwiki#base#normalize_link From ec4066ad83785e52910d3deb6adda34d1d4d25ae Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Karl=20Yngve=20Lerv=C3=A5g?= Date: Wed, 17 Sep 2014 23:10:49 +0200 Subject: [PATCH 2/4] Solved some minor issues --- autoload/vimwiki/base.vim | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) diff --git a/autoload/vimwiki/base.vim b/autoload/vimwiki/base.vim index 38788d4..e50a333 100644 --- a/autoload/vimwiki/base.vim +++ b/autoload/vimwiki/base.vim @@ -1724,18 +1724,20 @@ endfunction " }}} " s:normalize_link_in_diary function! s:normalize_link_in_diary(lnk) " {{{ - - " Check if link already exists or is a date - if filereadable(a:lnk . '.wiki') || a:lnk =~# '\d\d\d\d-\d\d-\d\d' - let sub = vimwiki#base#normalize_link_helper(a:lnk, - \ g:vimwiki_rxWord, '', - \ g:vimwiki_WikiLinkTemplate1) + let link_path = fnamemodify(a:lnk . VimwikiGet('ext'), ':p') + if filereadable(link_path) || a:lnk =~# '\d\d\d\d-\d\d-\d\d' + let rxUrl = g:vimwiki_rxWord + let rxDesc = '' + let template = g:vimwiki_WikiLinkTemplate1 else let depth = len(split(VimwikiGet('diary_rel_path'), '/')) - let sub = '[[' . repeat('../', depth) . a:lnk . '|' . a:lnk . ']]' + let str = repeat('../', depth) . a:lnk . '¦¦' . a:lnk + let rxUrl = '^.*\ze¦¦' + let rxDesc = '¦¦\zs.*$' + let template = g:vimwiki_WikiLinkTemplate2 endif - return sub + return vimwiki#base#normalize_link_helper(str, rxUrl, rxDesc, template) endfunction " }}} " s:normalize_link_syntax_n From f02fbffaf143526323eac47519a36addd36404db Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Karl=20Yngve=20Lerv=C3=A5g?= Date: Wed, 17 Sep 2014 23:26:16 +0200 Subject: [PATCH 3/4] Fixed more issues. --- autoload/vimwiki/base.vim | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/autoload/vimwiki/base.vim b/autoload/vimwiki/base.vim index e50a333..c08e38b 100644 --- a/autoload/vimwiki/base.vim +++ b/autoload/vimwiki/base.vim @@ -1724,8 +1724,16 @@ endfunction " }}} " s:normalize_link_in_diary function! s:normalize_link_in_diary(lnk) " {{{ - let link_path = fnamemodify(a:lnk . VimwikiGet('ext'), ':p') - if filereadable(link_path) || a:lnk =~# '\d\d\d\d-\d\d-\d\d' + let link = a:lnk . VimwikiGet('ext') + let link_wiki = VimwikiGet('path') . '/' . link + let link_diary = VimwikiGet('path') . '/' + \ . VimwikiGet('diary_rel_path') . '/' . link + 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_wiki || link_exists_in_diary || link_is_date + let str = a:lnk let rxUrl = g:vimwiki_rxWord let rxDesc = '' let template = g:vimwiki_WikiLinkTemplate1 From bb815bcdd8848b8a213902e48951aa87bbac1644 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Karl=20Yngve=20Lerv=C3=A5g?= Date: Thu, 6 Nov 2014 20:01:16 +0100 Subject: [PATCH 4/4] =?UTF-8?q?Replaced=20all=20`=C2=A6=C2=A6`=20by=20`|`?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- autoload/vimwiki/base.vim | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/autoload/vimwiki/base.vim b/autoload/vimwiki/base.vim index c08e38b..d8f9e6b 100644 --- a/autoload/vimwiki/base.vim +++ b/autoload/vimwiki/base.vim @@ -1739,9 +1739,9 @@ function! s:normalize_link_in_diary(lnk) " {{{ let template = g:vimwiki_WikiLinkTemplate1 else let depth = len(split(VimwikiGet('diary_rel_path'), '/')) - let str = repeat('../', depth) . a:lnk . '¦¦' . a:lnk - let rxUrl = '^.*\ze¦¦' - let rxDesc = '¦¦\zs.*$' + let str = repeat('../', depth) . a:lnk . '|' . a:lnk + let rxUrl = '^.*\ze|' + let rxDesc = '|\zs.*$' let template = g:vimwiki_WikiLinkTemplate2 endif