aboutsummaryrefslogtreecommitdiffstats
path: root/plugin
diff options
context:
space:
mode:
Diffstat (limited to 'plugin')
-rw-r--r--plugin/nohai.vim95
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('/')