Version 2.0.1.stu
* Follow (i.e. open target of) markdown reference-style links. * Bug fixes.
This commit is contained in:
@@ -1,10 +1,190 @@
|
||||
" vim:tabstop=2:shiftwidth=2:expandtab:foldmethod=marker:textwidth=79
|
||||
" Vimwiki autoload plugin file
|
||||
" Desc: Link functions for markdown syntax
|
||||
" Author: Maxim Kim <habamax@gmail.com>
|
||||
" Author: Stuart Andrews <stu.andrews@gmail.com> (.. i.e. don't blame Maxim!)
|
||||
" Home: http://code.google.com/p/vimwiki/
|
||||
|
||||
|
||||
" MISC helper functions {{{
|
||||
|
||||
" vimwiki#markdown_base#reset_mkd_refs
|
||||
function! vimwiki#markdown_base#reset_mkd_refs() "{{{
|
||||
call VimwikiClear('markdown_refs')
|
||||
endfunction "}}}
|
||||
|
||||
" vimwiki#markdown_base#scan_reflinks
|
||||
function! vimwiki#markdown_base#scan_reflinks() " {{{
|
||||
let mkd_refs = {}
|
||||
" construct list of references using vimgrep
|
||||
try
|
||||
execute 'vimgrep #'.g:vimwiki_rxMkdRef.'#j %'
|
||||
catch /^Vim\%((\a\+)\)\=:E480/ " No Match
|
||||
"Ignore it, and move on to the next file
|
||||
endtry
|
||||
"
|
||||
for d in getqflist()
|
||||
let matchline = join(getline(d.lnum, min([d.lnum+1, line('$')])), ' ')
|
||||
let descr = matchstr(matchline, g:vimwiki_rxMkdRefMatchDescr)
|
||||
let url = matchstr(matchline, g:vimwiki_rxMkdRefMatchUrl)
|
||||
if descr != '' && url != ''
|
||||
let mkd_refs[descr] = url
|
||||
endif
|
||||
endfor
|
||||
call VimwikiSet('markdown_refs', mkd_refs)
|
||||
return mkd_refs
|
||||
endfunction "}}}
|
||||
|
||||
|
||||
" vimwiki#markdown_base#get_reflinks
|
||||
function! vimwiki#markdown_base#get_reflinks() " {{{
|
||||
let done = 1
|
||||
try
|
||||
let mkd_refs = VimwikiGet('markdown_refs')
|
||||
catch
|
||||
" work-around hack
|
||||
let done = 0
|
||||
" ... the following command does not work inside catch block !?
|
||||
" > let mkd_refs = vimwiki#markdown_base#scan_reflinks()
|
||||
endtry
|
||||
if !done
|
||||
let mkd_refs = vimwiki#markdown_base#scan_reflinks()
|
||||
endif
|
||||
return mkd_refs
|
||||
endfunction "}}}
|
||||
|
||||
" vimwiki#markdown_base#open_reflink
|
||||
" try markdown reference links
|
||||
function! vimwiki#markdown_base#open_reflink(link) " {{{
|
||||
" echom "vimwiki#markdown_base#open_reflink"
|
||||
let link = a:link
|
||||
let mkd_refs = vimwiki#markdown_base#get_reflinks()
|
||||
if has_key(mkd_refs, link)
|
||||
let url = mkd_refs[link]
|
||||
call vimwiki#base#system_open_link(url)
|
||||
return 1
|
||||
else
|
||||
return 0
|
||||
endif
|
||||
endfunction " }}}
|
||||
|
||||
" s:normalize_path
|
||||
" s:path_html
|
||||
" vimwiki#base#apply_wiki_options
|
||||
" vimwiki#base#read_wiki_options
|
||||
" vimwiki#base#validate_wiki_options
|
||||
" vimwiki#base#setup_buffer_state
|
||||
" vimwiki#base#cache_buffer_state
|
||||
" vimwiki#base#recall_buffer_state
|
||||
" vimwiki#base#print_wiki_state
|
||||
" vimwiki#base#mkdir
|
||||
" vimwiki#base#file_pattern
|
||||
" vimwiki#base#branched_pattern
|
||||
" vimwiki#base#subdir
|
||||
" vimwiki#base#current_subdir
|
||||
" vimwiki#base#invsubdir
|
||||
" vimwiki#base#resolve_scheme
|
||||
" vimwiki#base#system_open_link
|
||||
" vimwiki#base#open_link
|
||||
" vimwiki#base#generate_links
|
||||
" vimwiki#base#goto
|
||||
" vimwiki#base#backlinks
|
||||
" vimwiki#base#get_links
|
||||
" vimwiki#base#edit_file
|
||||
" vimwiki#base#search_word
|
||||
" vimwiki#base#matchstr_at_cursor
|
||||
" vimwiki#base#replacestr_at_cursor
|
||||
" s:print_wiki_list
|
||||
" s:update_wiki_link
|
||||
" s:update_wiki_links_dir
|
||||
" s:tail_name
|
||||
" s:update_wiki_links
|
||||
" s:get_wiki_buffers
|
||||
" s:open_wiki_buffer
|
||||
" vimwiki#base#nested_syntax
|
||||
" }}}
|
||||
|
||||
" WIKI link following functions {{{
|
||||
" vimwiki#base#find_next_link
|
||||
" vimwiki#base#find_prev_link
|
||||
|
||||
" vimwiki#base#follow_link
|
||||
function! vimwiki#markdown_base#follow_link(split, ...) "{{{ Parse link at cursor and pass
|
||||
" to VimwikiLinkHandler, or failing that, the default open_link handler
|
||||
" echom "markdown_base#follow_link"
|
||||
|
||||
if 0
|
||||
" Syntax-specific links
|
||||
" XXX: @Stuart: do we still need it?
|
||||
" XXX: @Maxim: most likely! I am still working on a seemless way to
|
||||
" integrate regexp's without complicating syntax/vimwiki.vim
|
||||
else
|
||||
if a:split == "split"
|
||||
let cmd = ":split "
|
||||
elseif a:split == "vsplit"
|
||||
let cmd = ":vsplit "
|
||||
elseif a:split == "tabnew"
|
||||
let cmd = ":tabnew "
|
||||
else
|
||||
let cmd = ":e "
|
||||
endif
|
||||
|
||||
" try WikiLink
|
||||
let lnk = matchstr(vimwiki#base#matchstr_at_cursor(g:vimwiki_rxWikiLink),
|
||||
\ g:vimwiki_rxWikiLinkMatchUrl)
|
||||
" try WikiIncl
|
||||
if lnk == ""
|
||||
let lnk = matchstr(vimwiki#base#matchstr_at_cursor(g:vimwiki_rxWikiIncl),
|
||||
\ g:vimwiki_rxWikiInclMatchUrl)
|
||||
endif
|
||||
" try Weblink
|
||||
if lnk == ""
|
||||
let lnk = matchstr(vimwiki#base#matchstr_at_cursor(g:vimwiki_rxWeblink),
|
||||
\ g:vimwiki_rxWeblinkMatchUrl)
|
||||
endif
|
||||
|
||||
if lnk != ""
|
||||
if !VimwikiLinkHandler(lnk)
|
||||
if !vimwiki#markdown_base#open_reflink(lnk)
|
||||
call vimwiki#base#open_link(cmd, lnk)
|
||||
endif
|
||||
endif
|
||||
return
|
||||
endif
|
||||
|
||||
if a:0 > 0
|
||||
execute "normal! ".a:1
|
||||
else
|
||||
call vimwiki#base#normalize_link(0)
|
||||
endif
|
||||
endif
|
||||
|
||||
endfunction " }}}
|
||||
|
||||
" vimwiki#base#go_back_link
|
||||
" vimwiki#base#goto_index
|
||||
" vimwiki#base#delete_link
|
||||
" vimwiki#base#rename_link
|
||||
" vimwiki#base#ui_select
|
||||
|
||||
" TEXT OBJECTS functions {{{
|
||||
" vimwiki#base#TO_header
|
||||
" vimwiki#base#TO_table_cell
|
||||
" vimwiki#base#TO_table_col
|
||||
" }}}
|
||||
|
||||
" HEADER functions {{{
|
||||
" vimwiki#base#AddHeaderLevel
|
||||
" vimwiki#base#RemoveHeaderLevel
|
||||
"}}}
|
||||
|
||||
" LINK functions {{{
|
||||
" vimwiki#base#apply_template
|
||||
|
||||
" s:clean_url
|
||||
" vimwiki#base#normalize_link_helper
|
||||
" vimwiki#base#normalize_imagelink_helper
|
||||
|
||||
" s:normalize_link_syntax_n
|
||||
function! s:normalize_link_syntax_n() " {{{
|
||||
let lnum = line('.')
|
||||
|
||||
@@ -74,6 +254,7 @@ function! s:normalize_link_syntax_n() " {{{
|
||||
|
||||
endfunction " }}}
|
||||
|
||||
" s:normalize_link_syntax_v
|
||||
function! s:normalize_link_syntax_v() " {{{
|
||||
let lnum = line('.')
|
||||
let sel_save = &selection
|
||||
@@ -99,13 +280,23 @@ function! s:normalize_link_syntax_v() " {{{
|
||||
|
||||
endfunction " }}}
|
||||
|
||||
" normalize_link
|
||||
" vimwiki#base#normalize_link
|
||||
function! vimwiki#markdown_base#normalize_link(is_visual_mode) "{{{
|
||||
if !a:is_visual_mode
|
||||
call s:normalize_link_syntax_n()
|
||||
elseif visualmode() ==# 'v' && line("'<") == line("'>")
|
||||
" action undefined for 'line-wise' or 'multi-line' visual mode selections
|
||||
call s:normalize_link_syntax_v()
|
||||
if 0
|
||||
" Syntax-specific links
|
||||
else
|
||||
if !a:is_visual_mode
|
||||
call s:normalize_link_syntax_n()
|
||||
elseif visualmode() ==# 'v' && line("'<") == line("'>")
|
||||
" action undefined for 'line-wise' or 'multi-line' visual mode selections
|
||||
call s:normalize_link_syntax_v()
|
||||
endif
|
||||
endif
|
||||
endfunction "}}}
|
||||
|
||||
" }}}
|
||||
|
||||
" -------------------------------------------------------------------------
|
||||
" Load syntax-specific Wiki functionality
|
||||
" -------------------------------------------------------------------------
|
||||
|
||||
|
||||
Reference in New Issue
Block a user