diff --git a/autoload/vimwiki/base.vim b/autoload/vimwiki/base.vim index 2eeae95..39ae7ff 100644 --- a/autoload/vimwiki/base.vim +++ b/autoload/vimwiki/base.vim @@ -20,165 +20,17 @@ function! s:vimwiki_get_known_syntaxes() " {{{ " Getting all syntaxes that different wikis could have let syntaxes = {} let syntaxes['default'] = 1 - for wiki in g:vimwiki_list - if has_key(wiki, 'syntax') - let syntaxes[wiki.syntax] = 1 - endif + for wiki_nr in range(vimwiki#vars#number_of_wikis()) + let wiki_syntax = vimwiki#vars#get_wikilocal('syntax', wiki_nr) + let syntaxes[wiki_syntax] = 1 endfor - " append map g:vimwiki_ext2syntax - for syn in values(g:vimwiki_ext2syntax) + " also consider the syntaxes from g:vimwiki_ext2syntax + for syn in values(vimwiki#vars#get_global('ext2syntax')) let syntaxes[syn] = 1 endfor return keys(syntaxes) endfunction " }}} -" vimwiki#base#apply_wiki_options -function! vimwiki#base#apply_wiki_options(options) " {{{ Update the current - " wiki using the options dictionary - for kk in keys(a:options) - let g:vimwiki_list[g:vimwiki_current_idx][kk] = a:options[kk] - endfor - call Validate_wiki_options(g:vimwiki_current_idx) - call vimwiki#base#setup_buffer_state(g:vimwiki_current_idx) -endfunction " }}} - -" vimwiki#base#read_wiki_options -function! vimwiki#base#read_wiki_options(check) " {{{ Attempt to read wiki - " options from the current page's directory, or its ancesters. If a file - " named vimwiki.vimrc is found, which declares a wiki-options dictionary - " named g:local_wiki, a message alerts the user that an update has been - " found and may be applied. If the argument check=1, the user is queried - " before applying the update to the current wiki's option. - - " Save global vimwiki options ... after all, the global list is often - " initialized for the first time in vimrc files, and we don't want to - " overwrite !! (not to mention all the other globals ...) - let l:vimwiki_list = deepcopy(g:vimwiki_list, 1) - " - if a:check > 1 - call vimwiki#base#print_wiki_state() - echo " \n" - endif - " - let g:local_wiki = {} - let done = 0 - " ... start the wild-goose chase! - for invsubdir in ['.', '..', '../..', '../../..'] - " other names are possible, but most vimrc files will cause grief! - for nm in ['vimwiki.vimrc'] - " TODO: use an alternate strategy, instead of source, to read options - if done - continue - endif - " - let local_wiki_options_filename = expand('%:p:h').'/'.invsubdir.'/'.nm - if !filereadable(local_wiki_options_filename) - continue - endif - " - echo "\nFound file : ".local_wiki_options_filename - let query = "Vimwiki: Check for options in this file [Y]es/[n]o? " - if a:check > 0 && input(query) =~? '^n') - continue - endif - " - try - execute 'source '.local_wiki_options_filename - catch - endtry - if empty(g:local_wiki) - continue - endif - " - if a:check > 0 - echo "\n\nFound wiki options\n g:local_wiki = ".string(g:local_wiki) - let query = "Vimwiki: Apply these options [Y]es/[n]o? " - if input(query) =~? '^n' - let g:local_wiki = {} - continue - endif - endif - " - " restore global list - " - this prevents corruption by g:vimwiki_list in options_file - let g:vimwiki_list = deepcopy(l:vimwiki_list, 1) - " - call vimwiki#base#apply_wiki_options(g:local_wiki) - let done = 1 - endfor - endfor - if !done - " - " restore global list, if no local options were found - " - this prevents corruption by g:vimwiki_list in options_file - let g:vimwiki_list = deepcopy(l:vimwiki_list, 1) - " - endif - if a:check > 1 - echo " \n " - if done - call vimwiki#base#print_wiki_state() - else - echo "Vimwiki: No options were applied." - endif - endif -endfunction " }}} - -" vimwiki#base#setup_buffer_state -function! vimwiki#base#setup_buffer_state(idx) " {{{ Init page-specific variables - " Only call this function *after* opening a wiki page. - if a:idx < 0 - return - endif - - let g:vimwiki_current_idx = a:idx - - " The following state depends on the current active wiki page - let subdir = vimwiki#base#current_subdir(a:idx) - call VimwikiSet('subdir', subdir, a:idx) - call VimwikiSet('invsubdir', vimwiki#base#invsubdir(subdir), a:idx) - - if g:vimwiki_auto_chdir == 1 - exe 'lcd' VimwikiGet('path') - endif - - " update cache - call vimwiki#base#cache_buffer_state() -endfunction " }}} - -" vimwiki#base#cache_buffer_state -function! vimwiki#base#cache_buffer_state() "{{{ - let b:vimwiki_idx = g:vimwiki_current_idx -endfunction "}}} - -" vimwiki#base#recall_buffer_state -function! vimwiki#base#recall_buffer_state() "{{{ - if !exists('b:vimwiki_idx') - return 0 - else - let g:vimwiki_current_idx = b:vimwiki_idx - return 1 - endif -endfunction " }}} - -" vimwiki#base#print_wiki_state -function! vimwiki#base#print_wiki_state() "{{{ print wiki options - " and buffer state variables - let g_width = 18 - let b_width = 18 - echo "- Wiki Options (idx=".g:vimwiki_current_idx.") -" - for kk in VimwikiGetOptionNames() - echo " '".kk."': ".repeat(' ', g_width-len(kk)).string(VimwikiGet(kk)) - endfor - if !exists('b:vimwiki_list') - return - endif - echo "- Cached Variables -" - for kk in keys(b:vimwiki_list) - echo " '".kk."': ".repeat(' ', b_width-len(kk)).string(b:vimwiki_list[kk]) - endfor -endfunction "}}} - " vimwiki#base#file_pattern function! vimwiki#base#file_pattern(files) "{{{ Get search regex from glob() " string. Aim to support *all* special characters, forcing the user to choose @@ -215,8 +67,8 @@ function! vimwiki#base#subdir(path, filename) "{{{ endfunction "}}} " vimwiki#base#current_subdir -function! vimwiki#base#current_subdir(idx)"{{{ - return vimwiki#base#subdir(VimwikiGet('path', a:idx), expand('%:p')) +function! vimwiki#base#current_subdir()"{{{ + return vimwiki#base#subdir(vimwiki#vars#get_wikilocal('path'), expand('%:p')) endfunction"}}} " vimwiki#base#invsubdir @@ -228,16 +80,15 @@ endfunction " }}} " Returns: the number of the wiki a file belongs to function! vimwiki#base#find_wiki(path) "{{{ let path = vimwiki#path#path_norm(vimwiki#path#chomp_slash(a:path)) - let idx = 0 - while idx < len(g:vimwiki_list) - let idx_path = expand(VimwikiGet('path', idx)) + for idx in range(vimwiki#vars#number_of_wikis()) + let idx_path = expand(vimwiki#vars#get_wikilocal('path', idx)) let idx_path = vimwiki#path#path_norm(vimwiki#path#chomp_slash(idx_path)) if vimwiki#path#is_equal( \ vimwiki#path#path_common_pfx(idx_path, path), idx_path) return idx endif let idx += 1 - endwhile + endfor " an orphan page has been detected return -1 @@ -253,14 +104,14 @@ function! vimwiki#base#resolve_link(link_text, ...) "{{{ let source_wiki = vimwiki#base#find_wiki(a:1) let source_file = a:1 else - let source_wiki = g:vimwiki_current_idx + let source_wiki = vimwiki#vars#get_bufferlocal('wiki_nr') let source_file = vimwiki#path#current_wiki_file() endif let link_text = a:link_text " if link is schemeless add wikiN: scheme - if link_text !~# g:vimwiki_rxSchemeUrl + if link_text !~# vimwiki#vars#get_global('rxSchemeUrl') let link_text = 'wiki'.source_wiki.':'.link_text endif @@ -274,7 +125,7 @@ function! vimwiki#base#resolve_link(link_text, ...) "{{{ " extract scheme - let link_infos.scheme = matchstr(link_text, g:vimwiki_rxSchemeUrlMatchScheme) + let link_infos.scheme = matchstr(link_text, vimwiki#vars#get_global('rxSchemeUrlMatchScheme')) if link_infos.scheme == '' || link_text == '' let link_infos.filename = '' " malformed link return link_infos @@ -283,7 +134,7 @@ function! vimwiki#base#resolve_link(link_text, ...) "{{{ let link_infos.filename = link_text " unknown scheme, may be a weblink return link_infos endif - let link_text = matchstr(link_text, g:vimwiki_rxSchemeUrlMatchUrl) + let link_text = matchstr(link_text, vimwiki#vars#get_global('rxSchemeUrlMatchUrl')) let is_wiki_link = link_infos.scheme =~# '\mwiki\d\+' || \ link_infos.scheme ==# 'diary' @@ -317,34 +168,34 @@ function! vimwiki#base#resolve_link(link_text, ...) "{{{ " extract the other items depending on the scheme if link_infos.scheme =~# '\mwiki\d\+' let link_infos.index = eval(matchstr(link_infos.scheme, '\D\+\zs\d\+\ze')) - if link_infos.index < 0 || link_infos.index >= len(g:vimwiki_list) + if link_infos.index < 0 || link_infos.index >= vimwiki#vars#number_of_wikis() let link_infos.filename = '' return link_infos endif if !is_relative || link_infos.index != source_wiki - let root_dir = VimwikiGet('path', link_infos.index) + let root_dir = vimwiki#vars#get_wikilocal('path', link_infos.index) endif let link_infos.filename = root_dir . link_text if vimwiki#path#is_link_to_dir(link_text) - if g:vimwiki_dir_link != '' - let link_infos.filename .= g:vimwiki_dir_link . - \ VimwikiGet('ext', link_infos.index) + if vimwiki#vars#get_global('dir_link') != '' + let link_infos.filename .= vimwiki#vars#get_global('dir_link') . + \ vimwiki#vars#get_wikilocal('ext', link_infos.index) endif else - let link_infos.filename .= VimwikiGet('ext', link_infos.index) + let link_infos.filename .= vimwiki#vars#get_wikilocal('ext', link_infos.index) endif elseif link_infos.scheme ==# 'diary' let link_infos.index = source_wiki let link_infos.filename = - \ VimwikiGet('path', link_infos.index) . - \ VimwikiGet('diary_rel_path', link_infos.index) . + \ vimwiki#vars#get_wikilocal('path', link_infos.index) . + \ vimwiki#vars#get_wikilocal('diary_rel_path', link_infos.index) . \ link_text . - \ VimwikiGet('ext', link_infos.index) + \ vimwiki#vars#get_wikilocal('ext', link_infos.index) elseif (link_infos.scheme ==# 'file' || link_infos.scheme ==# 'local') \ && is_relative let link_infos.filename = simplify(root_dir . link_text) @@ -429,10 +280,6 @@ function! vimwiki#base#open_link(cmd, link, ...) "{{{ if is_wiki_link call vimwiki#base#edit_file(a:cmd, link_infos.filename, link_infos.anchor, \ vimwiki_prev_link, update_prev_link) - if link_infos.index != g:vimwiki_current_idx - " this call to setup_buffer_state may not be necessary - call vimwiki#base#setup_buffer_state(link_infos.index) - endif else call vimwiki#base#system_open_link(link_infos.filename) endif @@ -444,9 +291,9 @@ function! vimwiki#base#get_globlinks_escaped() abort "{{{only get links from the let orig_pwd = getcwd() lcd! %:h " all path are relative to the current file's location - let globlinks = glob('*'.VimwikiGet('ext'),1)."\n" + let globlinks = glob('*'.vimwiki#vars#get_wikilocal('ext'), 1)."\n" " remove extensions - let globlinks = substitute(globlinks, '\'.VimwikiGet('ext').'\ze\n', '', 'g') + let globlinks = substitute(globlinks, '\'.vimwiki#vars#get_wikilocal('ext').'\ze\n', '', 'g') " restore the original working directory exe 'lcd! '.orig_pwd " convert to a List @@ -463,7 +310,7 @@ endfunction " }}} function! vimwiki#base#generate_links() "{{{ let lines = [] - let links = vimwiki#base#get_wikilinks(g:vimwiki_current_idx, 0) + let links = vimwiki#base#get_wikilinks(vimwiki#vars#get_bufferlocal('wiki_nr'), 0) call sort(links) let bullet = repeat(' ', vimwiki#lst#get_list_margin()). @@ -472,7 +319,8 @@ function! vimwiki#base#generate_links() "{{{ let abs_filepath = vimwiki#path#abs_path_of_link(link) if !s:is_diary_file(abs_filepath) call add(lines, bullet. - \ s:safesubstitute(g:vimwiki_WikiLinkTemplate1, '__LinkUrl__', link, '')) + \ s:safesubstitute(vimwiki#vars#get_global('WikiLinkTemplate1'), + \ '__LinkUrl__', link, '')) endif endfor @@ -488,7 +336,7 @@ function! vimwiki#base#goto(...) "{{{ let anchor = a:0 > 1 ? a:2 : '' call vimwiki#base#edit_file(':e', - \ VimwikiGet('path') . key . VimwikiGet('ext'), + \ vimwiki#vars#get_wikilocal('path') . key . vimwiki#vars#get_wikilocal('ext'), \ anchor) endfunction "}}} @@ -496,8 +344,8 @@ endfunction "}}} function! vimwiki#base#backlinks() "{{{ let current_filename = expand("%:p") let locations = [] - for idx in range(len(g:vimwiki_list)) - let syntax = VimwikiGet('syntax', idx) + for idx in range(vimwiki#vars#number_of_wikis()) + let syntax = vimwiki#vars#get_wikilocal('syntax', idx) let wikifiles = vimwiki#base#find_files(idx, 0) for source_file in wikifiles let links = s:get_links(source_file, idx) @@ -525,20 +373,20 @@ endfunction "}}} function! vimwiki#base#find_files(wiki_nr, directories_only) let wiki_nr = a:wiki_nr if wiki_nr >= 0 - let root_directory = VimwikiGet('path', wiki_nr) + let root_directory = vimwiki#vars#get_wikilocal('path', wiki_nr) else - let root_directory = VimwikiGet('path').VimwikiGet('diary_rel_path') - let wiki_nr = g:vimwiki_current_idx + let root_directory = vimwiki#vars#get_wikilocal('path') . vimwiki#vars#get_wikilocal('diary_rel_path') + let wiki_nr = vimwiki#vars#get_bufferlocal('wiki_nr') endif if a:directories_only let ext = '/' else - let ext = VimwikiGet('ext', wiki_nr) + let ext = vimwiki#vars#get_wikilocal('ext', wiki_nr) endif " if current wiki is temporary -- was added by an arbitrary wiki file then do " not search wiki files in subdirectories. Or it would hang the system if " wiki file was created in $HOME or C:/ dirs. - if VimwikiGet('temp', wiki_nr) + if vimwiki#vars#get_wikilocal('is_temporary_wiki', wiki_nr) let pattern = '*'.ext else let pattern = '**/*'.ext @@ -552,12 +400,12 @@ endfunction " If also_absolute_links is nonzero, also return links of the form /file function! vimwiki#base#get_wikilinks(wiki_nr, also_absolute_links) let files = vimwiki#base#find_files(a:wiki_nr, 0) - if a:wiki_nr == g:vimwiki_current_idx + if a:wiki_nr == vimwiki#vars#get_bufferlocal('wiki_nr') let cwd = vimwiki#path#wikify_path(expand('%:p:h')) elseif a:wiki_nr < 0 - let cwd = VimwikiGet('path').VimwikiGet('diary_rel_path') + let cwd = vimwiki#vars#get_wikilocal('path') . vimwiki#vars#get_wikilocal('diary_rel_path') else - let cwd = VimwikiGet('path', a:wiki_nr) + let cwd = vimwiki#vars#get_wikilocal('path', a:wiki_nr) endif let result = [] for wikifile in files @@ -567,10 +415,10 @@ function! vimwiki#base#get_wikilinks(wiki_nr, also_absolute_links) endfor if a:also_absolute_links for wikifile in files - if a:wiki_nr == g:vimwiki_current_idx - let cwd = VimwikiGet('path') + if a:wiki_nr == vimwiki#vars#get_bufferlocal('wiki_nr') + let cwd = vimwiki#vars#get_wikilocal('path') elseif a:wiki_nr < 0 - let cwd = VimwikiGet('path').VimwikiGet('diary_rel_path') + let cwd = vimwiki#vars#get_wikilocal('path') . vimwiki#vars#get_wikilocal('diary_rel_path') endif let wikifile = fnamemodify(wikifile, ':r') " strip extension let wikifile = '/'.vimwiki#path#relpath(cwd, wikifile) @@ -583,17 +431,17 @@ endfunction " Returns: a list containing the links to all directories from the current file function! vimwiki#base#get_wiki_directories(wiki_nr) let dirs = vimwiki#base#find_files(a:wiki_nr, 1) - if a:wiki_nr == g:vimwiki_current_idx + if a:wiki_nr == vimwiki#vars#get_bufferlocal('wiki_nr') let cwd = vimwiki#path#wikify_path(expand('%:p:h')) - let root_dir = VimwikiGet('path') + let root_dir = vimwiki#vars#get_wikilocal('path') else - let cwd = VimwikiGet('path', a:wiki_nr) + let cwd = vimwiki#vars#get_wikilocal('path', a:wiki_nr) endif let result = ['./'] for wikidir in dirs let wikidir_relative = vimwiki#path#relpath(cwd, wikidir) call add(result, wikidir_relative) - if a:wiki_nr == g:vimwiki_current_idx + if a:wiki_nr == vimwiki#vars#get_bufferlocal('wiki_nr') let wikidir_absolute = '/'.vimwiki#path#relpath(root_dir, wikidir) call add(result, wikidir_absolute) endif @@ -606,9 +454,9 @@ function! vimwiki#base#get_anchors(filename, syntax) "{{{ return [] endif - let rxheader = g:vimwiki_{a:syntax}_header_search - let rxbold = g:vimwiki_{a:syntax}_bold_search - let rxtag = g:vimwiki_{a:syntax}_tag_search + let rxheader = vimwiki#vars#get_syntaxlocal('header_search', a:syntax) + let rxbold = vimwiki#vars#get_syntaxlocal('bold_search', a:syntax) + let rxtag = vimwiki#vars#get_syntaxlocal('tag_search', a:syntax) let anchor_level = ['', '', '', '', '', '', ''] let anchors = [] @@ -682,14 +530,17 @@ function! s:jump_to_anchor(anchor) "{{{ let anchor = vimwiki#u#escape(a:anchor) let segments = split(anchor, '#', 0) + for segment in segments let anchor_header = s:safesubstitute( - \ g:vimwiki_{VimwikiGet('syntax')}_header_match, + \ vimwiki#vars#get_syntaxlocal('header_match'), \ '__Header__', segment, '') - let anchor_bold = s:safesubstitute(g:vimwiki_{VimwikiGet('syntax')}_bold_match, + let anchor_bold = s:safesubstitute( + \ vimwiki#vars#get_syntaxlocal('bold_match'), \ '__Text__', segment, '') - let anchor_tag = s:safesubstitute(g:vimwiki_{VimwikiGet('syntax')}_tag_match, + let anchor_tag = s:safesubstitute( + \ vimwiki#vars#get_syntaxlocal('tag_match'), \ '__Tag__', segment, '') if !search(anchor_tag, 'Wc') @@ -711,8 +562,8 @@ function! s:get_links(wikifile, idx) "{{{ return [] endif - let syntax = VimwikiGet('syntax', a:idx) - let rx_link = g:vimwiki_{syntax}_wikilink + let syntax = vimwiki#vars#get_wikilocal('syntax', a:idx) + let rx_link = vimwiki#vars#get_syntaxlocal('wikilink', syntax) let links = [] let lnum = 0 @@ -742,8 +593,8 @@ function! vimwiki#base#check_links() "{{{ let anchors_of_files = {} let links_of_files = {} let errors = [] - for idx in range(len(g:vimwiki_list)) - let syntax = VimwikiGet('syntax', idx) + for idx in range(vimwiki#vars#number_of_wikis()) + let syntax = vimwiki#vars#get_wikilocal('syntax', idx) let wikifiles = vimwiki#base#find_files(idx, 0) for wikifile in wikifiles let links_of_files[wikifile] = s:get_links(wikifile, idx) @@ -796,9 +647,9 @@ function! vimwiki#base#check_links() "{{{ endfor " mark every index file as reachable - for idx in range(len(g:vimwiki_list)) - let index_file = VimwikiGet('path', idx) . VimwikiGet('index', idx) . - \ VimwikiGet('ext', idx) + for idx in range(vimwiki#vars#number_of_wikis()) + let index_file = vimwiki#vars#get_wikilocal('path', idx) . vimwiki#vars#get_wikilocal('index', idx) . + \ vimwiki#vars#get_wikilocal('ext', idx) if filereadable(index_file) let reachable_wikifiles[index_file] = 1 endif @@ -864,11 +715,15 @@ function! vimwiki#base#edit_file(command, filename, anchor, ...) "{{{ " getpos() directly after this command. Strange. if !(a:command ==# ':e ' && vimwiki#path#is_equal(a:filename, expand('%:p'))) execute a:command.' '.fname + + " If the opened file was not already loaded by Vim, an autocommand is + " triggered at this point + " Make sure no other plugin takes ownership over the new file. Vimwiki " rules them all! Well, except for directories, which may be opened with " Netrw if &filetype != 'vimwiki' && fname !~ '\m/$' - set filetype=vimwiki + setfiletype vimwiki endif endif if a:anchor != '' @@ -879,7 +734,7 @@ function! vimwiki#base#edit_file(command, filename, anchor, ...) "{{{ " a:1 -- previous vimwiki link to save " a:2 -- should we update previous link if a:0 && a:2 && len(a:1) > 0 - let b:vimwiki_prev_link = a:1 + call vimwiki#vars#set_bufferlocal('prev_link', a:1) endif endfunction " }}} @@ -941,15 +796,15 @@ endf "}}} " s:print_wiki_list function! s:print_wiki_list() "{{{ let idx = 0 - while idx < len(g:vimwiki_list) - if idx == g:vimwiki_current_idx + while idx < vimwiki#vars#number_of_wikis() + if idx == vimwiki#vars#get_bufferlocal('wiki_nr') let sep = ' * ' echohl PmenuSel else let sep = ' ' echohl None endif - echo (idx + 1).sep.VimwikiGet('path', idx) + echo (idx + 1) . sep . vimwiki#vars#get_wikilocal('path', idx) let idx += 1 endwhile echohl None @@ -981,9 +836,9 @@ function! s:update_wiki_links_dir(dir, old_fname, new_fname) " {{{ let new_fname = a:new_fname let old_fname_r = vimwiki#base#apply_template( - \ g:vimwiki_WikiLinkMatchUrlTemplate, old_fname, '', '') + \ vimwiki#vars#get_syntaxlocal('WikiLinkMatchUrlTemplate'), old_fname, '', '') - let files = split(glob(VimwikiGet('path').a:dir.'*'.VimwikiGet('ext')), '\n') + let files = split(glob(vimwiki#vars#get_wikilocal('path').a:dir.'*'.vimwiki#vars#get_wikilocal('ext')), '\n') for fname in files call s:update_wiki_link(fname, old_fname_r, new_fname) endfor @@ -1037,8 +892,10 @@ function! s:get_wiki_buffers() "{{{ while bcount<=bufnr("$") if bufexists(bcount) let bname = fnamemodify(bufname(bcount), ":p") - if bname =~# VimwikiGet('ext')."$" - let bitem = [bname, getbufvar(bname, "vimwiki_prev_link")] + " this may find buffers that are not part of the current wiki, but that + " doesn't hurt + if bname =~# vimwiki#vars#get_wikilocal('ext')."$" + let bitem = [bname, vimwiki#vars#get_bufferlocal('prev_link', bcount)] call add(blist, bitem) endif endif @@ -1051,7 +908,7 @@ endfunction " }}} function! s:open_wiki_buffer(item) "{{{ call vimwiki#base#edit_file(':e', a:item[0], '') if !empty(a:item[1]) - call setbufvar(a:item[0], "vimwiki_prev_link", a:item[1]) + call vimwiki#vars#set_bufferlocal('prev_link', a:item[1], a:item[0]) endif endfunction " }}} @@ -1131,7 +988,7 @@ function! vimwiki#base#update_listing_in_buffer(strings, start_header, let already_there = 0 let header_rx = '\m^\s*'. - \ substitute(g:vimwiki_rxH1_Template, '__Header__', a:start_header, '') + \ substitute(vimwiki#vars#get_syntaxlocal('rxH1_Template'), '__Header__', a:start_header, '') \ .'\s*$' let start_lnum = 1 @@ -1183,7 +1040,7 @@ function! vimwiki#base#update_listing_in_buffer(strings, start_header, " write new listing let new_header = whitespaces_in_first_line - \ . s:safesubstitute(g:vimwiki_rxH1_Template, + \ . s:safesubstitute(vimwiki#vars#get_syntaxlocal('rxH1_Template'), \ '__Header__', a:start_header, '') call append(start_lnum - 1, new_header) let start_lnum += 1 @@ -1213,7 +1070,7 @@ endfunction "}}} " WIKI link following functions {{{ " vimwiki#base#find_next_link function! vimwiki#base#find_next_link() "{{{ - call vimwiki#base#search_word(g:vimwiki_rxAnyLink, '') + call vimwiki#base#search_word(vimwiki#vars#get_syntaxlocal('rxAnyLink'), '') endfunction " }}} " vimwiki#base#find_prev_link @@ -1221,9 +1078,9 @@ function! vimwiki#base#find_prev_link() "{{{ "Jump 2 times if the cursor is in the middle of a link if synIDattr(synID(line('.'), col('.'), 0), "name") =~# "VimwikiLink.*" && \ synIDattr(synID(line('.'), col('.')-1, 0), "name") =~# "VimwikiLink.*" - call vimwiki#base#search_word(g:vimwiki_rxAnyLink, 'b') + call vimwiki#base#search_word(vimwiki#vars#get_syntaxlocal('rxAnyLink'), 'b') endif - call vimwiki#base#search_word(g:vimwiki_rxAnyLink, 'b') + call vimwiki#base#search_word(vimwiki#vars#get_syntaxlocal('rxAnyLink'), 'b') endfunction " }}} " vimwiki#base#follow_link @@ -1232,17 +1089,17 @@ function! vimwiki#base#follow_link(split, reuse, move_cursor, ...) "{{{ " default open_link handler " try WikiLink - let lnk = matchstr(vimwiki#base#matchstr_at_cursor(g:vimwiki_rxWikiLink), - \ g:vimwiki_rxWikiLinkMatchUrl) + let lnk = matchstr(vimwiki#base#matchstr_at_cursor(vimwiki#vars#get_syntaxlocal('rxWikiLink')), + \ vimwiki#vars#get_syntaxlocal('rxWikiLinkMatchUrl')) " try WikiIncl if lnk == "" - let lnk = matchstr(vimwiki#base#matchstr_at_cursor(g:vimwiki_rxWikiIncl), - \ g:vimwiki_rxWikiInclMatchUrl) + let lnk = matchstr(vimwiki#base#matchstr_at_cursor(vimwiki#vars#get_syntaxlocal('rxWikiIncl')), + \ vimwiki#vars#get_syntaxlocal('rxWikiInclMatchUrl')) endif " try Weblink if lnk == "" - let lnk = matchstr(vimwiki#base#matchstr_at_cursor(g:vimwiki_rxWeblink), - \ g:vimwiki_rxWeblinkMatchUrl) + let lnk = matchstr(vimwiki#base#matchstr_at_cursor(vimwiki#vars#get_syntaxlocal('rxWeblink')), + \ vimwiki#vars#get_syntaxlocal('rxWeblinkMatchUrl')) endif if lnk != "" " cursor is indeed on a link @@ -1272,7 +1129,7 @@ function! vimwiki#base#follow_link(split, reuse, move_cursor, ...) "{{{ endif - if VimwikiGet('syntax') == 'markdown' + if vimwiki#vars#get_wikilocal('syntax') == 'markdown' let processed_by_markdown_reflink = vimwiki#markdown_base#open_reflink(lnk) if processed_by_markdown_reflink return @@ -1280,7 +1137,7 @@ function! vimwiki#base#follow_link(split, reuse, move_cursor, ...) "{{{ " remove the extension from the filename if exists, because non-vimwiki " markdown files usually include the extension in links - let lnk = substitute(lnk, '\'.VimwikiGet('ext').'$', '', '') + let lnk = substitute(lnk, '\'.vimwiki#vars#get_wikilocal('ext').'$', '', '') endif let current_tab_page = tabpagenr() @@ -1306,11 +1163,11 @@ endfunction " }}} " vimwiki#base#go_back_link function! vimwiki#base#go_back_link() "{{{ - if exists("b:vimwiki_prev_link") + let prev_link = vimwiki#vars#get_bufferlocal('prev_link') + if !empty(prev_link) " go back to saved wiki link - let prev_word = b:vimwiki_prev_link - execute ":e ".substitute(prev_word[0], '\s', '\\\0', 'g') - call setpos('.', prev_word[1]) + execute ":e ".substitute(prev_link[0], '\s', '\\\0', 'g') + call setpos('.', prev_link[1]) else " maybe we came here by jumping to a tag -> pop from the tag stack silent! pop! @@ -1319,13 +1176,13 @@ endfunction " }}} " vimwiki#base#goto_index function! vimwiki#base#goto_index(wnum, ...) "{{{ - if a:wnum > len(g:vimwiki_list) - echomsg 'Vimwiki Error: Wiki '.a:wnum.' is not registered in g:vimwiki_list!' + if a:wnum > vimwiki#vars#number_of_wikis() + echomsg 'Vimwiki Error: Wiki '.a:wnum.' is not registered in your Vimwiki settings!' return endif " usually a:wnum is greater then 0 but with the following command it is == 0: - " vim -n -c "exe 'VimwikiIndex' | echo g:vimwiki_current_idx" + " vim -n -c ":VimwikiIndex" if a:wnum > 0 let idx = a:wnum - 1 else @@ -1344,12 +1201,11 @@ function! vimwiki#base#goto_index(wnum, ...) "{{{ let cmd = 'edit' endif - call Validate_wiki_options(idx) - call vimwiki#base#edit_file(cmd, - \ VimwikiGet('path', idx).VimwikiGet('index', idx). - \ VimwikiGet('ext', idx), - \ '') - call vimwiki#base#setup_buffer_state(idx) + let index_file = vimwiki#vars#get_wikilocal('path', idx). + \ vimwiki#vars#get_wikilocal('index', idx). + \ vimwiki#vars#get_wikilocal('ext', idx) + + call vimwiki#base#edit_file(cmd, index_file, '') endfunction "}}} " vimwiki#base#delete_link @@ -1380,7 +1236,7 @@ endfunction "}}} " vimwiki#base#rename_link " Rename current file, update all links to it function! vimwiki#base#rename_link() "{{{ - let subdir = VimwikiGet('subdir') + let subdir = vimwiki#vars#get_bufferlocal('subdir') let old_fname = subdir.expand('%:t') " there is no file (new one maybe) @@ -1409,13 +1265,13 @@ function! vimwiki#base#rename_link() "{{{ return endif - let url = matchstr(new_link, g:vimwiki_rxWikiLinkMatchUrl) + let url = matchstr(new_link, vimwiki#vars#get_syntaxlocal('rxWikiLinkMatchUrl')) if url != '' let new_link = url endif let new_link = subdir.new_link - let new_fname = VimwikiGet('path').new_link.VimwikiGet('ext') + let new_fname = vimwiki#vars#get_wikilocal('path') . new_link . vimwiki#vars#get_wikilocal('ext') " do not rename if file with such name exists let fname = glob(new_fname) @@ -1426,7 +1282,7 @@ function! vimwiki#base#rename_link() "{{{ endif " rename wiki link file try - echomsg 'Vimwiki: Renaming '.VimwikiGet('path').old_fname.' to '.new_fname + echomsg 'Vimwiki: Renaming '.vimwiki#vars#get_wikilocal('path').old_fname.' to '.new_fname let res = rename(expand('%:p'), expand(new_fname)) if res != 0 throw "Cannot rename!" @@ -1439,7 +1295,7 @@ function! vimwiki#base#rename_link() "{{{ let &buftype="nofile" let cur_buffer = [expand('%:p'), - \getbufvar(expand('%:p'), "vimwiki_prev_link")] + \ vimwiki#vars#get_bufferlocal('prev_link')] let blist = s:get_wiki_buffers() @@ -1720,15 +1576,15 @@ endfunction "}}} function! vimwiki#base#AddHeaderLevel() "{{{ let lnum = line('.') let line = getline(lnum) - let rxHdr = g:vimwiki_rxH + let rxHdr = vimwiki#vars#get_syntaxlocal('rxH') if line =~# '^\s*$' return endif - if line =~# g:vimwiki_rxHeader + if line =~# vimwiki#vars#get_syntaxlocal('rxHeader') let level = vimwiki#u#count_first_sym(line) if level < 6 - if g:vimwiki_symH + if vimwiki#vars#get_syntaxlocal('symH') let line = substitute(line, '\('.rxHdr.'\+\).\+\1', rxHdr.'&'.rxHdr, '') else let line = substitute(line, '\('.rxHdr.'\+\).\+', rxHdr.'&', '') @@ -1737,7 +1593,7 @@ function! vimwiki#base#AddHeaderLevel() "{{{ endif else let line = substitute(line, '^\s*', '&'.rxHdr.' ', '') - if g:vimwiki_symH + if vimwiki#vars#get_syntaxlocal('symH') let line = substitute(line, '\s*$', ' '.rxHdr.'&', '') endif call setline(lnum, line) @@ -1748,19 +1604,19 @@ endfunction "}}} function! vimwiki#base#RemoveHeaderLevel() "{{{ let lnum = line('.') let line = getline(lnum) - let rxHdr = g:vimwiki_rxH + let rxHdr = vimwiki#vars#get_syntaxlocal('rxH') if line =~# '^\s*$' return endif - if line =~# g:vimwiki_rxHeader + if line =~# vimwiki#vars#get_syntaxlocal('rxHeader') let level = vimwiki#u#count_first_sym(line) let old = repeat(rxHdr, level) let new = repeat(rxHdr, level - 1) let chomp = line =~# rxHdr.'\s' - if g:vimwiki_symH + if vimwiki#vars#get_syntaxlocal('symH') let line = substitute(line, old, new, 'g') else let line = substitute(line, old, new, '') @@ -1782,32 +1638,33 @@ endfunction " }}} function! vimwiki#base#table_of_contents(create) " collect new headers let is_inside_pre_or_math = 0 " 1: inside pre, 2: inside math, 0: outside + let numbering = vimwiki#vars#get_global('html_header_numbering') let headers = [] let headers_levels = [['', 0], ['', 0], ['', 0], ['', 0], ['', 0], ['', 0]] for lnum in range(1, line('$')) let line_content = getline(lnum) - if (is_inside_pre_or_math == 1 && line_content =~# g:vimwiki_rxPreEnd) || - \ (is_inside_pre_or_math == 2 && line_content =~# g:vimwiki_rxMathEnd) + if (is_inside_pre_or_math == 1 && line_content =~# vimwiki#vars#get_syntaxlocal('rxPreEnd')) || + \ (is_inside_pre_or_math == 2 && line_content =~# vimwiki#vars#get_syntaxlocal('rxMathEnd')) let is_inside_pre_or_math = 0 continue endif if is_inside_pre_or_math > 0 continue endif - if line_content =~# g:vimwiki_rxPreStart + if line_content =~# vimwiki#vars#get_syntaxlocal('rxPreStart') let is_inside_pre_or_math = 1 continue endif - if line_content =~# g:vimwiki_rxMathStart + if line_content =~# vimwiki#vars#get_syntaxlocal('rxMathStart') let is_inside_pre_or_math = 2 continue endif - if line_content !~# g:vimwiki_rxHeader + if line_content !~# vimwiki#vars#get_syntaxlocal('rxHeader') continue endif let h_level = vimwiki#u#count_first_sym(line_content) - let h_text = vimwiki#u#trim(matchstr(line_content, g:vimwiki_rxHeader)) - if h_text ==# g:vimwiki_toc_header " don't include the TOC's header itself + let h_text = vimwiki#u#trim(matchstr(line_content, vimwiki#vars#get_syntaxlocal('rxHeader'))) + if h_text ==# vimwiki#vars#get_global('toc_header') " don't include the TOC's header itself continue endif let headers_levels[h_level-1] = [h_text, headers_levels[h_level-1][1]+1] @@ -1821,11 +1678,11 @@ function! vimwiki#base#table_of_contents(create) endfor let h_complete_id .= headers_levels[h_level-1][0] - if g:vimwiki_html_header_numbering > 0 - \ && g:vimwiki_html_header_numbering <= h_level + if numbering > 0 + \ && numbering <= h_level let h_number = join(map(copy(headers_levels[ - \ g:vimwiki_html_header_numbering-1 : h_level-1]), 'v:val[1]'), '.') - let h_number .= g:vimwiki_html_header_numbering_sym + \ numbering-1 : h_level-1]), 'v:val[1]'), '.') + let h_number .= vimwiki#vars#get_global('html_header_numbering_sym') let h_text = h_number.' '.h_text endif @@ -1839,7 +1696,7 @@ function! vimwiki#base#table_of_contents(create) for [lvl, link, desc] in headers let esc_link = substitute(link, "'", "''", 'g') let esc_desc = substitute(desc, "'", "''", 'g') - let link = s:safesubstitute(g:vimwiki_WikiLinkTemplate2, '__LinkUrl__', + let link = s:safesubstitute(vimwiki#vars#get_global('WikiLinkTemplate2'), '__LinkUrl__', \ '#'.esc_link, '') let link = s:safesubstitute(link, '__LinkDescription__', esc_desc, '') call add(lines, startindent.repeat(indentstring, lvl-1).bullet.link) @@ -1847,7 +1704,7 @@ function! vimwiki#base#table_of_contents(create) let links_rx = '\m^\s*'.vimwiki#u#escape(vimwiki#lst#default_symbol()).' ' - call vimwiki#base#update_listing_in_buffer(lines, g:vimwiki_toc_header, links_rx, + call vimwiki#base#update_listing_in_buffer(lines, vimwiki#vars#get_global('toc_header'), links_rx, \ 1, a:create) endfunction "}}} @@ -1892,8 +1749,8 @@ endfunction " }}} " s:is_diary_file function! s:is_diary_file(filename) " {{{ let file_path = vimwiki#path#path_norm(a:filename) - let rel_path = VimwikiGet('diary_rel_path') - let diary_path = vimwiki#path#path_norm(VimwikiGet('path') . rel_path) + let rel_path = vimwiki#vars#get_wikilocal('diary_rel_path') + let diary_path = vimwiki#path#path_norm(vimwiki#vars#get_wikilocal('path') . rel_path) return rel_path != '' \ && file_path =~# '^'.vimwiki#u#escape(diary_path) endfunction " }}} @@ -1922,25 +1779,25 @@ endfunction " }}} " s:normalize_link_in_diary function! s:normalize_link_in_diary(lnk) " {{{ - let link = a:lnk . VimwikiGet('ext') - let link_wiki = VimwikiGet('path') . '/' . link - let link_diary = VimwikiGet('path') . '/' - \ . VimwikiGet('diary_rel_path') . '/' . link + let link = a:lnk . vimwiki#vars#get_wikilocal('ext') + let link_wiki = vimwiki#vars#get_wikilocal('path') . '/' . link + let link_diary = vimwiki#vars#get_wikilocal('path') . '/' + \ . vimwiki#vars#get_wikilocal('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 rxUrl = vimwiki#vars#get_global('rxWord') let rxDesc = '' - let template = g:vimwiki_WikiLinkTemplate1 + let template = vimwiki#vars#get_global('WikiLinkTemplate1') else - let depth = len(split(VimwikiGet('diary_rel_path'), '/')) + let depth = len(split(vimwiki#vars#get_wikilocal('diary_rel_path'), '/')) let str = repeat('../', depth) . a:lnk . '|' . a:lnk let rxUrl = '^.*\ze|' let rxDesc = '|\zs.*$' - let template = g:vimwiki_WikiLinkTemplate2 + let template = vimwiki#vars#get_global('WikiLinkTemplate2') endif return vimwiki#base#normalize_link_helper(str, rxUrl, rxDesc, template) @@ -1950,42 +1807,42 @@ endfunction " }}} function! s:normalize_link_syntax_n() " {{{ " try WikiLink - let lnk = vimwiki#base#matchstr_at_cursor(g:vimwiki_rxWikiLink) + let lnk = vimwiki#base#matchstr_at_cursor(vimwiki#vars#get_syntaxlocal('rxWikiLink')) if !empty(lnk) let sub = vimwiki#base#normalize_link_helper(lnk, - \ g:vimwiki_rxWikiLinkMatchUrl, g:vimwiki_rxWikiLinkMatchDescr, - \ g:vimwiki_WikiLinkTemplate2) - call vimwiki#base#replacestr_at_cursor(g:vimwiki_rxWikiLink, sub) + \ vimwiki#vars#get_syntaxlocal('rxWikiLinkMatchUrl'), vimwiki#vars#get_syntaxlocal('rxWikiLinkMatchDescr'), + \ vimwiki#vars#get_global('WikiLinkTemplate2')) + call vimwiki#base#replacestr_at_cursor(vimwiki#vars#get_syntaxlocal('rxWikiLink'), sub) return endif " try WikiIncl - let lnk = vimwiki#base#matchstr_at_cursor(g:vimwiki_rxWikiIncl) + let lnk = vimwiki#base#matchstr_at_cursor(vimwiki#vars#get_global('rxWikiIncl')) if !empty(lnk) " NO-OP !! return endif " try Weblink - let lnk = vimwiki#base#matchstr_at_cursor(g:vimwiki_rxWeblink) + let lnk = vimwiki#base#matchstr_at_cursor(vimwiki#vars#get_syntaxlocal('rxWeblink')) if !empty(lnk) let sub = vimwiki#base#normalize_link_helper(lnk, - \ lnk, '', g:vimwiki_WikiLinkTemplate2) - call vimwiki#base#replacestr_at_cursor(g:vimwiki_rxWeblink, sub) + \ lnk, '', vimwiki#vars#get_global('WikiLinkTemplate2')) + call vimwiki#base#replacestr_at_cursor(vimwiki#vars#get_syntaxlocal('rxWeblink'), sub) return endif " try Word (any characters except separators) " rxWord is less permissive than rxWikiLinkUrl which is used in " normalize_link_syntax_v - let lnk = vimwiki#base#matchstr_at_cursor(g:vimwiki_rxWord) + let lnk = vimwiki#base#matchstr_at_cursor(vimwiki#vars#get_global('rxWord')) if !empty(lnk) if s:is_diary_file(expand("%:p")) let sub = s:normalize_link_in_diary(lnk) else let sub = vimwiki#base#normalize_link_helper(lnk, - \ g:vimwiki_rxWord, '', - \ g:vimwiki_WikiLinkTemplate1) + \ vimwiki#vars#get_global('rxWord'), '', + \ vimwiki#vars#get_global('WikiLinkTemplate1')) endif call vimwiki#base#replacestr_at_cursor('\V'.lnk, sub) return @@ -2008,7 +1865,7 @@ function! s:normalize_link_syntax_v() " {{{ if s:is_diary_file(expand("%:p")) let sub = s:normalize_link_in_diary(@") else - let sub = s:safesubstitute(g:vimwiki_WikiLinkTemplate1, + let sub = s:safesubstitute(vimwiki#vars#get_global('WikiLinkTemplate1'), \ '__LinkUrl__', @", '') endif @@ -2023,9 +1880,9 @@ endfunction " }}} " vimwiki#base#normalize_link function! vimwiki#base#normalize_link(is_visual_mode) "{{{ - if exists('*vimwiki#'.VimwikiGet('syntax').'_base#normalize_link') + if exists('*vimwiki#'.vimwiki#vars#get_wikilocal('syntax').'_base#normalize_link') " Syntax-specific links - call vimwiki#{VimwikiGet('syntax')}_base#normalize_link(a:is_visual_mode) + call vimwiki#{vimwiki#vars#get_wikilocal('syntax')}_base#normalize_link(a:is_visual_mode) else if !a:is_visual_mode call s:normalize_link_syntax_n() diff --git a/autoload/vimwiki/diary.vim b/autoload/vimwiki/diary.vim index 109ae07..e02e94b 100644 --- a/autoload/vimwiki/diary.vim +++ b/autoload/vimwiki/diary.vim @@ -20,23 +20,22 @@ function! s:prefix_zero(num) "{{{ return a:num endfunction "}}} -function! s:get_date_link(fmt) "{{{ - return strftime(a:fmt) -endfunction "}}} - function! s:diary_path(...) "{{{ - let idx = a:0 == 0 ? g:vimwiki_current_idx : a:1 - return VimwikiGet('path', idx).VimwikiGet('diary_rel_path', idx) + let idx = a:0 == 0 ? vimwiki#vars#get_bufferlocal('wiki_nr') : a:1 + return vimwiki#vars#get_wikilocal('path', idx).vimwiki#vars#get_wikilocal('diary_rel_path', idx) endfunction "}}} function! s:diary_index(...) "{{{ - let idx = a:0 == 0 ? g:vimwiki_current_idx : a:1 - return s:diary_path(idx).VimwikiGet('diary_index', idx).VimwikiGet('ext', idx) + let idx = a:0 == 0 ? vimwiki#vars#get_bufferlocal('wiki_nr') : a:1 + return s:diary_path(idx).vimwiki#vars#get_wikilocal('diary_index', idx).vimwiki#vars#get_wikilocal('ext', idx) endfunction "}}} -function! s:diary_date_link(...) "{{{ - let idx = a:0 == 0 ? g:vimwiki_current_idx : a:1 - return s:get_date_link(VimwikiGet('diary_link_fmt', idx)) +function! vimwiki#diary#diary_date_link(...) "{{{ + if a:0 + return strftime('%Y-%m-%d', a:1) + else + return strftime('%Y-%m-%d') + endif endfunction "}}} function! s:get_position_links(link) "{{{ @@ -45,8 +44,8 @@ function! s:get_position_links(link) "{{{ if a:link =~# '^\d\{4}-\d\d-\d\d' let links = map(s:get_diary_files(), 'fnamemodify(v:val, ":t:r")') " include 'today' into links - if index(links, s:diary_date_link()) == -1 - call add(links, s:diary_date_link()) + if index(links, vimwiki#diary#diary_date_link()) == -1 + call add(links, vimwiki#diary#diary_date_link()) endif call sort(links) let idx = index(links, a:link) @@ -55,7 +54,7 @@ function! s:get_position_links(link) "{{{ endfunction "}}} fun! s:get_month_name(month) "{{{ - return g:vimwiki_diary_months[str2nr(a:month)] + return vimwiki#vars#get_global('diary_months')[str2nr(a:month)] endfun "}}} " Helpers }}} @@ -63,14 +62,15 @@ endfun "}}} " Diary index stuff {{{ fun! s:read_captions(files) "{{{ let result = {} + let rx_header = vimwiki#vars#get_syntaxlocal('rxHeader') for fl in a:files " remove paths and extensions - let fl_key = substitute(fnamemodify(fl, ':t'), VimwikiGet('ext').'$', '', '') + let fl_key = substitute(fnamemodify(fl, ':t'), vimwiki#vars#get_wikilocal('ext').'$', '', '') if filereadable(fl) for line in readfile(fl, '', s:vimwiki_max_scan_for_caption) - if line =~# g:vimwiki_rxHeader && !has_key(result, fl_key) - let result[fl_key] = vimwiki#u#trim(matchstr(line, g:vimwiki_rxHeader)) + if line =~# rx_header && !has_key(result, fl_key) + let result[fl_key] = vimwiki#u#trim(matchstr(line, rx_header)) endif endfor endif @@ -85,7 +85,7 @@ endfun "}}} fun! s:get_diary_files() "{{{ let rx = '^\d\{4}-\d\d-\d\d' - let s_files = glob(VimwikiGet('path').VimwikiGet('diary_rel_path').'*'.VimwikiGet('ext')) + let s_files = glob(vimwiki#vars#get_wikilocal('path').vimwiki#vars#get_wikilocal('diary_rel_path').'*'.vimwiki#vars#get_wikilocal('ext')) let files = split(s_files, '\n') call filter(files, 'fnamemodify(v:val, ":t") =~# "'.escape(rx, '\').'"') @@ -117,7 +117,7 @@ fun! s:group_links(links) "{{{ endfun "}}} function! s:sort(lst) "{{{ - if VimwikiGet("diary_sort") ==? 'desc' + if vimwiki#vars#get_wikilocal('diary_sort') ==? 'desc' return reverse(sort(a:lst)) else return sort(a:lst) @@ -133,19 +133,19 @@ function! s:format_diary() "{{{ for year in s:sort(keys(g_files)) call add(result, '') - call add(result, substitute(g:vimwiki_rxH2_Template, '__Header__', year , '')) + call add(result, substitute(vimwiki#vars#get_syntaxlocal('rxH2_Template'), '__Header__', year , '')) for month in s:sort(keys(g_files[year])) call add(result, '') - call add(result, substitute(g:vimwiki_rxH3_Template, '__Header__', s:get_month_name(month), '')) + call add(result, substitute(vimwiki#vars#get_syntaxlocal('rxH3_Template'), '__Header__', s:get_month_name(month), '')) for [fl, cap] in s:sort(items(g_files[year][month])) if empty(cap) - let entry = substitute(g:vimwiki_WikiLinkTemplate1, '__LinkUrl__', fl, '') + let entry = substitute(vimwiki#vars#get_global('WikiLinkTemplate1'), '__LinkUrl__', fl, '') let entry = substitute(entry, '__LinkDescription__', cap, '') call add(result, repeat(' ', &sw).'* '.entry) else - let entry = substitute(g:vimwiki_WikiLinkTemplate2, '__LinkUrl__', fl, '') + let entry = substitute(vimwiki#vars#get_global('WikiLinkTemplate2'), '__LinkUrl__', fl, '') let entry = substitute(entry, '__LinkDescription__', cap, '') call add(result, repeat(' ', &sw).'* '.entry) endif @@ -160,7 +160,7 @@ endfunction "}}} " Diary index stuff }}} function! vimwiki#diary#make_note(wnum, ...) "{{{ - if a:wnum > len(g:vimwiki_list) + if a:wnum > vimwiki#vars#number_of_wikis() echomsg 'Vimwiki Error: Wiki '.a:wnum.' is not registered in g:vimwiki_list!' return endif @@ -172,7 +172,7 @@ function! vimwiki#diary#make_note(wnum, ...) "{{{ let idx = 0 endif - call vimwiki#path#mkdir(VimwikiGet('path', idx).VimwikiGet('diary_rel_path', idx)) + call vimwiki#path#mkdir(vimwiki#vars#get_wikilocal('path', idx).vimwiki#vars#get_wikilocal('diary_rel_path', idx)) let cmd = 'edit' if a:0 @@ -187,15 +187,14 @@ function! vimwiki#diary#make_note(wnum, ...) "{{{ if a:0>1 let link = 'diary:'.a:2 else - let link = 'diary:'.s:diary_date_link(idx) + let link = 'diary:'.vimwiki#diary#diary_date_link() endif call vimwiki#base#open_link(cmd, link, s:diary_index(idx)) - call vimwiki#base#setup_buffer_state(idx) endfunction "}}} function! vimwiki#diary#goto_diary_index(wnum) "{{{ - if a:wnum > len(g:vimwiki_list) + if a:wnum > vimwiki#vars#number_of_wikis() echomsg 'Vimwiki Error: Wiki '.a:wnum.' is not registered in g:vimwiki_list!' return endif @@ -208,7 +207,6 @@ function! vimwiki#diary#goto_diary_index(wnum) "{{{ endif call vimwiki#base#edit_file('e', s:diary_index(idx), '') - call vimwiki#base#setup_buffer_state(idx) endfunction "}}} function! vimwiki#diary#goto_next_day() "{{{ @@ -223,7 +221,7 @@ function! vimwiki#diary#goto_next_day() "{{{ let link = 'diary:'.links[idx+1] else " goto today - let link = 'diary:'.s:diary_date_link() + let link = 'diary:'.vimwiki#diary#diary_date_link() endif if len(link) @@ -243,7 +241,7 @@ function! vimwiki#diary#goto_prev_day() "{{{ let link = 'diary:'.links[idx-1] else " goto today - let link = 'diary:'.s:diary_date_link() + let link = 'diary:'.vimwiki#diary#diary_date_link() endif if len(link) @@ -255,9 +253,9 @@ function! vimwiki#diary#generate_diary_section() "{{{ let current_file = vimwiki#path#path_norm(expand("%:p")) let diary_file = vimwiki#path#path_norm(s:diary_index()) if vimwiki#path#is_equal(current_file, diary_file) - let content_rx = '^\%(\s*\* \)\|\%(^\s*$\)\|\%('.g:vimwiki_rxHeader.'\)' + let content_rx = '^\%(\s*\* \)\|\%(^\s*$\)\|\%('.vimwiki#vars#get_syntaxlocal('rxHeader').'\)' call vimwiki#base#update_listing_in_buffer(s:format_diary(), - \ VimwikiGet('diary_header'), content_rx, line('$')+1, 1) + \ vimwiki#vars#get_wikilocal('diary_header'), content_rx, line('$')+1, 1) else echomsg 'Vimwiki Error: You can generate diary links only in a diary index page!' endif @@ -284,15 +282,15 @@ function! vimwiki#diary#calendar_action(day, month, year, week, dir) "{{{ endif " XXX: Well, +1 is for inconsistent index basing... - call vimwiki#diary#make_note(g:vimwiki_current_idx+1, 0, link) + call vimwiki#diary#make_note(vimwiki#vars#get_bufferlocal('wiki_nr')+1, 0, link) endfunction "}}} " Sign function. function vimwiki#diary#calendar_sign(day, month, year) "{{{ let day = s:prefix_zero(a:day) let month = s:prefix_zero(a:month) - let sfile = VimwikiGet('path').VimwikiGet('diary_rel_path'). - \ a:year.'-'.month.'-'.day.VimwikiGet('ext') + let sfile = vimwiki#vars#get_wikilocal('path').vimwiki#vars#get_wikilocal('diary_rel_path'). + \ a:year.'-'.month.'-'.day.vimwiki#vars#get_wikilocal('ext') return filereadable(expand(sfile)) endfunction "}}} diff --git a/autoload/vimwiki/html.vim b/autoload/vimwiki/html.vim index 88f186b..6f5e803 100644 --- a/autoload/vimwiki/html.vim +++ b/autoload/vimwiki/html.vim @@ -26,7 +26,7 @@ function! s:root_path(subdir) "{{{ endfunction "}}} function! s:syntax_supported() " {{{ - return VimwikiGet('syntax') ==? "default" + return vimwiki#vars#get_wikilocal('syntax') ==? "default" endfunction " }}} function! s:remove_blank_lines(lines) " {{{ @@ -68,7 +68,7 @@ endfunction " }}} function! s:default_CSS_full_name(path) " {{{ let path = expand(a:path) - let css_full_name = path.VimwikiGet('css_name') + let css_full_name = path . vimwiki#vars#get_wikilocal('css_name') return css_full_name endfunction "}}} @@ -88,13 +88,13 @@ endfunction "}}} function! s:template_full_name(name) "{{{ if a:name == '' - let name = VimwikiGet('template_default') + let name = vimwiki#vars#get_wikilocal('template_default') else let name = a:name endif - let fname = expand(VimwikiGet('template_path'). - \ name.VimwikiGet('template_ext')) + let fname = expand(vimwiki#vars#get_wikilocal('template_path'). + \ name . vimwiki#vars#get_wikilocal('template_ext')) if filereadable(fname) return fname @@ -157,14 +157,14 @@ function! s:delete_html_files(path) "{{{ let htmlfiles = split(glob(a:path.'**/*.html'), '\n') for fname in htmlfiles " ignore user html files, e.g. search.html,404.html - if stridx(g:vimwiki_user_htmls, fnamemodify(fname, ":t")) >= 0 + if stridx(vimwiki#vars#get_global('user_htmls'), fnamemodify(fname, ":t")) >= 0 continue endif " delete if there is no corresponding wiki file - let subdir = vimwiki#base#subdir(VimwikiGet('path_html'), fname) - let wikifile = VimwikiGet('path').subdir. - \fnamemodify(fname, ":t:r").VimwikiGet('ext') + let subdir = vimwiki#base#subdir(vimwiki#vars#get_wikilocal('path_html'), fname) + let wikifile = vimwiki#vars#get_wikilocal('path').subdir. + \fnamemodify(fname, ":t:r").vimwiki#vars#get_wikilocal('ext') if filereadable(wikifile) continue endif @@ -244,7 +244,7 @@ function! s:is_html_uptodate(wikifile) "{{{ endif let wikifile = fnamemodify(a:wikifile, ":p") - let htmlfile = expand(VimwikiGet('path_html').VimwikiGet('subdir'). + let htmlfile = expand(vimwiki#vars#get_wikilocal('path_html') . vimwiki#vars#get_bufferlocal('subdir') . \fnamemodify(wikifile, ":t:r").".html") if getftime(wikifile) <= getftime(htmlfile) && tpl_time <= getftime(htmlfile) @@ -358,12 +358,12 @@ endfunction "}}} " match n-th ARG within {{URL[|ARG1|ARG2|...]}} " {{{ " *c,d,e),... function! vimwiki#html#incl_match_arg(nn_index) - let rx = g:vimwiki_rxWikiInclPrefix. g:vimwiki_rxWikiInclUrl - let rx = rx. repeat(g:vimwiki_rxWikiInclSeparator. g:vimwiki_rxWikiInclArg, a:nn_index-1) + let rx = vimwiki#vars#get_global('rxWikiInclPrefix'). vimwiki#vars#get_global('rxWikiInclUrl') + let rx = rx. repeat(vimwiki#vars#get_global('rxWikiInclSeparator'). vimwiki#vars#get_global('rxWikiInclArg'), a:nn_index-1) if a:nn_index > 0 - let rx = rx. g:vimwiki_rxWikiInclSeparator. '\zs'. g:vimwiki_rxWikiInclArg. '\ze' + let rx = rx. vimwiki#vars#get_global('rxWikiInclSeparator'). '\zs'. vimwiki#vars#get_global('rxWikiInclArg'). '\ze' endif - let rx = rx. g:vimwiki_rxWikiInclArgs. g:vimwiki_rxWikiInclSuffix + let rx = rx. vimwiki#vars#get_global('rxWikiInclArgs'). vimwiki#vars#get_global('rxWikiInclSuffix') return rx endfunction "}}} @@ -372,7 +372,7 @@ function! vimwiki#html#linkify_link(src, descr) "{{{ let src_str = ' href="'.s:safe_html_anchor(a:src).'"' let descr = substitute(a:descr,'^\s*\(.*\)\s*$','\1','') let descr = (descr == "" ? a:src : descr) - let descr_str = (descr =~# g:vimwiki_rxWikiIncl + let descr_str = (descr =~# vimwiki#vars#get_global('rxWikiIncl') \ ? s:tag_wikiincl(descr) \ : descr) return ''.descr_str.'' @@ -388,8 +388,8 @@ endfunction "}}} function! s:tag_weblink(value) "{{{ " Weblink Template -> descr let str = a:value - let url = matchstr(str, g:vimwiki_rxWeblinkMatchUrl) - let descr = matchstr(str, g:vimwiki_rxWeblinkMatchDescr) + let url = matchstr(str, vimwiki#vars#get_syntaxlocal('rxWeblinkMatchUrl')) + let descr = matchstr(str, vimwiki#vars#get_syntaxlocal('rxWeblinkMatchDescr')) let line = vimwiki#html#linkify_link(url, descr) return line endfunction "}}} @@ -404,7 +404,7 @@ function! s:tag_wikiincl(value) "{{{ let line = VimwikiWikiIncludeHandler(str) " otherwise, assume image transclusion if line == '' - let url_0 = matchstr(str, g:vimwiki_rxWikiInclMatchUrl) + let url_0 = matchstr(str, vimwiki#vars#get_global('rxWikiInclMatchUrl')) let descr = matchstr(str, vimwiki#html#incl_match_arg(1)) let verbatim_str = matchstr(str, vimwiki#html#incl_match_arg(2)) @@ -437,8 +437,8 @@ function! s:tag_wikilink(value) "{{{ " [[url#a1#a2]] -> url#a1#a2 " [[#a1#a2]] -> #a1#a2 let str = a:value - let url = matchstr(str, g:vimwiki_rxWikiLinkMatchUrl) - let descr = matchstr(str, g:vimwiki_rxWikiLinkMatchDescr) + let url = matchstr(str, vimwiki#vars#get_syntaxlocal('rxWikiLinkMatchUrl')) + let descr = matchstr(str, vimwiki#vars#get_syntaxlocal('rxWikiLinkMatchDescr')) let descr = (substitute(descr,'^\s*\(.*\)\s*$','\1','') != '' ? descr : url) let line = VimwikiLinkConverter(url, s:current_wiki_file, @@ -527,16 +527,16 @@ function! s:make_tag(line, regexp, func, ...) "{{{ " Exclude preformatted text and href links. " FIXME let patt_splitter = '\(`[^`]\+`\)\|'. - \ '\('.g:vimwiki_rxPreStart.'.\+'.g:vimwiki_rxPreEnd.'\)\|'. + \ '\('.vimwiki#vars#get_syntaxlocal('rxPreStart').'.\+'.vimwiki#vars#get_syntaxlocal('rxPreEnd').'\)\|'. \ '\(\)\|'. \ '\(\)\|'. \ '\(\)\|'. - \ '\('.g:vimwiki_rxEqIn.'\)' + \ '\('.vimwiki#vars#get_syntaxlocal('rxEqIn').'\)' "FIXME FIXME !!! these can easily occur on the same line! "XXX {{{ }}} ??? obsolete if '`[^`]\+`' ==# a:regexp || '{{{.\+}}}' ==# a:regexp || - \ g:vimwiki_rxEqIn ==# a:regexp + \ vimwiki#vars#get_syntaxlocal('rxEqIn') ==# a:regexp let res_line = s:subst_func(a:line, a:regexp, a:func) else let pos = 0 @@ -570,23 +570,23 @@ endfunction " }}} function! s:process_tags_typefaces(line, header_ids) "{{{ let line = a:line - let line = s:make_tag(line, g:vimwiki_rxItalic, 's:tag_em') - let line = s:make_tag(line, g:vimwiki_rxBold, 's:tag_strong', a:header_ids) - let line = s:make_tag(line, g:vimwiki_rxTodo, 's:tag_todo') - let line = s:make_tag(line, g:vimwiki_rxDelText, 's:tag_strike') - let line = s:make_tag(line, g:vimwiki_rxSuperScript, 's:tag_super') - let line = s:make_tag(line, g:vimwiki_rxSubScript, 's:tag_sub') - let line = s:make_tag(line, g:vimwiki_rxCode, 's:tag_code') - let line = s:make_tag(line, g:vimwiki_rxEqIn, 's:tag_eqin') - let line = s:make_tag(line, g:vimwiki_rxTags, 's:tag_tags', a:header_ids) + let line = s:make_tag(line, vimwiki#vars#get_syntaxlocal('rxItalic'), 's:tag_em') + let line = s:make_tag(line, vimwiki#vars#get_syntaxlocal('rxBold'), 's:tag_strong', a:header_ids) + let line = s:make_tag(line, vimwiki#vars#get_global('rxTodo'), 's:tag_todo') + let line = s:make_tag(line, vimwiki#vars#get_syntaxlocal('rxDelText'), 's:tag_strike') + let line = s:make_tag(line, vimwiki#vars#get_syntaxlocal('rxSuperScript'), 's:tag_super') + let line = s:make_tag(line, vimwiki#vars#get_syntaxlocal('rxSubScript'), 's:tag_sub') + let line = s:make_tag(line, vimwiki#vars#get_syntaxlocal('rxCode'), 's:tag_code') + let line = s:make_tag(line, vimwiki#vars#get_syntaxlocal('rxEqIn'), 's:tag_eqin') + let line = s:make_tag(line, vimwiki#vars#get_syntaxlocal('rxTags'), 's:tag_tags', a:header_ids) return line endfunction " }}} function! s:process_tags_links(line) " {{{ let line = a:line - let line = s:make_tag(line, g:vimwiki_rxWikiLink, 's:tag_wikilink') - let line = s:make_tag(line, g:vimwiki_rxWikiIncl, 's:tag_wikiincl') - let line = s:make_tag(line, g:vimwiki_rxWeblink, 's:tag_weblink') + let line = s:make_tag(line, vimwiki#vars#get_syntaxlocal('rxWikiLink'), 's:tag_wikilink') + let line = s:make_tag(line, vimwiki#vars#get_global('rxWikiIncl'), 's:tag_wikiincl') + let line = s:make_tag(line, vimwiki#vars#get_syntaxlocal('rxWeblink'), 's:tag_weblink') return line endfunction " }}} @@ -872,11 +872,11 @@ function! s:process_tag_list(line, lists) "{{{ let st_tag = '
  • ' let chk = matchlist(a:line, a:rx_list) if !empty(chk) && len(chk[1]) > 0 - let completion = index(g:vimwiki_listsyms_list, chk[1]) - let n = len(g:vimwiki_listsyms_list) + let completion = index(vimwiki#vars#get_syntaxlocal('listsyms_list'), chk[1]) + let n = len(vimwiki#vars#get_syntaxlocal('listsyms_list')) if completion == 0 let st_tag = '
  • ' - elseif completion == -1 && chk[1] == g:vimwiki_listsym_rejected + elseif completion == -1 && chk[1] == vimwiki#vars#get_global('listsym_rejected') let st_tag = '
  • ' elseif completion > 0 && completion < n let completion = float2nr(round(completion / (n-1.0) * 3.0 + 0.5 )) @@ -892,7 +892,7 @@ function! s:process_tag_list(line, lists) "{{{ " text. " XXX necessary? in *bold* text, no space must follow the first * if !in_list - let pos = match(a:line, '^\s*'.g:vimwiki_rxBold) + let pos = match(a:line, '^\s*'.vimwiki#vars#get_syntaxlocal('rxBold')) if pos != -1 return [0, []] endif @@ -952,7 +952,7 @@ function! s:process_tag_list(line, lists) "{{{ \ substitute(a:line, lstRegExp.'\%('.checkbox.'\)\?', '', '')) let processed = 1 elseif in_list && a:line =~# '^\s\+\S\+' - if g:vimwiki_list_ignore_newline + if vimwiki#vars#get_global('list_ignore_newline') call add(lines, a:line) else call add(lines, '
    '.a:line) @@ -998,7 +998,7 @@ function! s:process_tag_para(line, para) "{{{ let para = 1 endif let processed = 1 - if g:vimwiki_text_ignore_newline == 1 + if vimwiki#vars#get_global('text_ignore_newline') call add(lines, a:line) else call add(lines, a:line."
    ") @@ -1017,18 +1017,18 @@ function! s:process_tag_h(line, id) "{{{ let h_text = '' let h_id = '' - if a:line =~# g:vimwiki_rxHeader + if a:line =~# vimwiki#vars#get_syntaxlocal('rxHeader') let h_level = vimwiki#u#count_first_sym(a:line) endif if h_level > 0 - let h_text = vimwiki#u#trim(matchstr(line, g:vimwiki_rxHeader)) + let h_text = vimwiki#u#trim(matchstr(line, vimwiki#vars#get_syntaxlocal('rxHeader'))) let h_number = '' let h_complete_id = '' let h_id = s:safe_html_anchor(h_text) let centered = (a:line =~# '^\s') - if h_text !=# g:vimwiki_toc_header + if h_text !=# vimwiki#vars#get_global('toc_header') let a:id[h_level-1] = [h_text, a:id[h_level-1][1]+1] @@ -1046,11 +1046,11 @@ function! s:process_tag_h(line, id) "{{{ let h_number .= a:id[h_level-1][1] let h_complete_id .= a:id[h_level-1][0] - if g:vimwiki_html_header_numbering + if vimwiki#vars#get_global('html_header_numbering') let num = matchstr(h_number, - \ '^\(\d.\)\{'.(g:vimwiki_html_header_numbering-1).'}\zs.*') + \ '^\(\d.\)\{'.(vimwiki#vars#get_global('html_header_numbering')-1).'}\zs.*') if !empty(num) - let num .= g:vimwiki_html_header_numbering_sym + let num .= vimwiki#vars#get_global('html_header_numbering_sym') endif let h_text = num.' '.h_text endif @@ -1198,7 +1198,7 @@ function! s:parse_line(line, state) " {{{ "}}} if !processed - if line =~# g:vimwiki_rxComment + if line =~# vimwiki#vars#get_syntaxlocal('rxComment') let processed = 1 endif endif @@ -1380,24 +1380,24 @@ function! s:parse_line(line, state) " {{{ endfunction " }}} function! s:use_custom_wiki2html() "{{{ - let custom_wiki2html = VimwikiGet('custom_wiki2html') + let custom_wiki2html = vimwiki#vars#get_wikilocal('custom_wiki2html') return !empty(custom_wiki2html) && (s:file_exists(custom_wiki2html) || s:binary_exists(custom_wiki2html)) endfunction " }}} function! vimwiki#html#CustomWiki2HTML(path, wikifile, force) "{{{ call vimwiki#path#mkdir(a:path) - echomsg system(VimwikiGet('custom_wiki2html'). ' '. + echomsg system(vimwiki#vars#get_wikilocal('custom_wiki2html'). ' '. \ a:force. ' '. - \ VimwikiGet('syntax'). ' '. - \ strpart(VimwikiGet('ext'), 1). ' '. + \ vimwiki#vars#get_wikilocal('syntax'). ' '. + \ strpart(vimwiki#vars#get_wikilocal('ext'), 1). ' '. \ shellescape(a:path). ' '. \ shellescape(a:wikifile). ' '. \ shellescape(s:default_CSS_full_name(a:path)). ' '. - \ (len(VimwikiGet('template_path')) > 1 ? shellescape(expand(VimwikiGet('template_path'))) : '-'). ' '. - \ (len(VimwikiGet('template_default')) > 0 ? VimwikiGet('template_default') : '-'). ' '. - \ (len(VimwikiGet('template_ext')) > 0 ? VimwikiGet('template_ext') : '-'). ' '. - \ (len(VimwikiGet('subdir')) > 0 ? shellescape(s:root_path(VimwikiGet('subdir'))) : '-'). ' '. - \ (len(VimwikiGet('custom_wiki2html_args')) > 0 ? VimwikiGet('custom_wiki2html_args') : '-')) + \ (len(vimwiki#vars#get_wikilocal('template_path')) > 1 ? shellescape(expand(vimwiki#vars#get_wikilocal('template_path'))) : '-'). ' '. + \ (len(vimwiki#vars#get_wikilocal('template_default')) > 0 ? vimwiki#vars#get_wikilocal('template_default') : '-'). ' '. + \ (len(vimwiki#vars#get_wikilocal('template_ext')) > 0 ? vimwiki#vars#get_wikilocal('template_ext') : '-'). ' '. + \ (len(vimwiki#vars#get_bufferlocal('subdir')) > 0 ? shellescape(s:root_path(vimwiki#vars#get_bufferlocal('subdir'))) : '-'). ' '. + \ (len(vimwiki#vars#get_global('custom_wiki2html_args')) > 0 ? vimwiki#vars#get_global('custom_wiki2html_args') : '-')) endfunction " }}} function! s:convert_file(path_html, wikifile) "{{{ @@ -1405,7 +1405,7 @@ function! s:convert_file(path_html, wikifile) "{{{ let wikifile = fnamemodify(a:wikifile, ":p") - let path_html = expand(a:path_html).VimwikiGet('subdir') + let path_html = expand(a:path_html).vimwiki#vars#get_bufferlocal('subdir') let htmlfile = fnamemodify(wikifile, ":t:r").'.html' " the currently processed file name is needed when processing links @@ -1450,8 +1450,8 @@ function! s:convert_file(path_html, wikifile) "{{{ " prepare constants for s:safe_html_line() let s:lt_pattern = '<' let s:gt_pattern = '>' - if g:vimwiki_valid_html_tags != '' - let tags = join(split(g:vimwiki_valid_html_tags, '\s*,\s*'), '\|') + if vimwiki#vars#get_global('valid_html_tags') != '' + let tags = join(split(vimwiki#vars#get_global('valid_html_tags'), '\s*,\s*'), '\|') let s:lt_pattern = '\c<\%(/\?\%('.tags.'\)\%(\s\{-1}\S\{-}\)\{-}/\?>\)\@!' let s:gt_pattern = '\c\%(' endif @@ -1516,9 +1516,9 @@ function! s:convert_file(path_html, wikifile) "{{{ call map(html_lines, 'substitute(v:val, "%title%", "'. title .'", "g")') call map(html_lines, 'substitute(v:val, "%date%", "'. date .'", "g")') call map(html_lines, 'substitute(v:val, "%root_path%", "'. - \ s:root_path(VimwikiGet('subdir')) .'", "g")') + \ s:root_path(vimwiki#vars#get_bufferlocal('subdir')) .'", "g")') - let css_name = expand(VimwikiGet('css_name')) + let css_name = expand(vimwiki#vars#get_wikilocal('css_name')) let css_name = substitute(css_name, '\', '/', 'g') call map(html_lines, 'substitute(v:val, "%css%", "'. css_name .'", "g")') @@ -1576,17 +1576,17 @@ function! vimwiki#html#WikiAll2HTML(path_html) "{{{ setlocal nomore " temporarily adjust current_subdir global state variable - let current_subdir = VimwikiGet('subdir') - let current_invsubdir = VimwikiGet('invsubdir') + let current_subdir = vimwiki#vars#get_bufferlocal('subdir') + let current_invsubdir = vimwiki#vars#get_bufferlocal('invsubdir') - let wikifiles = split(glob(VimwikiGet('path').'**/*'.VimwikiGet('ext')), '\n') + let wikifiles = split(glob(vimwiki#vars#get_wikilocal('path').'**/*'.vimwiki#vars#get_wikilocal('ext')), '\n') for wikifile in wikifiles let wikifile = fnamemodify(wikifile, ":p") " temporarily adjust 'subdir' and 'invsubdir' state variables - let subdir = vimwiki#base#subdir(VimwikiGet('path'), wikifile) - call VimwikiSet('subdir', subdir) - call VimwikiSet('invsubdir', vimwiki#base#invsubdir(subdir)) + let subdir = vimwiki#base#subdir(vimwiki#vars#get_wikilocal('path'), wikifile) + call vimwiki#vars#set_bufferlocal('subdir', subdir) + call vimwiki#vars#set_bufferlocal('invsubdir', vimwiki#base#invsubdir(subdir)) if !s:is_html_uptodate(wikifile) echomsg 'Vimwiki: Processing '.wikifile @@ -1597,8 +1597,8 @@ function! vimwiki#html#WikiAll2HTML(path_html) "{{{ endif endfor " reset 'subdir' state variable - call VimwikiSet('subdir', current_subdir) - call VimwikiSet('invsubdir', current_invsubdir) + call vimwiki#vars#set_bufferlocal('subdir', current_subdir) + call vimwiki#vars#set_bufferlocal('invsubdir', current_invsubdir) let created = s:create_default_CSS(path_html) if created @@ -1618,10 +1618,9 @@ function! s:binary_exists(fname) "{{{ return executable(expand(a:fname)) endfunction "}}} -" uses VimwikiGet('path') function! s:get_wikifile_url(wikifile) "{{{ - return VimwikiGet('path_html'). - \ vimwiki#base#subdir(VimwikiGet('path'), a:wikifile). + return vimwiki#vars#get_wikilocal('path_html') . + \ vimwiki#base#subdir(vimwiki#vars#get_wikilocal('path'), a:wikifile). \ fnamemodify(a:wikifile, ":t:r").'.html' endfunction "}}} diff --git a/autoload/vimwiki/lst.vim b/autoload/vimwiki/lst.vim index f73fad3..6671b0d 100644 --- a/autoload/vimwiki/lst.vim +++ b/autoload/vimwiki/lst.vim @@ -109,30 +109,31 @@ else endif "}}} function! vimwiki#lst#default_symbol() "{{{ - return g:vimwiki_list_markers[0] + return vimwiki#vars#get_syntaxlocal('list_markers')[0] endfunction "}}} function! vimwiki#lst#get_list_margin() "{{{ - if VimwikiGet('list_margin') < 0 + let list_margin = vimwiki#vars#get_wikilocal('list_margin') + if list_margin < 0 return &sw else - return VimwikiGet('list_margin') + return list_margin endif endfunction "}}} "Returns: the column where the text of a line starts (possible list item "markers and checkboxes are skipped) function! s:text_begin(lnum) "{{{ - return s:string_length(matchstr(getline(a:lnum), g:vimwiki_rxListItem)) + return s:string_length(matchstr(getline(a:lnum), vimwiki#vars#get_syntaxlocal('rxListItem'))) endfunction "}}} "Returns: 2 if there is a marker and text " 1 for a marker and no text " 0 for no marker at all (empty line or only text) function! s:line_has_marker(lnum) "{{{ - if getline(a:lnum) =~# g:vimwiki_rxListItem.'\s*$' + if getline(a:lnum) =~# vimwiki#vars#get_syntaxlocal('rxListItem').'\s*$' return 1 - elseif getline(a:lnum) =~# g:vimwiki_rxListItem.'\s*\S' + elseif getline(a:lnum) =~# vimwiki#vars#get_syntaxlocal('rxListItem').'\s*\S' return 2 else return 0 @@ -156,7 +157,7 @@ function! s:get_item(lnum) "{{{ return item endif - let matches = matchlist(getline(a:lnum), g:vimwiki_rxListItem) + let matches = matchlist(getline(a:lnum), vimwiki#vars#get_syntaxlocal('rxListItem')) if matches == [] || \ (matches[1] == '' && matches[2] == '') || \ (matches[1] != '' && matches[2] != '') @@ -187,10 +188,10 @@ function! s:get_level(lnum) "{{{ if getline(a:lnum) =~# '^\s*$' return 0 endif - if VimwikiGet('syntax') !=? 'media' + if !vimwiki#vars#get_syntaxlocal('recurring_bullets') let level = indent(a:lnum) else - let level = s:string_length(matchstr(getline(a:lnum), s:rx_bullet_chars))-1 + let level = s:string_length(matchstr(getline(a:lnum), vimwiki#vars#get_syntaxlocal(rx_bullet_chars)))-1 if level < 0 let level = (indent(a:lnum) == 0) ? 0 : 9999 endif @@ -206,17 +207,19 @@ function! s:guess_kind_of_numbered_item(item) "{{{ let number_chars = a:item.mrkr[:-2] let divisor = a:item.mrkr[-1:] + let number_kinds = vimwiki#vars#get_syntaxlocal('number_kinds') + if number_chars =~# '\d\+' return '1' endif if number_chars =~# '\l\+' - if number_chars !~# '^[ivxlcdm]\+' || index(s:number_kinds, 'i') == -1 + if number_chars !~# '^[ivxlcdm]\+' || index(number_kinds, 'i') == -1 return 'a' else let item_above = s:get_prev_list_item(a:item, 0) if item_above.type != 0 - if index(s:number_kinds, 'a') == -1 || + if index(number_kinds, 'a') == -1 || \ (item_above.mrkr[-1:] !=# divisor && number_chars =~# 'i\+') || \ s:increment_i(item_above.mrkr[:-2]) ==# number_chars return 'i' @@ -224,7 +227,7 @@ function! s:guess_kind_of_numbered_item(item) "{{{ return 'a' endif else - if number_chars =~# 'i\+' || index(s:number_kinds, 'a') == -1 + if number_chars =~# 'i\+' || index(number_kinds, 'a') == -1 return 'i' else return 'a' @@ -234,13 +237,13 @@ function! s:guess_kind_of_numbered_item(item) "{{{ endif endif if number_chars =~# '\u\+' - if number_chars !~# '^[IVXLCDM]\+' || index(s:number_kinds, 'I') == -1 + if number_chars !~# '^[IVXLCDM]\+' || index(number_kinds, 'I') == -1 return 'A' else let item_above = s:get_prev_list_item(a:item, 0) if item_above.type != 0 - if index(s:number_kinds, 'A') == -1 || + if index(number_kinds, 'A') == -1 || \ (item_above.mrkr[-1:] !=# divisor && number_chars =~# 'I\+') || \ s:increment_I(item_above.mrkr[:-2]) ==# number_chars return 'I' @@ -248,7 +251,7 @@ function! s:guess_kind_of_numbered_item(item) "{{{ return 'A' endif else - if number_chars =~# 'I\+' || index(s:number_kinds, 'A') == -1 + if number_chars =~# 'I\+' || index(number_kinds, 'A') == -1 return 'I' else return 'A' @@ -263,8 +266,9 @@ function! s:regexp_of_marker(item) "{{{ if a:item.type == 1 return vimwiki#u#escape(a:item.mrkr) elseif a:item.type == 2 + let number_divisors = vimwiki#vars#get_syntaxlocal('number_divisors') for ki in ['d', 'u', 'l'] - let match = matchstr(a:item.mrkr, '\'.ki.'\+['.s:number_divisors.']') + let match = matchstr(a:item.mrkr, '\'.ki.'\+['.number_divisors.']') if match != '' return '\'.ki.'\+'.vimwiki#u#escape(match[-1:]) endif @@ -376,10 +380,10 @@ endfunction "}}} "If there is no second argument, 0 is returned at a header, otherwise the "header is skipped function! s:get_next_line(lnum, ...) "{{{ - if getline(a:lnum) =~# g:vimwiki_rxPreStart + if getline(a:lnum) =~# vimwiki#vars#get_syntaxlocal('rxPreStart') let cur_ln = a:lnum + 1 while cur_ln <= line('$') && - \ getline(cur_ln) !~# g:vimwiki_rxPreEnd + \ getline(cur_ln) !~# vimwiki#vars#get_syntaxlocal('rxPreEnd') let cur_ln += 1 endwhile let next_line = cur_ln @@ -387,12 +391,12 @@ function! s:get_next_line(lnum, ...) "{{{ let next_line = nextnonblank(a:lnum+1) endif - if a:0 > 0 && getline(next_line) =~# g:vimwiki_rxHeader + if a:0 > 0 && getline(next_line) =~# vimwiki#vars#get_syntaxlocal('rxHeader') let next_line = s:get_next_line(next_line, 1) endif if next_line < 0 || next_line > line('$') || - \ (getline(next_line) =~# g:vimwiki_rxHeader && a:0 == 0) + \ (getline(next_line) =~# vimwiki#vars#get_syntaxlocal('rxHeader') && a:0 == 0) return 0 endif @@ -404,10 +408,10 @@ endfunction "}}} function! s:get_prev_line(lnum) "{{{ let prev_line = prevnonblank(a:lnum-1) - if getline(prev_line) =~# g:vimwiki_rxPreEnd + if getline(prev_line) =~# vimwiki#vars#get_syntaxlocal('rxPreEnd') let cur_ln = a:lnum - 1 while 1 - if cur_ln == 0 || getline(cur_ln) =~# g:vimwiki_rxPreStart + if cur_ln == 0 || getline(cur_ln) =~# vimwiki#vars#get_syntaxlocal('rxPreStart') break endif let cur_ln -= 1 @@ -416,7 +420,7 @@ function! s:get_prev_line(lnum) "{{{ endif if prev_line < 0 || prev_line > line('$') || - \ getline(prev_line) =~# g:vimwiki_rxHeader + \ getline(prev_line) =~# vimwiki#vars#get_syntaxlocal('rxHeader') return 0 endif @@ -693,11 +697,11 @@ function! s:get_rate(item) "{{{ return -1 endif let state = a:item.cb - if state == g:vimwiki_listsym_rejected + if state == vimwiki#vars#get_global('listsym_rejected') return -1 endif - let n=len(g:vimwiki_listsyms_list) - return index(g:vimwiki_listsyms_list, state) * 100/(n-1) + let n = len(vimwiki#vars#get_syntaxlocal('listsyms_list')) + return index(vimwiki#vars#get_syntaxlocal('listsyms_list'), state) * 100/(n-1) endfunction "}}} "Set state of the list item to [ ] or [o] or whatever @@ -732,17 +736,18 @@ endfunction "}}} "Returns: the appropriate symbol for a given percent rate function! s:rate_to_state(rate) "{{{ + let listsyms_list = vimwiki#vars#get_syntaxlocal('listsyms_list') let state = '' - let n=len(g:vimwiki_listsyms_list) + let n = len(listsyms_list) if a:rate == 100 - let state = g:vimwiki_listsyms_list[n-1] + let state = listsyms_list[n-1] elseif a:rate == 0 - let state = g:vimwiki_listsyms_list[0] + let state = listsyms_list[0] elseif a:rate == -1 - let state = g:vimwiki_listsym_rejected + let state = vimwiki#vars#get_global('listsym_rejected') else let index = float2nr(ceil(a:rate/100.0*(n-2))) - let state = g:vimwiki_listsyms_list[index] + let state = listsyms_list[index] endif return state endfunction "}}} @@ -799,7 +804,7 @@ function! s:create_cb(item) "{{{ endif let new_item = a:item - let new_item.cb = g:vimwiki_listsyms_list[0] + let new_item.cb = vimwiki#vars#get_syntaxlocal('listsyms_list')[0] call s:substitute_rx_in_line(new_item.lnum, \ vimwiki#u#escape(new_item.mrkr) . '\zs\ze', ' [' . new_item.cb . ']') @@ -893,7 +898,7 @@ function! vimwiki#lst#decrement_cb(from_line, to_line) "{{{ "if from_line has CB, decrement it and set all siblings to the same new state let rate_first_line = s:get_rate(from_item) - let n=len(g:vimwiki_listsyms_list) + let n = len(vimwiki#vars#get_syntaxlocal('listsyms_list')) let new_rate = max([rate_first_line - 100/(n-1)-1, 0]) call s:change_cb(a:from_line, a:to_line, new_rate) @@ -910,7 +915,36 @@ function! vimwiki#lst#increment_cb(from_line, to_line) "{{{ "if from_line has CB, increment it and set all siblings to the same new state let rate_first_line = s:get_rate(from_item) - let n=len(g:vimwiki_listsyms_list) + let n = len(vimwiki#vars#get_syntaxlocal('listsyms_list')) + let new_rate = min([rate_first_line + 100/(n-1)+1, 100]) + + call s:change_cb(a:from_line, a:to_line, new_rate) + +endfunction "}}} + +"Toggles checkbox between [ ] and [X] or creates one +"in the lines of the given range +function! vimwiki#lst#toggle_cb(from_line, to_line) "{{{ + return s:toggle_create_cb(a:from_line, a:to_line, 100, 0) +endfunction "}}} + +"Toggles checkbox between [ ] and [-] or creates one +"in the lines of the given range +function! vimwiki#lst#toggle_rejected_cb(from_line, to_line) "{{{ + return s:toggle_create_cb(a:from_line, a:to_line, -1, 0) +endfunction "}}} + +"Increment checkbox between [ ] and [X] +"in the lines of the given range +function! vimwiki#lst#increment_cb(from_line, to_line) "{{{ + let from_item = s:get_corresponding_item(a:from_line) + if from_item.type == 0 + return + endif + + "if from_line has CB, increment it and set all siblings to the same new state + let rate_first_line = s:get_rate(from_item) + let n = len(vimwiki#vars#get_syntaxlocal('listsyms_list')) let new_rate = min([rate_first_line + 100/(n-1)+1, 100]) call s:change_cb(a:from_line, a:to_line, new_rate) @@ -990,8 +1024,8 @@ endfunction "}}} function! s:decrease_level(item) "{{{ let removed_indent = 0 - if VimwikiGet('syntax') ==? 'media' && a:item.type == 1 && - \ index(s:multiple_bullet_chars, s:first_char(a:item.mrkr)) > -1 + if vimwiki#vars#get_syntaxlocal('recurring_bullets') && a:item.type == 1 && + \ index(vimwiki#vars#get_syntaxlocal('multiple_bullet_chars'), s:first_char(a:item.mrkr)) > -1 if s:string_length(a:item.mrkr) >= 2 call s:substitute_string_in_line(a:item.lnum, \ s:first_char(a:item.mrkr), '') @@ -1012,8 +1046,8 @@ endfunction "}}} function! s:increase_level(item) "{{{ let additional_indent = 0 - if VimwikiGet('syntax') ==? 'media' && a:item.type == 1 && - \ index(s:multiple_bullet_chars, s:first_char(a:item.mrkr)) > -1 + if vimwiki#vars#get_syntaxlocal('recurring_bullets') && a:item.type == 1 && + \ index(vimwiki#vars#get_syntaxlocal('multiple_bullet_chars'), s:first_char(a:item.mrkr)) > -1 call s:substitute_string_in_line(a:item.lnum, a:item.mrkr, a:item.mrkr . \ s:first_char(a:item.mrkr)) let additional_indent = 1 @@ -1034,8 +1068,8 @@ endfunction "}}} "a:indent_by can be negative function! s:indent_line_by(lnum, indent_by) "{{{ let item = s:get_item(a:lnum) - if VimwikiGet('syntax') ==? 'media' && item.type == 1 && - \ index(s:multiple_bullet_chars, s:first_char(item.mrkr)) > -1 + if vimwiki#vars#get_syntaxlocal('recurring_bullets') && item.type == 1 && + \ index(vimwiki#vars#get_syntaxlocal('multiple_bullet_chars'), s:first_char(item.mrkr)) > -1 if a:indent_by > 0 call s:substitute_string_in_line(a:lnum, item.mrkr, \ item.mrkr . s:first_char(item.mrkr)) @@ -1149,38 +1183,40 @@ function! s:get_idx_list_markers(item) "{{{ else let m = s:guess_kind_of_numbered_item(a:item) . a:item.mrkr[-1:] endif - return index(g:vimwiki_list_markers, m) + return index(vimwiki#vars#get_syntaxlocal('list_markers'), m) endfunction "}}} "changes the marker of the given item to the next in g:vimwiki_list_markers function! s:get_next_mrkr(item) "{{{ + let markers = vimwiki#vars#get_syntaxlocal('list_markers') if a:item.type == 0 - let new_mrkr = g:vimwiki_list_markers[0] + let new_mrkr = markers[0] else let idx = s:get_idx_list_markers(a:item) - let new_mrkr = g:vimwiki_list_markers[(idx+1) % len(g:vimwiki_list_markers)] + let new_mrkr = markers[(idx+1) % len(markers)] endif return new_mrkr endfunction "}}} "changes the marker of the given item to the previous in g:vimwiki_list_markers function! s:get_prev_mrkr(item) "{{{ + let markers = vimwiki#vars#get_syntaxlocal('list_markers') if a:item.type == 0 - return g:vimwiki_list_markers[-1] + return markers[-1] endif let idx = s:get_idx_list_markers(a:item) if idx == -1 - return g:vimwiki_list_markers[-1] + return markers[-1] else - return g:vimwiki_list_markers[(idx - 1 + len(g:vimwiki_list_markers)) % - \ len(g:vimwiki_list_markers)] + return markers[(idx - 1 + len(markers)) % + \ len(markers)] endif endfunction "}}} function! s:set_new_mrkr(item, new_mrkr) "{{{ if a:item.type == 0 call s:substitute_rx_in_line(a:item.lnum, '^\s*\zs\ze', a:new_mrkr.' ') - if indent(a:item.lnum) == 0 && VimwikiGet('syntax') !=? 'media' + if indent(a:item.lnum) == 0 && !vimwiki#vars#get_syntaxlocal('recurring_bullets') call s:set_indent(a:item.lnum, vimwiki#lst#get_list_margin()) endif else @@ -1202,7 +1238,7 @@ function! vimwiki#lst#change_marker(from_line, to_line, new_mrkr, mode) "{{{ endif "handle markers like *** - if index(s:multiple_bullet_chars, s:first_char(new_mrkr)) > -1 + if index(vimwiki#vars#get_syntaxlocal('multiple_bullet_chars'), s:first_char(new_mrkr)) > -1 "use *** if the item above has *** too let item_above = s:get_prev_list_item(cur_item, 1) if item_above.type == 1 && @@ -1217,7 +1253,7 @@ function! vimwiki#lst#change_marker(from_line, to_line, new_mrkr, mode) "{{{ else "if the old is ### and the new is * use *** if cur_item.type == 1 && - \ index(s:multiple_bullet_chars,s:first_char(cur_item.mrkr))>-1 + \ index(vimwiki#vars#get_syntaxlocal('multiple_bullet_chars'), s:first_char(cur_item.mrkr))>-1 let new_mrkr = repeat(new_mrkr, s:string_length(cur_item.mrkr)) else "use *** if the parent item has ** @@ -1261,7 +1297,7 @@ endfunction "}}} "sets kind of the item depending on neighbor items and the parent item function! s:adjust_mrkr(item) "{{{ - if a:item.type == 0 || VimwikiGet('syntax') ==? 'media' + if a:item.type == 0 || vimwiki#vars#get_syntaxlocal('recurring_bullets') return endif @@ -1273,7 +1309,7 @@ function! s:adjust_mrkr(item) "{{{ "if possible, set e.g. *** if parent has ** as marker if neighbor_item.type == 0 && a:item.type == 1 && - \ index(s:multiple_bullet_chars, s:first_char(a:item.mrkr)) > -1 + \ index(vimwiki#vars#get_syntaxlocal('multiple_bullet_chars'), s:first_char(a:item.mrkr)) > -1 let parent_item = s:get_parent(a:item) if parent_item.type == 1 && \ s:first_char(parent_item.mrkr) ==# s:first_char(a:item.mrkr) @@ -1291,7 +1327,7 @@ function! s:clone_marker_from_to(from, to) "{{{ if item_from.type == 0 | return | endif let new_mrkr = item_from.mrkr . ' ' call s:substitute_rx_in_line(a:to, '^\s*', new_mrkr) - let new_indent = ( VimwikiGet('syntax') !=? 'media' ? indent(a:from) : 0 ) + let new_indent = ( vimwiki#vars#get_syntaxlocal('recurring_bullets') ? 0 : indent(a:from) ) call s:set_indent(a:to, new_indent) if item_from.cb != '' call s:create_cb(s:get_item(a:to)) @@ -1328,7 +1364,7 @@ function! s:create_marker(lnum) "{{{ call s:clone_marker_from_to(new_sibling.lnum, a:lnum) else let cur_item = s:get_item(a:lnum) - call s:set_new_mrkr(cur_item, g:vimwiki_list_markers[0]) + call s:set_new_mrkr(cur_item, vimwiki#vars#get_syntaxlocal('list_markers')[0]) call s:adjust_numbered_list(cur_item, 0, 0) endif endfunction "}}} @@ -1528,53 +1564,6 @@ endfunction "}}} "handle keys }}} "misc stuff {{{ -function! vimwiki#lst#setup_marker_infos() "{{{ - let s:rx_bullet_chars = '['.join(keys(g:vimwiki_bullet_types), '').']\+' - - let s:multiple_bullet_chars = [] - for i in keys(g:vimwiki_bullet_types) - if g:vimwiki_bullet_types[i] == 1 - call add(s:multiple_bullet_chars, i) - endif - endfor - - let s:number_kinds = [] - let s:number_divisors = "" - for i in g:vimwiki_number_types - call add(s:number_kinds, i[0]) - let s:number_divisors .= vimwiki#u#escape(i[1]) - endfor - - let s:char_to_rx = {'1': '\d\+', 'i': '[ivxlcdm]\+', 'I': '[IVXLCDM]\+', - \ 'a': '\l\{1,2}', 'A': '\u\{1,2}'} - - "create regexp for bulleted list items - let g:vimwiki_rxListBullet = join( map(keys(g:vimwiki_bullet_types), - \'vimwiki#u#escape(v:val).repeat("\\+", g:vimwiki_bullet_types[v:val])' - \ ) , '\|') - - "create regex for numbered list items - if !empty(g:vimwiki_number_types) - let g:vimwiki_rxListNumber = '\C\%(' - for type in g:vimwiki_number_types[:-2] - let g:vimwiki_rxListNumber .= s:char_to_rx[type[0]] . - \ vimwiki#u#escape(type[1]) . '\|' - endfor - let g:vimwiki_rxListNumber .= s:char_to_rx[g:vimwiki_number_types[-1][0]]. - \ vimwiki#u#escape(g:vimwiki_number_types[-1][1]) . '\)' - else - "regex that matches nothing - let g:vimwiki_rxListNumber = '$^' - endif - - "the user can set the listsyms as string, but vimwiki needs a list - let g:vimwiki_listsyms_list = split(g:vimwiki_listsyms, '\zs') - - if match(g:vimwiki_listsyms, g:vimwiki_listsym_rejected) != -1 - echomsg "Warning: g:vimwiki_listsyms and g:vimwiki_listsym_rejected overlap" - endif -endfunction "}}} - function! vimwiki#lst#TO_list_item(inner, visual) "{{{ let lnum = prevnonblank('.') let item = s:get_corresponding_item(lnum) diff --git a/autoload/vimwiki/markdown_base.vim b/autoload/vimwiki/markdown_base.vim index 41664e3..fa14b62 100644 --- a/autoload/vimwiki/markdown_base.vim +++ b/autoload/vimwiki/markdown_base.vim @@ -13,58 +13,36 @@ function! s:safesubstitute(text, search, replace, mode) "{{{ return substitute(a:text, a:search, escaped, a:mode) endfunction " }}} -" 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 " Why noautocmd? Because https://github.com/vimwiki/vimwiki/issues/121 - noautocmd execute 'vimgrep #'.g:vimwiki_rxMkdRef.'#j %' + noautocmd execute 'vimgrep #'.vimwiki#vars#get_syntaxlocal('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) + let descr = matchstr(matchline, vimwiki#vars#get_syntaxlocal('rxMkdRefMatchDescr')) + let url = matchstr(matchline, vimwiki#vars#get_syntaxlocal('rxMkdRefMatchUrl')) if descr != '' && url != '' let mkd_refs[descr] = url endif endfor - call VimwikiSet('markdown_refs', mkd_refs) + call vimwiki#vars#set_bufferlocal('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() + let mkd_refs = vimwiki#vars#get_bufferlocal('markdown_refs') if has_key(mkd_refs, link) let url = mkd_refs[link] call vimwiki#base#system_open_link(url) @@ -84,50 +62,50 @@ function! s:normalize_link_syntax_n() " {{{ let lnum = line('.') " try WikiIncl - let lnk = vimwiki#base#matchstr_at_cursor(g:vimwiki_rxWikiIncl) + let lnk = vimwiki#base#matchstr_at_cursor(vimwiki#vars#get_global('rxWikiIncl')) if !empty(lnk) " NO-OP !! return endif " try WikiLink0: replace with WikiLink1 - let lnk = vimwiki#base#matchstr_at_cursor(g:vimwiki_rxWikiLink0) + let lnk = vimwiki#base#matchstr_at_cursor(vimwiki#vars#get_syntaxlocal('rxWikiLink0')) if !empty(lnk) let sub = vimwiki#base#normalize_link_helper(lnk, - \ g:vimwiki_rxWikiLinkMatchUrl, g:vimwiki_rxWikiLinkMatchDescr, - \ g:vimwiki_WikiLink1Template2) - call vimwiki#base#replacestr_at_cursor(g:vimwiki_rxWikiLink0, sub) + \ vimwiki#vars#get_syntaxlocal('rxWikiLinkMatchUrl'), vimwiki#vars#get_syntaxlocal('rxWikiLinkMatchDescr'), + \ vimwiki#vars#get_syntaxlocal('WikiLink1Template2')) + call vimwiki#base#replacestr_at_cursor(vimwiki#vars#get_syntaxlocal('rxWikiLink0'), sub) return endif " try WikiLink1: replace with WikiLink0 - let lnk = vimwiki#base#matchstr_at_cursor(g:vimwiki_rxWikiLink1) + let lnk = vimwiki#base#matchstr_at_cursor(vimwiki#vars#get_syntaxlocal('rxWikiLink1')) if !empty(lnk) let sub = vimwiki#base#normalize_link_helper(lnk, - \ g:vimwiki_rxWikiLinkMatchUrl, g:vimwiki_rxWikiLinkMatchDescr, - \ g:vimwiki_WikiLinkTemplate2) - call vimwiki#base#replacestr_at_cursor(g:vimwiki_rxWikiLink1, sub) + \ vimwiki#vars#get_syntaxlocal('rxWikiLinkMatchUrl'), vimwiki#vars#get_syntaxlocal('rxWikiLinkMatchDescr'), + \ vimwiki#vars#get_global('WikiLinkTemplate2')) + call vimwiki#base#replacestr_at_cursor(vimwiki#vars#get_syntaxlocal('rxWikiLink1'), sub) return endif " try Weblink - let lnk = vimwiki#base#matchstr_at_cursor(g:vimwiki_rxWeblink) + let lnk = vimwiki#base#matchstr_at_cursor(vimwiki#vars#get_syntaxlocal('rxWeblink')) if !empty(lnk) let sub = vimwiki#base#normalize_link_helper(lnk, - \ g:vimwiki_rxWeblinkMatchUrl, g:vimwiki_rxWeblinkMatchDescr, - \ g:vimwiki_Weblink1Template) - call vimwiki#base#replacestr_at_cursor(g:vimwiki_rxWeblink, sub) + \ vimwiki#vars#get_syntaxlocal('rxWeblinkMatchUrl'), vimwiki#vars#get_syntaxlocal('rxWeblinkMatchDescr'), + \ vimwiki#vars#get_syntaxlocal('Weblink1Template')) + call vimwiki#base#replacestr_at_cursor(vimwiki#vars#get_syntaxlocal('rxWeblink'), sub) return endif " try Word (any characters except separators) " rxWord is less permissive than rxWikiLinkUrl which is used in " normalize_link_syntax_v - let lnk = vimwiki#base#matchstr_at_cursor(g:vimwiki_rxWord) + let lnk = vimwiki#base#matchstr_at_cursor(vimwiki#vars#get_global('rxWord')) if !empty(lnk) let sub = vimwiki#base#normalize_link_helper(lnk, - \ g:vimwiki_rxWord, '', - \ g:vimwiki_Weblink1Template) + \ vimwiki#vars#get_global('rxWord'), '', + \ vimwiki#vars#get_syntaxlocal('Weblink1Template')) call vimwiki#base#replacestr_at_cursor('\V'.lnk, sub) return endif @@ -146,7 +124,8 @@ function! s:normalize_link_syntax_v() " {{{ try norm! gvy let visual_selection = @" - let link = s:safesubstitute(g:vimwiki_Weblink1Template, '__LinkUrl__', visual_selection, '') + let link = s:safesubstitute(vimwiki#vars#get_syntaxlocal('Weblink1Template'), + \ '__LinkUrl__', visual_selection, '') let link = s:safesubstitute(link, '__LinkDescription__', visual_selection, '') call setreg('"', link, 'v') diff --git a/autoload/vimwiki/path.vim b/autoload/vimwiki/path.vim index 9790316..263466c 100644 --- a/autoload/vimwiki/path.vim +++ b/autoload/vimwiki/path.vim @@ -133,8 +133,8 @@ function! vimwiki#path#mkdir(path, ...) "{{{ endif let path = vimwiki#path#chomp_slash(path) - if vimwiki#u#is_windows() && !empty(g:vimwiki_w32_dir_enc) - let path = iconv(path, &enc, g:vimwiki_w32_dir_enc) + if vimwiki#u#is_windows() && !empty(vimwiki#vars#get_global('w32_dir_enc')) + let path = iconv(path, &enc, vimwiki#vars#get_global('w32_dir_enc')) endif if a:0 && a:1 && input("Vimwiki: Make new directory: " diff --git a/autoload/vimwiki/tags.vim b/autoload/vimwiki/tags.vim index 9585641..490b47d 100644 --- a/autoload/vimwiki/tags.vim +++ b/autoload/vimwiki/tags.vim @@ -28,7 +28,7 @@ function! vimwiki#tags#update_tags(full_rebuild, all_files) "{{{ let all_files = a:all_files != '' if !a:full_rebuild " Updating for one page (current) - let page_name = VimwikiGet('subdir') . expand('%:t:r') + let page_name = vimwiki#vars#get_bufferlocal('subdir') . expand('%:t:r') " Collect tags in current file let tags = s:scan_tags(getline(1, '$'), page_name) " Load metadata file @@ -40,8 +40,8 @@ function! vimwiki#tags#update_tags(full_rebuild, all_files) "{{{ " Save call s:write_tags_metadata(metadata) else " full rebuild - let files = vimwiki#base#find_files(g:vimwiki_current_idx, 0) - let wiki_base_dir = VimwikiGet('path', g:vimwiki_current_idx) + let files = vimwiki#base#find_files(vimwiki#vars#get_bufferlocal('wiki_nr'), 0) + let wiki_base_dir = vimwiki#vars#get_wikilocal('path') let tags_file_last_modification = \ getftime(vimwiki#tags#metadata_file_path()) let metadata = s:load_tags_metadata() @@ -68,8 +68,8 @@ function! s:scan_tags(lines, page_name) "{{{ " Code wireframe to scan for headers -- borrowed from " vimwiki#base#get_anchors(), with minor modifications. - let rxheader = g:vimwiki_{VimwikiGet('syntax')}_header_search - let rxtag = g:vimwiki_{VimwikiGet('syntax')}_tag_search + let rxheader = vimwiki#vars#get_syntaxlocal('header_search') + let rxtag = vimwiki#vars#get_syntaxlocal('tag_search') let anchor_level = ['', '', '', '', '', '', ''] let current_complete_anchor = '' @@ -141,7 +141,7 @@ endfunction " }}} " vimwiki#tags#metadata_file_path " Returns tags metadata file path function! vimwiki#tags#metadata_file_path() abort "{{{ - return fnamemodify(vimwiki#path#join_path(VimwikiGet('path'), s:TAGS_METADATA_FILE_NAME), ':p') + return fnamemodify(vimwiki#path#join_path(vimwiki#vars#get_wikilocal('path'), s:TAGS_METADATA_FILE_NAME), ':p') endfunction " }}} " s:load_tags_metadata @@ -261,7 +261,7 @@ function! s:write_tags_metadata(metadata) "{{{ let entry_data = substitute(entry_data, "\n", '\\n', 'g') call add(tags, \ entry.tagname . "\t" - \ . pagename . VimwikiGet('ext') . "\t" + \ . pagename . vimwiki#vars#get_wikilocal('ext') . "\t" \ . entry.lineno \ . ';"' \ . "\t" . "vimwiki:" . entry_data @@ -315,18 +315,18 @@ function! vimwiki#tags#generate_tags(...) abort "{{{ if need_all_tags || index(specific_tags, tagname) != -1 call extend(lines, [ \ '', - \ substitute(g:vimwiki_rxH2_Template, '__Header__', tagname, ''), + \ substitute(vimwiki#vars#get_syntaxlocal('rxH2_Template'), '__Header__', tagname, ''), \ '' ]) for taglink in sort(tags_entries[tagname]) call add(lines, bullet . - \ substitute(g:vimwiki_WikiLinkTemplate1, '__LinkUrl__', taglink, '')) + \ substitute(vimwiki#vars#get_global('WikiLinkTemplate1'), '__LinkUrl__', taglink, '')) endfor endif endfor - let links_rx = '\m\%(^\s*$\)\|\%('.g:vimwiki_rxH2.'\)\|\%(^\s*' + let links_rx = '\m\%(^\s*$\)\|\%('.vimwiki#vars#get_syntaxlocal('rxH2').'\)\|\%(^\s*' \ .vimwiki#u#escape(vimwiki#lst#default_symbol()).' ' - \ .g:vimwiki_rxWikiLink.'$\)' + \ .vimwiki#vars#get_syntaxlocal('rxWikiLink').'$\)' call vimwiki#base#update_listing_in_buffer(lines, 'Generated Tags', links_rx, \ line('$')+1, 1) diff --git a/autoload/vimwiki/tbl.vim b/autoload/vimwiki/tbl.vim index b05d67c..d9c7134 100644 --- a/autoload/vimwiki/tbl.vim +++ b/autoload/vimwiki/tbl.vim @@ -19,7 +19,7 @@ let s:textwidth = &tw " Misc functions {{{ function! s:rxSep() "{{{ - return g:vimwiki_rxTableSep + return vimwiki#vars#get_syntaxlocal('rxTableSep') endfunction "}}} function! s:wide_len(str) "{{{ @@ -29,7 +29,7 @@ function! s:wide_len(str) "{{{ endif " get str display width in vim ver < 7.2 - if !g:vimwiki_CJK_length + if !vimwiki#vars#get_global('CJK_length') let ret = strlen(substitute(a:str, '.', 'x', 'g')) else let savemodified = &modified diff --git a/autoload/vimwiki/u.vim b/autoload/vimwiki/u.vim index 29f53e2..009bf9d 100644 --- a/autoload/vimwiki/u.vim +++ b/autoload/vimwiki/u.vim @@ -43,17 +43,12 @@ endfunction "}}} " Load concrete Wiki syntax: sets regexes and templates for headers and links function vimwiki#u#reload_regexes() "{{{ - execute 'runtime! syntax/vimwiki_'.VimwikiGet('syntax').'.vim' -endfunction "}}} - -" Load omnipresent Wiki syntax -function vimwiki#u#reload_omni_regexes() "{{{ - execute 'runtime! syntax/omnipresent_syntax.vim' + execute 'runtime! syntax/vimwiki_'.vimwiki#vars#get_wikilocal('syntax').'.vim' endfunction "}}} " Load syntax-specific functionality function vimwiki#u#reload_regexes_custom() "{{{ - execute 'runtime! syntax/vimwiki_'.VimwikiGet('syntax').'_custom.vim' + execute 'runtime! syntax/vimwiki_'.vimwiki#vars#get_wikilocal('syntax').'_custom.vim' endfunction "}}} " Backward compatible version of the built-in function shiftwidth() diff --git a/autoload/vimwiki/vars.vim b/autoload/vimwiki/vars.vim new file mode 100644 index 0000000..2e704a7 --- /dev/null +++ b/autoload/vimwiki/vars.vim @@ -0,0 +1,699 @@ +" vim:tabstop=2:shiftwidth=2:expandtab:textwidth=99 +" Vimwiki autoload plugin file +" Home: https://github.com/vimwiki/vimwiki/ + +" ------------------------------------------------------------------------------------------------ +" This file provides functions to manage the various state variables which are needed during a +" Vimwiki session. +" They consist of: +" +" - global variables. These are stored in the dict g:vimwiki_global_vars. They consist mainly of +" global user variables and syntax stuff which is the same for every syntax. +" +" - wiki-local variables. They are stored in g:vimwiki_wikilocal_vars which is a list of +" dictionaries. One dict for every registered wiki. The last dictionary contains default values +" (used for temporary wikis). +" +" - syntax variables. Stored in the dict g:vimwiki_syntax_variables which holds all the regexes and +" other stuff which is needed for highlighting. +" +" - buffer-local variables. They are stored as buffer variables directly (b:foo) + +" As a developer, you should, if possible, only use the get_ and set_ functions for these types of +" variables, not the underlying dicts! +" ------------------------------------------------------------------------------------------------ + + +function! s:populate_global_variables() + + let g:vimwiki_global_vars = { + \ 'CJK_length': 0, + \ 'auto_chdir': 0, + \ 'autowriteall': 1, + \ 'conceallevel': 2, + \ 'diary_months': + \ { + \ 1: 'January', 2: 'February', 3: 'March', + \ 4: 'April', 5: 'May', 6: 'June', + \ 7: 'July', 8: 'August', 9: 'September', + \ 10: 'October', 11: 'November', 12: 'December' + \ }, + \ 'dir_link': '', + \ 'ext2syntax': {}, + \ 'folding': '', + \ 'global_ext': 1, + \ 'hl_cb_checked': 0, + \ 'hl_headers': 0, + \ 'html_header_numbering': 0, + \ 'html_header_numbering_sym': '', + \ 'list_ignore_newline': 1, + \ 'text_ignore_newline': 1, + \ 'listsyms': ' .oOX', + \ 'listsym_rejected': '-', + \ 'map_prefix': 'w', + \ 'menu': 'Vimwiki', + \ 'table_auto_fmt': 1, + \ 'table_mappings': 1, + \ 'toc_header': 'Contents', + \ 'url_maxsave': 15, + \ 'use_calendar': 1, + \ 'use_mouse': 0, + \ 'user_htmls': '', + \ 'valid_html_tags': 'b,i,s,u,sub,sup,kbd,br,hr,div,center,strong,em', + \ 'w32_dir_enc': '', + \ } + + " copy the user's settings from variables of the form g:vimwiki_