+" Location: plugin/factor.vim
+
nmap <silent> <Leader>fi :FactorVocabImpl<CR>
nmap <silent> <Leader>fd :FactorVocabDocs<CR>
nmap <silent> <Leader>ft :FactorVocabTests<CR>
-
-let g:FactorRoot = "/Users/joe/Documents/Code/others/factor"
-let g:FactorVocabRoots = ["core", "basis", "extra", "work", "/Users/joe/Documents/Code/Factor"]
-
-command! -nargs=1 -complete=custom,FactorCompleteVocab FactorVocab :call GoToFactorVocab("<args>")
-command! FactorVocabImpl :call GoToFactorVocabImpl()
-command! FactorVocabDocs :call GoToFactorVocabDocs()
-command! FactorVocabTests :call GoToFactorVocabTests()
-
-function! FactorVocabRoot(root)
- let cwd = getcwd()
- exe "lcd " fnameescape(g:FactorRoot)
- let vocabroot = fnamemodify(a:root, ":p")
- exe "lcd " fnameescape(cwd)
- return vocabroot
-endfunction
-
-function! FactorCompleteVocab(arglead, cmdline, cursorpos)
- let vocabs = ""
- let vocablead = substitute(a:arglead, "\\.", "/", "g")
- for root in g:FactorVocabRoots
- let vocabroot = FactorVocabRoot(root)
- let newvocabs = globpath(vocabroot, vocablead . "*")
- if newvocabs != ""
- let newvocabs = substitute(newvocabs, "\\(^\\|\\n\\)\\V" . escape(vocabroot, "\\"), "\\1", "g")
- let newvocabs = substitute(newvocabs, "/\\|\\\\", ".", "g")
- let vocabs .= newvocabs . "\n"
- endif
- endfor
- return vocabs
-endfunction
-
-function! FactorVocabFile(root, vocab)
- let vocabpath = substitute(a:vocab, "\\.", "/", "g")
- let vocabfile = FactorVocabRoot(a:root) . vocabpath . "/" . fnamemodify(vocabpath, ":t") . ".factor"
-
- if getftype(vocabfile) != ""
- return vocabfile
- else
- return ""
- endif
-endfunction
-
-function! GoToFactorVocab(vocab)
- for root in g:FactorVocabRoots
- let vocabfile = FactorVocabFile(root, a:vocab)
- if vocabfile != ""
- exe "edit " fnameescape(vocabfile)
- return
- endif
- endfor
- echo "Vocabulary " vocab " not found"
-endfunction
+nmap <Leader>fv :FactorVocab<SPACE>
+nmap <Leader>fn :NewFactorVocab<SPACE>
+
+if !exists('g:FactorResourcePath')
+ let g:FactorResourcePath = '~/factor/'
+endif
+
+if !exists('g:FactorDefaultVocabRoots')
+ let g:FactorDefaultVocabRoots = ['resource:core', 'resource:basis', 'resource:extra', 'resource:work']
+endif
+" let g:FactorAdditionalVocabRoots = ... " see autoload/factor.vim
+unlet! g:FactorVocabRoots
+
+if !exists('*FactorNewVocabRoot') | function! FactorNewVocabRoot() abort
+ return 'resource:work'
+endfunction | endif
+
+command! -bar -bang -range=1 -nargs=1 -complete=customlist,factor#complete_vocab_glob FactorVocab
+ \ execute factor#go_to_vocab_command(<count>,"edit<bang>",<q-args>)
+command! -bar -bang -range=1 -nargs=1 -complete=customlist,factor#complete_vocab_glob NewFactorVocab
+ \ execute factor#make_vocab_command(<count>,"edit<bang>",<q-args>)
+command! FactorVocabImpl -bar :call GoToFactorVocabImpl()
+command! FactorVocabDocs -bar :call GoToFactorVocabDocs()
+command! FactorVocabTests -bar :call GoToFactorVocabTests()
function! FactorFileBase()
- let filename = expand("%:r")
- let filename = substitute(filename, "-docs", "", "")
- let filename = substitute(filename, "-tests", "", "")
+ let filename = expand('%:r')
+ let filename = substitute(filename, '-docs', '', '')
+ let filename = substitute(filename, '-tests', '', '')
return filename
endfunction
function! GoToFactorVocabImpl()
- exe "edit " fnameescape(FactorFileBase() . ".factor")
+ exe 'edit ' fnameescape(FactorFileBase() . '.factor')
endfunction
function! GoToFactorVocabDocs()
- exe "edit " fnameescape(FactorFileBase() . "-docs.factor")
+ exe 'edit ' fnameescape(FactorFileBase() . '-docs.factor')
endfunction
function! GoToFactorVocabTests()
- exe "edit " fnameescape(FactorFileBase() . "-tests.factor")
+ exe 'edit ' fnameescape(FactorFileBase() . '-tests.factor')
endfunction
+
+" vim:sw=4:et: