commit d9d14cc3f7d3c0317345f9afa33eaf82cb9e14c1
parent 4672deb44e34b8e779e6ac8c51050140fac78c66
Author: Tinmarino <tinmarino@gmail.com>
Date: Sun, 26 Jul 2020 22:14:00 -0400
Feature: Config: Normalize link so that user can choose [[]] or []() (Issue #892)
Main change:
Create function: normalize_syntax_settings(syntax)
Problem:
Some user prefer [[]] links more than []().
As vimwiki know both of them, they should be able to choose
without regex mastery and with tests
Solution:
let g:vimwiki_syntax_variables.markdown.Link1 = vimwiki#vars#get_global('WikiLinkTemplate1')
Diffstat:
5 files changed, 53 insertions(+), 17 deletions(-)
diff --git a/autoload/vimwiki/base.vim b/autoload/vimwiki/base.vim
@@ -429,11 +429,7 @@ function! vimwiki#base#generate_links(create, ...) abort
for link in links
let link_infos = vimwiki#base#resolve_link(link)
if !vimwiki#base#is_diary_file(link_infos.filename, copy(l:diary_file_paths))
- if vimwiki#vars#get_wikilocal('syntax') ==# 'markdown'
- let link_tpl = vimwiki#vars#get_syntaxlocal('Weblink1Template')
- else
- let link_tpl = vimwiki#vars#get_global('WikiLinkTemplate1')
- endif
+ let link_tpl = vimwiki#vars#get_syntaxlocal('Link1')
let link_caption = vimwiki#base#read_caption(link_infos.filename)
if link_caption ==? '' " default to link if caption not found
@@ -2252,7 +2248,7 @@ endfunction
" Treat link string towards normalization
-" [__LinkDescription__](__LinkUrl__.FileExtension)
+" [__LinkDescription__](__LinkUrl__.__FileExtension__)
function! vimwiki#base#normalize_link_helper(str, rxUrl, rxDesc, template) abort
let url = matchstr(a:str, a:rxUrl)
if vimwiki#vars#get_wikilocal('syntax') ==# 'markdown' && vimwiki#vars#get_wikilocal('markdown_link_ext')
@@ -2284,6 +2280,7 @@ endfunction
" Normalize link in a diary file
+" Refactor: in diary
function! vimwiki#base#normalize_link_in_diary(lnk) abort
let sc = vimwiki#vars#get_wikilocal('links_space_char')
let link = a:lnk . vimwiki#vars#get_wikilocal('ext')
@@ -2313,7 +2310,7 @@ function! vimwiki#base#normalize_link_in_diary(lnk) abort
endif
if vimwiki#vars#get_wikilocal('syntax') ==? 'markdown'
- let template = vimwiki#vars#get_syntaxlocal('Weblink1Template')
+ let template = vimwiki#vars#get_syntaxlocal('Link1')
endif
return vimwiki#base#normalize_link_helper(str, rxUrl, rxDesc, template)
@@ -2380,13 +2377,8 @@ function! s:normalize_link_syntax_v() abort
if vimwiki#base#is_diary_file(expand('%:p'))
let link = vimwiki#base#normalize_link_in_diary(visual_selection)
else
- " Warning nested syntax discrimination
- if vimwiki#vars#get_wikilocal('syntax') ==# 'markdown'
- let template = vimwiki#vars#get_syntaxlocal('Weblink1Template')
- else
- let template = vimwiki#vars#get_global('WikiLinkTemplate1')
- endif
- let link = s:safesubstitute(template, '__LinkUrl__', visual_selection, '')
+ let link_tpl = vimwiki#vars#get_syntaxlocal('Link1')
+ let link = s:safesubstitute(link_tpl, '__LinkUrl__', visual_selection, '')
endif
" Transform link:
diff --git a/autoload/vimwiki/markdown_base.vim b/autoload/vimwiki/markdown_base.vim
@@ -102,7 +102,7 @@ function! s:normalize_link_syntax_n() abort
else
let sub = vimwiki#base#normalize_link_helper(lnk,
\ vimwiki#vars#get_global('rxWord'), '',
- \ vimwiki#vars#get_syntaxlocal('Weblink1Template'))
+ \ vimwiki#vars#get_syntaxlocal('Link1'))
endif
call vimwiki#base#replacestr_at_cursor('\V'.lnk, sub)
return
diff --git a/autoload/vimwiki/tags.vim b/autoload/vimwiki/tags.vim
@@ -360,7 +360,7 @@ function! vimwiki#tags#generate_tags(create, ...) abort
let link_tpl = vimwiki#vars#get_syntaxlocal('Weblink3Template')
let link_infos = vimwiki#base#resolve_link(taglink)
if empty(link_infos.anchor)
- let link_tpl = vimwiki#vars#get_syntaxlocal('Weblink1Template')
+ let link_tpl = vimwiki#vars#get_syntaxlocal('Link1')
let entry = s:safesubstitute(link_tpl, '__LinkUrl__', taglink, '')
let entry = s:safesubstitute(entry, '__LinkDescription__', taglink, '')
else
diff --git a/autoload/vimwiki/vars.vim b/autoload/vimwiki/vars.vim
@@ -563,7 +563,7 @@ endfunction
" Helper path
-" TODO move to path
+" TODO move to path: Conflict with: vimwiki#path#path_norm && vimwiki#path#normalize
function! s:normalize_path(path) abort
" trim trailing / and \ because otherwise resolve() doesn't work quite right
let path = substitute(a:path, '[/\\]\+$', '', '')
@@ -741,6 +741,8 @@ function! vimwiki#vars#populate_syntax_vars(syntax) abort
if a:syntax ==# 'markdown'
call s:populate_extra_markdown_vars()
endif
+
+ call s:normalize_syntax_settings(a:syntax)
endfunction
@@ -975,6 +977,23 @@ function! s:populate_extra_markdown_vars() abort
endfunction
+" Normalize syntax setting
+" so that we dont have to branch for the syntax at each operation
+" Called: vimwiki#vars#populate_syntax_vars
+function! s:normalize_syntax_settings(syntax) abort
+ let syntax_dic = g:vimwiki_syntax_variables[a:syntax]
+
+ " Link1: used when:
+ " user press enter on a non-link (normalize_link)
+ " command generate link form file name (generate_link)
+ if a:syntax ==# 'markdown'
+ let syntax_dic.Link1 = syntax_dic.Weblink1Template
+ else
+ let syntax_dic.Link1 = vimwiki#vars#get_global('WikiLinkTemplate1')
+ endif
+endfunction
+
+
" ----------------------------------------------------------
" 4. Getter, Setter (exported)
" ----------------------------------------------------------
diff --git a/test/link_creation.vader b/test/link_creation.vader
@@ -1,5 +1,30 @@
Include: vader_includes/vader_setup.vader
+# Link Normalisation {{{1
+# And configuration
+# Issues: #892
+####################
+
+Execute (Log):
+ Log 'Markdown change Link1 : Pressing enter to create a [[double bracket]] #892'
+
+Given vimwiki (abc def ghi jkl):
+ abc def ghi jkl
+
+Execute (Set filename wiki_test.md):
+ call SetSyntax('markdown')
+ let save_link = g:vimwiki_syntax_variables.markdown.Link1
+ let g:vimwiki_syntax_variables.markdown.Link1 = vimwiki#vars#get_global('WikiLinkTemplate1')
+
+Do (vee<CR>):
+ vee\<CR>
+
+Expect (append md suffix):
+ [[abc def]] ghi jkl
+
+Execute (restore):
+ let g:vimwiki_syntax_variables.markdown.Link1 = save_link
+
# vimwiki_markdown_link_ext {{{1
####################