blob: ebd65405d50e9939ce20ba1f03e95e52c07e220e (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
|
" 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()
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> <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
" 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(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 <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('/')
|