Skip to content

Commit f759745

Browse files
committed
restore screen position (#65)
1 parent 9505158 commit f759745

File tree

2 files changed

+23
-0
lines changed

2 files changed

+23
-0
lines changed

autoload/clang_format.vim

+16
Original file line numberDiff line numberDiff line change
@@ -87,6 +87,20 @@ function! s:error_message(result)
8787
endif
8888
endfunction
8989

90+
function! s:restore_screen_pos(prev_screen) abort
91+
let screen_line = line('w0')
92+
if screen_line == a:prev_screen
93+
return
94+
endif
95+
let delta = screen_line - a:prev_screen
96+
if delta > 0
97+
let keys = delta . "\<C-y>"
98+
else
99+
let keys = (-delta) . "\<C-e>"
100+
endif
101+
execute "normal!" keys
102+
endfunction
103+
90104
function! clang_format#get_version()
91105
if &shell =~# 'csh$' && executable('/bin/bash')
92106
let shell_save = &shell
@@ -208,6 +222,7 @@ function! clang_format#replace(line1, line2)
208222
call s:verify_command()
209223

210224
let pos_save = getpos('.')
225+
let screen_save = line('w0')
211226
let sel_save = &l:selection
212227
let &l:selection = 'inclusive'
213228
let [save_g_reg, save_g_regtype] = [getreg('g'), getregtype('g')]
@@ -226,6 +241,7 @@ function! clang_format#replace(line1, line2)
226241
call setreg('g', save_g_reg, save_g_regtype)
227242
let &l:selection = sel_save
228243
call setpos('.', pos_save)
244+
call s:restore_screen_pos(screen_save)
229245
endtry
230246
endfunction
231247
" }}}

t/clang_format_spec.vim

+7
Original file line numberDiff line numberDiff line change
@@ -305,6 +305,13 @@ describe ':ClangFormat'
305305
Expect pos == getpos('.')
306306
end
307307

308+
it 'maintains screen position while formatting'
309+
execute 'normal!' "3\<C-e>"
310+
let prev = line('w0')
311+
ClangFormat
312+
let current = line('w0')
313+
Expect prev ==# current
314+
end
308315
end
309316

310317
describe 'with filetype javascript'

0 commit comments

Comments
 (0)