diff options
Diffstat (limited to 'plugin')
| -rw-r--r-- | plugin/nohai.vim | 95 | 
1 files changed, 76 insertions, 19 deletions
| diff --git a/plugin/nohai.vim b/plugin/nohai.vim index cdde8c3..db66774 100644 --- a/plugin/nohai.vim +++ b/plugin/nohai.vim @@ -1,51 +1,108 @@ -augroup nohai -	autocmd! - -	" autocmd CmdlineLeave * call s:Nohai(expand('<afile>')) -	autocmd CmdlineEnter [/?] call s:Nohai(expand('<afile>')) -augroup END +" augroup nohai +" 	autocmd! +" +" 	" autocmd CmdlineLeave * call s:Nohai(expand('<afile>')) +" 	autocmd CmdlineEnter [/?] call s:Nohai(expand('<afile>')) +" augroup END  function! s:Nohai(cmdwin_char) +	echom 'called ' . a:cmdwin_char  	if a:cmdwin_char == '/' || a:cmdwin_char == '?'  		" nohlsearch  		" ^ doesn't work because the autocommand executes before leaving the  		" command line window  		call s:AddMapping(a:cmdwin_char) -	else -		call s:RemoveMapping() +	" else +	" 	call s:RemoveMapping()  	endif + +	call s:AutocmdOff()  endfunction  function! s:AddMapping(cmdwin_char)  	" silent! cnoremap <CR> <CR>:nohlsearch<CR> -	silent! cnoremap <expr> <CR> s:CR(a:cmdwin_char) +	" silent! cnoremap <expr> <CR> s:CR(a:cmdwin_char) +	" silent! cnoremap <expr> <CR> <SID>CR(a:cmdwin_char) +	" silent! cnoremap <expr> <CR> <SID>CR('/') + +	if a:cmdwin_char == '/' || a:cmdwin_char == '?' +		silent! cnoremap <expr> <CR> <SID>CR() +	endif  endfunction  function! s:RemoveMapping()  	silent! cunmap <CR>  endfunction -function! s:CR(cmdwin_char) -	if a:cmdwin_char == '/' || a:cmdwin_char == '?' -		return '<CR>:nohlsearch<CR>' -		" ... and unmap -	else -		return '<CR>' -	endif +" function! s:CR(cmdwin_char) +" 	if a:cmdwin_char == '/' || a:cmdwin_char == '?' +" 		return "\<CR>:nohlsearch\<CR>" +" 		" ... and unmap +" 	else +" 		return "\<CR>" +" 	endif +" endfunction + +function! s:CR() +	" return "\<CR>:nohlsearch\<CR>" + +	" let expr = '' +	" let expr .= "\<CR>:nohlsearch\<CR>" +	" let expr .= ":call s:RemoveMapping()\<CR>" +    " +	" return expr + +	" TODO: Use CmdlineLeave instead for e.g. <C-c> +	call s:RemoveMapping() + +	return "\<CR>:nohlsearch\<CR>" +endfunction + +function! s:AutocmdOn() +	echom 'Turning on autocmd' +	augroup nohai +		autocmd! + +		autocmd CmdlineEnter [/?] call s:Nohai(expand('<afile>')) +	augroup END +endfunction + +function! s:AutocmdOff() +	autocmd! nohai  endfunction -function! s:Search() +function! s:Search(command) +	echom 'Searching with ' . a:command  	" let s:on = 1  	" 1. Turn on autocmd  	" 2. Search (find out if this is blocked by function-search-undo)  	" 2.a. Search automatically disables autocmd + +	call s:AutocmdOn() + +	return a:command + +	" let expr = '' +    " +	" let expr .= ":call s:AutocmdOn()\<CR>" +	" let expr .= a:command +    " +	" return expr  endfunction +" Impl idea 2 +" autocmd is activated on init +" Search() from g/? mapping sets a script-local flag and exprs to /? +" s:Nohai()  -nnoremap <Plug>(nohai-search-backward) :call s:Search()<CR> -nnoremap <Plug>(nohai-search) :call s:Search()<CR> +nnoremap <expr> <Plug>(nohai-search-backward) <SID>Search('?') +nnoremap <expr> <Plug>(nohai-search) <SID>Search('/')  nmap g? <Plug>(nohai-search-backward)  nmap g/ <Plug>(nohai-search) + +" Using SID outside of script context? +" nnoremap <expr> g? <SID>Search('?') +" nnoremap <expr> g/ <SID>Search('/') | 
