aboutsummaryrefslogtreecommitdiffstats
path: root/autoload/gitcha.vim
diff options
context:
space:
mode:
Diffstat (limited to 'autoload/gitcha.vim')
-rw-r--r--autoload/gitcha.vim40
1 files changed, 17 insertions, 23 deletions
diff --git a/autoload/gitcha.vim b/autoload/gitcha.vim
index 7ed45c7..13d61bf 100644
--- a/autoload/gitcha.vim
+++ b/autoload/gitcha.vim
@@ -1,33 +1,33 @@
-" Save user-defined completefunc so it can be restored after running this
+" Save user-defined 'completeopt's so they can be restored after running this
" custom completion function
-let s:old_completefunc = &completefunc
+let s:old_completeopt = &completeopt
" Completion for Git SHAs in the current repository
-function! gitcha#GitSHAComplete(findstart, base)
- if a:findstart
- " locate the start of the word
- let line = getline('.')
- let start = col('.') - 1
- while start > 0 && line[start - 1] =~ '[0-9a-f]'
- let start -= 1
- endwhile
- return start
- endif
-
- " Restore user completion function
- let &completefunc = s:old_completefunc
+function! gitcha#GitSHAComplete()
+ let line = getline('.')
+ let start = col('.')
+ while start > 0 && line[start - 2] =~ '[0-9a-f]'
+ let start -= 1
+ endwhile
" Match Git SHAs in the current repository
let matches = []
let revs = system('git rev-list --all --pretty=oneline --no-abbrev-commit')
+ let base = line[start - 1 : col('.') - 1]
for m in s:BuildMatchDictionary(revs)
- if m['word'] =~ '^' . a:base
+ if m['word'] =~ '^' . base
call add(matches, m)
endif
endfor
- return matches
+ set completeopt=menu,menuone,preview
+
+ call complete(start, matches)
+
+ let &completeopt = s:old_completeopt
+
+ return ''
endfunction
" Takes rev-list output from:
@@ -53,9 +53,3 @@ function! s:BuildMatchDictionary(rev_list)
return matches
endfunction
-
-" Allow mappings to initiate completion
-function! gitcha#StartGitSHACompletion()
- set completefunc=gitcha#GitSHAComplete
- return "\<C-x>\<C-u>"
-endfunction