@@ -114,7 +114,7 @@ function! OmniSharp#testrunner#Remove() abort
114
114
let test = s: utils .findTest ()
115
115
let test.state = ' hidden'
116
116
endif
117
- call s: Paint ()
117
+ call s: buffer . paint ()
118
118
endfunction
119
119
120
120
@@ -207,40 +207,44 @@ function s:Open() abort
207
207
let s: runner .bufnr = bufnr ()
208
208
let &filetype = ft
209
209
execute ' file' title
210
- call s: Paint ()
210
+ call s: buffer . paint ()
211
211
endfunction
212
212
213
- function ! s: Repaint () abort
213
+
214
+ let s: buffer = {}
215
+ function ! s: buffer .focus () abort
214
216
if ! has_key (s: runner , ' bufnr' ) | return | endif
215
217
if getbufvar (s: runner .bufnr , ' &ft' ) !=# ' omnisharptest' | return | endif
216
218
" If the buffer is listed in a window in the current tab, then focus it
217
219
for winnr in range (1 , winnr (' $' ))
218
220
if winbufnr (winnr ) == s: runner .bufnr
219
- let l: winid = win_getid ()
220
221
call win_gotoid (win_getid (winnr ))
221
- break
222
+ return v: true
222
223
endif
223
224
endfor
224
- call s: Paint ()
225
- if exists (' l:winid' )
226
- call win_gotoid (l: winid )
227
- endif
225
+ return v: false
228
226
endfunction
229
227
230
- function ! s: Paint () abort
228
+ function ! s: buffer . bannerlines () abort
231
229
let lines = []
232
230
let delimiter = get (g: , ' OmniSharp_testrunner_banner_delimeter' , ' ─' )
231
+ call add (lines , ' `' . repeat (delimiter , 80 ))
232
+ call add (lines , ' ` OmniSharp Test Runner' )
233
+ call add (lines , ' ` ' . repeat (delimiter , 76 ))
234
+ call add (lines , ' ` <F1> Toggle this menu (:help omnisharp-test-runner for more)' )
235
+ call add (lines , ' ` <F5> Run test or tests in file under cursor' )
236
+ call add (lines , ' ` <F6> Debug test under cursor' )
237
+ call add (lines , ' ` <CR> Navigate to test or stack trace' )
238
+ call add (lines , ' `' . repeat (delimiter , 80 ))
239
+ return lines
240
+ endfunction
241
+
242
+ function ! s: buffer .paint () abort
233
243
if get (g: , ' OmniSharp_testrunner_banner' , 1 )
234
- call add (lines , repeat (delimiter , 80 ))
235
- call add (lines , ' OmniSharp Test Runner' )
236
- call add (lines , ' ' . repeat (delimiter , 76 ))
237
- call add (lines , ' <F1> Toggle this menu (:help omnisharp-test-runner for more)' )
238
- call add (lines , ' <F5> Run test or tests in file under cursor' )
239
- call add (lines , ' <F6> Debug test under cursor' )
240
- call add (lines , ' <CR> Navigate to test or stack trace' )
241
- call add (lines , repeat (delimiter , 80 ))
244
+ let lines = self .bannerlines ()
245
+ else
246
+ let lines = []
242
247
endif
243
-
244
248
for key in sort (keys (s: tests ))
245
249
let [assembly, sln] = split (key , ' ;' )
246
250
if ! s: tests [key ].visible | continue | endif
@@ -400,7 +404,12 @@ function! s:UpdateState(bufnr, state, ...) abort
400
404
let tests[testname].output = get (opts, ' output' , [])
401
405
endif
402
406
endfor
403
- call s: Repaint ()
407
+ let l: winid = win_getid ()
408
+ let l: focused = s: buffer .focus ()
409
+ call s: buffer .paint ()
410
+ if l: focused
411
+ call win_gotoid (l: winid )
412
+ endif
404
413
endfunction
405
414
406
415
function ! OmniSharp#testrunner#StateComplete (location) abort
@@ -436,7 +445,17 @@ endfunction
436
445
437
446
function ! OmniSharp#testrunner#ToggleBanner () abort
438
447
let g: OmniSharp_testrunner_banner = 1 - get (g: , ' OmniSharp_testrunner_banner' , 1 )
439
- call s: Paint ()
448
+ if s: buffer .focus ()
449
+ let displayed = getline (1 ) = ~# ' `'
450
+ call setbufvar (s: runner .bufnr , ' &modifiable' , 1 )
451
+ if g: OmniSharp_testrunner_banner && ! displayed
452
+ call appendbufline (s: runner .bufnr , 0 , s: buffer .bannerlines ())
453
+ elseif ! g: OmniSharp_testrunner_banner && displayed
454
+ call deletebufline (s: runner .bufnr , 1 , len (s: buffer .bannerlines ()))
455
+ endif
456
+ call setbufvar (s: runner .bufnr , ' &modifiable' , 0 )
457
+ call setbufvar (s: runner .bufnr , ' &modified' , 0 )
458
+ endif
440
459
endfunction
441
460
442
461
0 commit comments