Make auto_tags preserve existing tag section structure
This commit is contained in:
+48
-43
@@ -360,65 +360,70 @@ function! vimwiki#tags#generate_tags(create, ...) abort
|
|||||||
|
|
||||||
" make a dictionary { tag_name: [tag_links, ...] }
|
" make a dictionary { tag_name: [tag_links, ...] }
|
||||||
let tags_entries = {}
|
let tags_entries = {}
|
||||||
|
for tagname in self.specific_tags
|
||||||
|
let tags_entries[tagname] = []
|
||||||
|
endfor
|
||||||
|
|
||||||
for entries in values(metadata)
|
for entries in values(metadata)
|
||||||
for entry in entries
|
for entry in entries
|
||||||
if has_key(tags_entries, entry.tagname)
|
if has_key(tags_entries, entry.tagname)
|
||||||
call add(tags_entries[entry.tagname], [entry.link, entry.description])
|
call add(tags_entries[entry.tagname], [entry.link, entry.description])
|
||||||
else
|
else
|
||||||
let tags_entries[entry.tagname] = [[entry.link, entry.description]]
|
if need_all_tags
|
||||||
|
let tags_entries[entry.tagname] = [[entry.link, entry.description]]
|
||||||
|
endif
|
||||||
endif
|
endif
|
||||||
endfor
|
endfor
|
||||||
unlet entry " needed for older vims with sticky type checking since name is reused
|
unlet entry " needed for older vims with sticky type checking since name is reused
|
||||||
endfor
|
endfor
|
||||||
|
|
||||||
|
let tagnames = need_all_tags ? sort(keys(tags_entries)) : self.specific_tags
|
||||||
let lines = []
|
let lines = []
|
||||||
let bullet = repeat(' ', vimwiki#lst#get_list_margin()).vimwiki#lst#default_symbol().' '
|
let bullet = repeat(' ', vimwiki#lst#get_list_margin()).vimwiki#lst#default_symbol().' '
|
||||||
let current_dir = vimwiki#base#current_subdir()
|
let current_dir = vimwiki#base#current_subdir()
|
||||||
for tagname in sort(keys(tags_entries))
|
for tagname in tagnames
|
||||||
if need_all_tags || index(self.specific_tags, tagname) != -1
|
if len(lines) > 0
|
||||||
if len(lines) > 0
|
call add(lines, '')
|
||||||
|
endif
|
||||||
|
|
||||||
|
let tag_tpl = printf('rxH%d_Template', self.header_level + 1)
|
||||||
|
call add(lines, s:safesubstitute(vimwiki#vars#get_syntaxlocal(tag_tpl), '__Header__', tagname, ''))
|
||||||
|
|
||||||
|
if vimwiki#vars#get_wikilocal('syntax') ==# 'markdown'
|
||||||
|
for _ in range(vimwiki#vars#get_global('markdown_header_style'))
|
||||||
call add(lines, '')
|
call add(lines, '')
|
||||||
endif
|
|
||||||
|
|
||||||
let tag_tpl = printf('rxH%d_Template', self.header_level + 1)
|
|
||||||
call add(lines, s:safesubstitute(vimwiki#vars#get_syntaxlocal(tag_tpl), '__Header__', tagname, ''))
|
|
||||||
|
|
||||||
if vimwiki#vars#get_wikilocal('syntax') ==# 'markdown'
|
|
||||||
for _ in range(vimwiki#vars#get_global('markdown_header_style'))
|
|
||||||
call add(lines, '')
|
|
||||||
endfor
|
|
||||||
endif
|
|
||||||
|
|
||||||
for [taglink, tagdescription] in sort(tags_entries[tagname])
|
|
||||||
let taglink = vimwiki#path#relpath(current_dir, taglink)
|
|
||||||
if vimwiki#vars#get_wikilocal('syntax') ==# 'markdown'
|
|
||||||
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('Link1')
|
|
||||||
let entry = s:safesubstitute(link_tpl, '__LinkUrl__', taglink, '')
|
|
||||||
let entry = s:safesubstitute(entry, '__LinkDescription__', tagdescription, '')
|
|
||||||
let file_extension = vimwiki#vars#get_wikilocal('ext', vimwiki#vars#get_bufferlocal('wiki_nr'))
|
|
||||||
let entry = s:safesubstitute(entry, '__FileExtension__', file_extension , '')
|
|
||||||
else
|
|
||||||
let link_caption = split(tagdescription, '#', 0)[-1]
|
|
||||||
let link_text = split(taglink, '#', 1)[0]
|
|
||||||
let entry = s:safesubstitute(link_tpl, '__LinkUrl__', link_text, '')
|
|
||||||
let entry = s:safesubstitute(entry, '__LinkAnchor__', link_infos.anchor, '')
|
|
||||||
let entry = s:safesubstitute(entry, '__LinkDescription__', link_caption, '')
|
|
||||||
let file_extension = vimwiki#vars#get_wikilocal('ext', vimwiki#vars#get_bufferlocal('wiki_nr'))
|
|
||||||
let entry = s:safesubstitute(entry, '__FileExtension__', file_extension , '')
|
|
||||||
endif
|
|
||||||
|
|
||||||
call add(lines, bullet . entry)
|
|
||||||
else
|
|
||||||
let link_tpl = vimwiki#vars#get_global('WikiLinkTemplate1')
|
|
||||||
let file_extension = vimwiki#vars#get_wikilocal('ext', vimwiki#vars#get_bufferlocal('wiki_nr'))
|
|
||||||
let link_tpl = s:safesubstitute(link_tpl, '__FileExtension__', file_extension , '')
|
|
||||||
call add(lines, bullet . substitute(link_tpl, '__LinkUrl__', taglink, ''))
|
|
||||||
endif
|
|
||||||
endfor
|
endfor
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
for [taglink, tagdescription] in sort(tags_entries[tagname])
|
||||||
|
let taglink = vimwiki#path#relpath(current_dir, taglink)
|
||||||
|
if vimwiki#vars#get_wikilocal('syntax') ==# 'markdown'
|
||||||
|
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('Link1')
|
||||||
|
let entry = s:safesubstitute(link_tpl, '__LinkUrl__', taglink, '')
|
||||||
|
let entry = s:safesubstitute(entry, '__LinkDescription__', tagdescription, '')
|
||||||
|
let file_extension = vimwiki#vars#get_wikilocal('ext', vimwiki#vars#get_bufferlocal('wiki_nr'))
|
||||||
|
let entry = s:safesubstitute(entry, '__FileExtension__', file_extension , '')
|
||||||
|
else
|
||||||
|
let link_caption = split(tagdescription, '#', 0)[-1]
|
||||||
|
let link_text = split(taglink, '#', 1)[0]
|
||||||
|
let entry = s:safesubstitute(link_tpl, '__LinkUrl__', link_text, '')
|
||||||
|
let entry = s:safesubstitute(entry, '__LinkAnchor__', link_infos.anchor, '')
|
||||||
|
let entry = s:safesubstitute(entry, '__LinkDescription__', link_caption, '')
|
||||||
|
let file_extension = vimwiki#vars#get_wikilocal('ext', vimwiki#vars#get_bufferlocal('wiki_nr'))
|
||||||
|
let entry = s:safesubstitute(entry, '__FileExtension__', file_extension , '')
|
||||||
|
endif
|
||||||
|
|
||||||
|
call add(lines, bullet . entry)
|
||||||
|
else
|
||||||
|
let link_tpl = vimwiki#vars#get_global('WikiLinkTemplate1')
|
||||||
|
let file_extension = vimwiki#vars#get_wikilocal('ext', vimwiki#vars#get_bufferlocal('wiki_nr'))
|
||||||
|
let link_tpl = s:safesubstitute(link_tpl, '__FileExtension__', file_extension , '')
|
||||||
|
call add(lines, bullet . substitute(link_tpl, '__LinkUrl__', taglink, ''))
|
||||||
|
endif
|
||||||
|
endfor
|
||||||
endfor
|
endfor
|
||||||
|
|
||||||
return lines
|
return lines
|
||||||
|
|||||||
@@ -0,0 +1,63 @@
|
|||||||
|
# Test how vimwiki#tags#generate_tags behaves when updating existing tag link sections
|
||||||
|
|
||||||
|
Before (Setup test wiki files):
|
||||||
|
call writefile([":usedtag:", ":othertag:"], expand("~/testmarkdown/Test-Tag-tagged.md"))
|
||||||
|
edit ~/testmarkdown/Test-Tag-links.md
|
||||||
|
|
||||||
|
After (Cleanup files):
|
||||||
|
%delete
|
||||||
|
call system("rm $HOME/testmarkdown/.vimwiki_tags")
|
||||||
|
call system("rm $HOME/testmarkdown/Test-Tag-tagged.md")
|
||||||
|
call system("rm $HOME/testmarkdown/Test-Tag-links.md")
|
||||||
|
|
||||||
|
|
||||||
|
Do (Create preexisting tag links with unused tag):
|
||||||
|
I
|
||||||
|
# Generated Tags\<CR>
|
||||||
|
\<CR>
|
||||||
|
## unusedtag\<CR>
|
||||||
|
\<CR>
|
||||||
|
## usedtag\<CR>
|
||||||
|
\<ESC>
|
||||||
|
:VimwikiRebuildTags!\<CR>
|
||||||
|
:call vimwiki#tags#generate_tags(0)\<CR>
|
||||||
|
|
||||||
|
Expect (Keeps unused tag header):
|
||||||
|
# Generated Tags
|
||||||
|
|
||||||
|
## unusedtag
|
||||||
|
|
||||||
|
|
||||||
|
## usedtag
|
||||||
|
|
||||||
|
- [Test-Tag-tagged](Test-Tag-tagged)
|
||||||
|
|
||||||
|
Do (Create preexisting tag subheadings out of alphabetical order):
|
||||||
|
I
|
||||||
|
# Generated Tags\<CR>
|
||||||
|
\<CR>
|
||||||
|
## z\<CR>
|
||||||
|
\<CR>
|
||||||
|
## usedtag\<CR>
|
||||||
|
\<CR>
|
||||||
|
## a\<CR>
|
||||||
|
\<CR>
|
||||||
|
# Other Stuff
|
||||||
|
\<ESC>
|
||||||
|
:VimwikiRebuildTags!\<CR>
|
||||||
|
:call vimwiki#tags#generate_tags(0)\<CR>
|
||||||
|
|
||||||
|
Expect (Existing tag subheading order is preserved):
|
||||||
|
# Generated Tags
|
||||||
|
|
||||||
|
## z
|
||||||
|
|
||||||
|
|
||||||
|
## usedtag
|
||||||
|
|
||||||
|
- [Test-Tag-tagged](Test-Tag-tagged)
|
||||||
|
|
||||||
|
## a
|
||||||
|
|
||||||
|
|
||||||
|
# Other Stuff
|
||||||
Reference in New Issue
Block a user