scriptencoding utf-8
let s:save_cpo = &cpo
set cpo&vim

let g:over#command_line#search#enable_incsearch = get(g:, "over#command_line#search#enable_incsearch", 1)
let g:over#command_line#search#enable_move_cursor = get(g:, "over#command_line#search#enable_move_cursor", 0)


function! over#command_line#search#load()
	" load
endfunction


function! s:search_hl_off()
	if exists("s:search_id") && s:search_id != -1
		call matchdelete(s:search_id)
		unlet s:search_id
	endif
endfunction


function! s:search_hl_on(pattern)
	call s:search_hl_off()
	silent! let s:search_id = matchadd("IncSearch", a:pattern)
endfunction


function! s:main()
	call s:search_hl_off()
	let line = over#command_line#backward()
	if line =~ '^/.\+'
\	|| line =~ '^?.\+'
		let pattern = matchstr(line, '^\(/\|?\)\zs.\+')
		if g:over#command_line#search#enable_incsearch
			call s:search_hl_on((&ignorecase ? '\c' : "") . pattern)
		endif
		if g:over#command_line#search#enable_move_cursor
			if line =~ '^/.\+'
				silent! call search(pattern, "c")
			else
				silent! call search(pattern, "cb")
			endif
		endif
	endif
endfunction


augroup over-cmdline-search
	autocmd!
	autocmd User OverCmdLineChar call s:main()
	autocmd User OverCmdLineLeave call s:search_hl_off()
	autocmd User OverCmdLineEnter let s:old_pos = getpos(".")
	autocmd User OverCmdLineExecutePre call setpos(".", s:old_pos)
augroup END



let &cpo = s:save_cpo
unlet s:save_cpo