slightly change the semantics of file: and local: scheme
This commit is contained in:
parent
99494655c2
commit
77607f635a
@ -270,7 +270,6 @@ function! vimwiki#base#resolve_link(link_text, ...) "{{{
|
||||
\ 'scheme': '',
|
||||
\ 'filename': '',
|
||||
\ 'anchor': '',
|
||||
\ 'relative': 0,
|
||||
\ }
|
||||
|
||||
|
||||
@ -303,12 +302,14 @@ function! vimwiki#base#resolve_link(link_text, ...) "{{{
|
||||
|
||||
" check if absolute or relative path
|
||||
if is_wiki_link && link_text[0] == '/'
|
||||
let link_text = link_text[1:]
|
||||
let link_infos.relative = 0
|
||||
if link_text != '/'
|
||||
let link_text = link_text[1:]
|
||||
endif
|
||||
let is_relative = 0
|
||||
elseif !is_wiki_link && vimwiki#path#is_absolute(link_text)
|
||||
let link_infos.relative = 0
|
||||
let is_relative = 0
|
||||
else
|
||||
let link_infos.relative = 1
|
||||
let is_relative = 1
|
||||
let root_dir = fnamemodify(source_file, ':p:h') . '/'
|
||||
endif
|
||||
|
||||
@ -321,7 +322,7 @@ function! vimwiki#base#resolve_link(link_text, ...) "{{{
|
||||
return link_infos
|
||||
endif
|
||||
|
||||
if !link_infos.relative || link_infos.index != source_wiki
|
||||
if !is_relative || link_infos.index != source_wiki
|
||||
let root_dir = VimwikiGet('path', link_infos.index)
|
||||
endif
|
||||
|
||||
@ -345,7 +346,7 @@ function! vimwiki#base#resolve_link(link_text, ...) "{{{
|
||||
\ link_text .
|
||||
\ VimwikiGet('ext', link_infos.index)
|
||||
elseif (link_infos.scheme ==# 'file' || link_infos.scheme ==# 'local')
|
||||
\ && link_infos.relative
|
||||
\ && is_relative
|
||||
let link_infos.filename = simplify(root_dir . link_text)
|
||||
else " absolute file link
|
||||
" collapse repeated leading "/"'s within a link
|
||||
|
@ -380,12 +380,16 @@ function! s:tag_wikiincl(value) "{{{
|
||||
echom string(link_infos)
|
||||
endif
|
||||
|
||||
let url = link_infos.filename
|
||||
|
||||
" strip the .html extension when we have wiki links, so that the user can
|
||||
" simply write {{image.png}} to include an image from the wiki directory
|
||||
if link_infos.scheme =~# '\mwiki\d\+\|diary'
|
||||
let url = fnamemodify(url, ':r')
|
||||
if link_infos.scheme =~# '\mlocal\|wiki\d\+\|diary'
|
||||
let url = vimwiki#path#relpath(fnamemodify(s:current_html_file, ':h'),
|
||||
\ link_infos.filename)
|
||||
" strip the .html extension when we have wiki links, so that the user can
|
||||
" simply write {{image.png}} to include an image from the wiki directory
|
||||
if link_infos.scheme =~# '\mwiki\d\+\|diary'
|
||||
let url = fnamemodify(url, ':r')
|
||||
endif
|
||||
else
|
||||
let url = link_infos.filename
|
||||
endif
|
||||
|
||||
let url = escape(url, '#')
|
||||
@ -412,16 +416,17 @@ function! s:tag_wikilink(value) "{{{
|
||||
if line == ''
|
||||
let link_infos = vimwiki#base#resolve_link(url, s:current_wiki_file)
|
||||
|
||||
if link_infos.scheme ==# 'file' || link_infos.scheme ==# 'local'
|
||||
if link_infos.scheme ==# 'file'
|
||||
" external file links are always absolute
|
||||
let html_link = link_infos.filename
|
||||
elseif link_infos.scheme ==# 'local'
|
||||
let html_link = vimwiki#path#relpath(fnamemodify(s:current_html_file,
|
||||
\ ':h'), link_infos.filename)
|
||||
else
|
||||
" wiki links are always relative to the current file
|
||||
echom link_infos.filename fnamemodify(s:current_wiki_file, ':h') fnamemodify(link_infos.filename, ':r')
|
||||
let html_link = vimwiki#path#relpath(
|
||||
\ fnamemodify(s:current_wiki_file, ':h'),
|
||||
\ fnamemodify(link_infos.filename, ':r'))
|
||||
echom html_link
|
||||
if html_link !~ '\m/$'
|
||||
let html_link .= '.html'
|
||||
endif
|
||||
|
115
doc/vimwiki.txt
115
doc/vimwiki.txt
@ -755,7 +755,7 @@ To jump from that file back to the index file, use this link: >
|
||||
[[../index]]
|
||||
or: >
|
||||
[[/index]]
|
||||
The latter works, because wiki links starting with "/" are considered to be
|
||||
The latter works because wiki links starting with "/" are considered to be
|
||||
absolute to the wiki root directory, that is, the link [[/index]] always opens
|
||||
the file /path/to/your/wiki/index.wiki, no matter in which subdirectory you
|
||||
are currently in.
|
||||
@ -776,6 +776,13 @@ Raw URLs are also supported: >
|
||||
mailto:habamax@gmail.com
|
||||
ftp://vim.org
|
||||
|
||||
External files~
|
||||
|
||||
You can open arbitrary files like this: >
|
||||
[[file:/important/documents/document.pdf]]
|
||||
|
||||
See |vimwiki-syntax-schemes|.
|
||||
|
||||
Anchors~
|
||||
|
||||
A URL can be followed by a '#' and the name of an anchor. When opening a
|
||||
@ -826,11 +833,6 @@ as a wiki page.
|
||||
To scan the page for new or changed definitions for reference-links, simply
|
||||
re-open the page ":e<CR>".
|
||||
|
||||
Typing wikilinks can be simplified by using Vim's omni completion (see
|
||||
|compl-omni|) like so: >
|
||||
[[ind<C-X><C-O>
|
||||
which opens up a popup menu with all the wiki files starting with "ind".
|
||||
|
||||
------------------------------------------------------------------------------
|
||||
5.3. Headers *vimwiki-syntax-headers*
|
||||
|
||||
@ -1114,24 +1116,24 @@ E.g.: >
|
||||
------------------------------------------------------------------------------
|
||||
5.12. Schemes *vimwiki-syntax-schemes*
|
||||
|
||||
In addition to standard web schemes (e.g. `http:`, `https:`, `ftp:`, etc.) a
|
||||
number of special schemes are supported: "wiki#:", "local:", "diary:",
|
||||
"file:", and schemeless.
|
||||
In addition to standard web schemes (e.g. "http:", "https:", "ftp:", etc.) a
|
||||
number of special schemes are supported: "wikiX:", "diary:", "file:", "local:"
|
||||
and schemeless.
|
||||
|
||||
While "wiki:#", "diary" and schemeless links are automatically opened in Vi,
|
||||
While "wikiX", "diary" and schemeless links are automatically opened in Vim,
|
||||
all other links are opened with the system command. To customize this
|
||||
behavior, see |VimwikiLinkHandler|.
|
||||
|
||||
Interwiki:~
|
||||
|
||||
If you maintain more than one wiki, you can create interwiki links between them
|
||||
by adding a numbered prefix "wiki#:" in front of a link: >
|
||||
[[wiki#:This is a link]]
|
||||
by adding a numbered prefix "wikiX:" in front of a link: >
|
||||
[[wiki1:This is a link]]
|
||||
or: >
|
||||
[[wiki#:This is a link source|Description of the link]]
|
||||
[[wiki1:This is a link source|Description of the link]]
|
||||
|
||||
The number "#", in the range 0..N-1, identifies the destination wiki in
|
||||
|g:vimwiki_list|.
|
||||
The number behind "wiki" is in the range 0..N-1 and identifies the destination
|
||||
wiki in |g:vimwiki_list|.
|
||||
|
||||
Diary:~
|
||||
|
||||
@ -1142,32 +1144,27 @@ This scheme precludes explicit inclusion of |vimwiki-option-diary_rel_path|,
|
||||
and is most useful on subwiki pages to avoid links such as: >
|
||||
[[../../diary/2012-03-05]]
|
||||
|
||||
Local:~
|
||||
External files:~
|
||||
|
||||
A local resource that is not a wiki page may be specified with a path relative
|
||||
to the current page: >
|
||||
[[local:../assets/data.csv|data (CSV)]]
|
||||
|
||||
When followed or converted to HTML, extensions of local-scheme links are not
|
||||
modified.
|
||||
|
||||
File:~
|
||||
|
||||
The file scheme allows you to directly link to arbitray resources using
|
||||
absolute paths and extensions: >
|
||||
[[file:///home/somebody/a/b/c/music.mp3]]
|
||||
The file and local schemes allow you to directly link to arbitray resources
|
||||
using absolute or relative paths with extension: >
|
||||
[[file:/home/somebody/a/b/c/music.mp3]]
|
||||
[[file:C:/Users/somebody/d/e/f/music.mp3]]
|
||||
[[file:~/a/b/c/music.mp3]]
|
||||
[[file:../assets/data.csv|data (CSV)]]
|
||||
[[local:C:/Users/somebody/d/e/f/music.mp3]]
|
||||
|
||||
In Vim, "file:" and "local:" behave the same, i.e. you can use them with both
|
||||
relative and absolute links. When converted to HTML, however, "file:" links
|
||||
will become absolute links, while "local:" links become relative to the HTML
|
||||
output directory. The latter can be useful if you copy your HTML files to
|
||||
another computer.
|
||||
To customize the HTML conversion of links, see |VimwikiLinkConverter|.
|
||||
|
||||
Schemeless:~
|
||||
|
||||
Schemeless URLs, which are the default, are treated internally as "wiki#:"
|
||||
URLs in all respects except when converted to Html.
|
||||
|
||||
Schemeless links convert to plain relative path URLs, nearly verbatim: >
|
||||
relpath/wikipage.html
|
||||
|
||||
The "wiki#:", "local:", and "diary:" schemes use absolute paths as URLs: >
|
||||
file:///abs_path_to_html#/relpath/wikipage.html
|
||||
Schemeless URLs, which are the default, are treated internally as "wikiX:"
|
||||
URLs in all respects, where X is the number of the current wiki.
|
||||
|
||||
When |vimwiki-option-maxhi| equals 1, a distinct highlighting style is used to
|
||||
identify schemeless links whose targets are not found. All other links appear
|
||||
@ -1188,7 +1185,7 @@ relative, and need not end with an extension.
|
||||
The primary purpose for wiki-include links is to include images.
|
||||
|
||||
Transclude from a local URL: >
|
||||
{{local:../../images/vimwiki_logo.png}}
|
||||
{{file:../../images/vimwiki_logo.png}}
|
||||
or from a universal URL: >
|
||||
{{http://vimwiki.googlecode.com/hg/images/vimwiki_logo.png}}
|
||||
|
||||
@ -2228,9 +2225,9 @@ wiki-include link or a weblink, is first passed to |VimwikiLinkHandler| to see
|
||||
if it can be handled. The return value 1/0 indicates success.
|
||||
|
||||
If the link is not handled successfully, the behavior of Vimwiki depends on
|
||||
the scheme. Wiki:, diary: or schemeless links are opened in Vim. All others,
|
||||
including local: and file: schemes, are opened with a system default handler;
|
||||
i.e. Linux (!xdg-open), Mac (!open), and Windows (!start).
|
||||
the scheme. "wiki:", "diary:" or schemeless links are opened in Vim. "file:"
|
||||
and "local:" links are opened with a system default handler; i.e. Linux
|
||||
(!xdg-open), Mac (!open), and Windows (!start).
|
||||
|
||||
You can redefine |VimwikiLinkHandler| function to do something else: >
|
||||
|
||||
@ -2245,34 +2242,31 @@ You can redefine |VimwikiLinkHandler| function to do something else: >
|
||||
return 0
|
||||
endfunction
|
||||
|
||||
A second example handles two new schemes, 'vlocal:' and 'vfile:', which behave
|
||||
similar to 'local:' and 'file:' schemes, but are always opened with Vim: >
|
||||
A second example handles a new scheme, 'vfile:', which behaves similar to
|
||||
'file:', but the files are always opened with Vim: >
|
||||
|
||||
function! VimwikiLinkHandler(link) "{{{ Use Vim to open links with the
|
||||
" 'vlocal:' or 'vfile:' schemes. E.g.:
|
||||
" 1) [[vfile:///~/Code/PythonProject/abc123.py]], and
|
||||
" 2) [[vlocal:./|Wiki Home]]
|
||||
function! VimwikiLinkHandler(link)
|
||||
" Use Vim to open external files with the 'vfile:' scheme. E.g.:
|
||||
" 1) [[vfile:~/Code/PythonProject/abc123.py]]
|
||||
" 2) [[vfile:./|Wiki Home]]
|
||||
let link = a:link
|
||||
if link =~ "vlocal:" || link =~ "vfile:"
|
||||
if link =~ "vfile:"
|
||||
let link = link[1:]
|
||||
else
|
||||
return 0
|
||||
endif
|
||||
let [idx, scheme, path, subdir, lnk, ext, url, anchor] =
|
||||
\ vimwiki#base#resolve_scheme(link, 0)
|
||||
if g:vimwiki_debug
|
||||
echom 'LinkHandler: idx='.idx.', scheme=[v]'.scheme.', path='.path.
|
||||
\ ', subdir='.subdir.', lnk='.lnk.', ext='.ext.', url='.url.
|
||||
\ ', anchor='.anchor
|
||||
endif
|
||||
if url == '' && anchor == ''
|
||||
let link_infos = vimwiki#base#resolve_link(link)
|
||||
if link_infos.filename == ''
|
||||
echom 'Vimwiki Error: Unable to resolve link!'
|
||||
return 0
|
||||
else
|
||||
call vimwiki#base#edit_file('tabnew', url, anchor, [], 0)
|
||||
exe 'tabnew ' . fnameescape(link_infos.filename)
|
||||
return 1
|
||||
endif
|
||||
endfunction " }}}
|
||||
endfunction
|
||||
|
||||
------------------------------------------------------------------------------
|
||||
*VimwikiLinkConverter*
|
||||
|
||||
|
||||
------------------------------------------------------------------------------
|
||||
@ -2291,13 +2285,12 @@ cannot otherwise convert the link. A customized handler might look like this: >
|
||||
" complete URL
|
||||
let url_0 = matchstr(str, g:vimwiki_rxWikiInclMatchUrl)
|
||||
" URL parts
|
||||
let [scheme, path, subdir, lnk, ext, url, anchor] =
|
||||
\ vimwiki#base#resolve_scheme(url_0, VimwikiGet('ext'))
|
||||
let link_infos = vimwiki#base#resolve_link(url_0)
|
||||
let arg1 = matchstr(str, VimwikiWikiInclMatchArg(1))
|
||||
let arg2 = matchstr(str, VimwikiWikiInclMatchArg(2))
|
||||
|
||||
if arg1 =~ '#'
|
||||
return url.'#'.arg2
|
||||
return link_infos.filename.'#'.arg2
|
||||
endif
|
||||
|
||||
" Return the empty string when unable to process link
|
||||
@ -2624,7 +2617,7 @@ Vim plugins: http://www.vim.org/scripts/script.php?script_id=2226
|
||||
|
||||
???~
|
||||
|
||||
* Spport for |g:vimwiki_auto_chdir| option.
|
||||
* Support for |g:vimwiki_auto_chdir| option.
|
||||
* Support for anchors, see |vimwiki-anchors|
|
||||
* in this context, add support for TOC, see |vimwiki-toc|
|
||||
* remove the now useless %toc placeholder
|
||||
|
@ -365,9 +365,15 @@ if !exists("*VimwikiLinkHandler") "{{{
|
||||
endfunction
|
||||
endif "}}}
|
||||
|
||||
if !exists("*VimwikiLinkConverter") "{{{
|
||||
function VimwikiLinkConverter(url, source, target)
|
||||
" Return the empty string when unable to process link
|
||||
return ''
|
||||
endfunction
|
||||
endif "}}}
|
||||
|
||||
if !exists("*VimwikiWikiIncludeHandler") "{{{
|
||||
function! VimwikiWikiIncludeHandler(value) "{{{
|
||||
" Return the empty string when unable to process link
|
||||
return ''
|
||||
endfunction "}}}
|
||||
endif "}}}
|
||||
|
Loading…
Reference in New Issue
Block a user