]> gitweb.factorcode.org Git - factor.git/commitdiff
completion for :FactorVocab vim function
authorJoe Groff <arcata@gmail.com>
Fri, 11 Sep 2009 01:24:56 +0000 (20:24 -0500)
committerJoe Groff <arcata@gmail.com>
Fri, 11 Sep 2009 01:24:56 +0000 (20:24 -0500)
misc/vim/plugin/factor.vim

index c949666a391ebf530ff6976b9cb56d977c9cbb97..cac7f3939b2fcb7e937857bea7a59df905eb4e67 100644 (file)
@@ -5,10 +5,10 @@ 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 FactorVocab      :call GoToFactorVocab("<args>")
-command!          FactorVocabImpl  :call GoToFactorVocabImpl()
-command!          FactorVocabDocs  :call GoToFactorVocabDocs()
-command!          FactorVocabTests :call GoToFactorVocabTests()
+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()
@@ -18,6 +18,21 @@ function! FactorVocabRoot(root)
     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"