diff options
Diffstat (limited to 'autoload')
| -rw-r--r-- | autoload/gitcha.vim | 40 | 
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 | 
