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

" 0 = match just the pattern
" 1 = match whole line
let g:over#command_line#global#highlight_line = get(g:, "over#command_line#global#highlight_line", 0)

" 0 = do nothing
" 1 = highlight all lines not matching pattern
let g:over#command_bang#global#highlight_bang = get(g:, "over#command_bang#global#highlight_bang", 1)

function! over#command_line#global#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, bang)
	let pattern = g:over#command_line#global#highlight_line ?
				\ '.*' . a:pattern . '.*' : a:pattern
	let pattern = a:bang && g:over#command_bang#global#highlight_bang ?
				\ '^\%(\%(' . pattern . '\)\@!.\)*$' : pattern
	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 =~ '\v^\%g!?\/.'
		let bang = line =~ 'g!\/'
		let pattern = matchstr(line, '\v\%g!?\/\zs%(\\\/|[^/])+')
		call s:search_hl_on((&ignorecase ? '\c' : '') . pattern, bang)
	endif
endfunction


augroup over-cmdline-global
	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