Merge branch 'feature/var-reset' into develop
* feature/var-reset: Wrap the main function in a try..catch..finally loop Create function for resetting/restoring variables
This commit is contained in:
commit
72dfd55cd1
@ -66,6 +66,8 @@
|
||||
let s:key_to_index[i] = index
|
||||
let index += 1
|
||||
endfor
|
||||
|
||||
let s:var_reset = {}
|
||||
" }}}
|
||||
" Motion functions {{{
|
||||
" F key motions {{{
|
||||
@ -124,6 +126,20 @@
|
||||
echo a:message . ': '
|
||||
echohl None
|
||||
endfunction " }}}
|
||||
function! s:VarReset(var, ...) " {{{
|
||||
if a:0 == 0 && has_key(s:var_reset, a:var)
|
||||
" Reset var to original value
|
||||
call setbufvar(bufname(0), a:var, s:var_reset[a:var])
|
||||
elseif a:0 == 1
|
||||
let new_value = a:0 == 1 ? a:1 : ''
|
||||
|
||||
" Store original value
|
||||
let s:var_reset[a:var] = getbufvar(bufname(0), a:var)
|
||||
|
||||
" Set new var value
|
||||
call setbufvar(bufname(0), a:var, new_value)
|
||||
endif
|
||||
endfunction " }}}
|
||||
" }}}
|
||||
" Core functions {{{
|
||||
function! s:PromptUser(groups) "{{{
|
||||
@ -167,11 +183,6 @@
|
||||
|
||||
let lines_items = items(lines)
|
||||
" }}}
|
||||
" Store original buffer properties {{{
|
||||
let modified = &modified
|
||||
let modifiable = &modifiable
|
||||
let readonly = &readonly
|
||||
" }}}
|
||||
|
||||
let input_char = ''
|
||||
|
||||
@ -179,16 +190,6 @@
|
||||
" Highlight source
|
||||
let target_hl_id = matchadd(g:EasyMotion_target_hl, join(hl_coords, '\|'), 1)
|
||||
|
||||
" Make sure we can change the buffer {{{
|
||||
if modifiable == 0
|
||||
silent setl modifiable
|
||||
endif
|
||||
|
||||
if readonly == 1
|
||||
silent setl noreadonly
|
||||
endif
|
||||
" }}}
|
||||
|
||||
" Set lines with markers
|
||||
for [line_num, line] in lines_items
|
||||
try
|
||||
@ -226,20 +227,6 @@
|
||||
|
||||
redraw
|
||||
|
||||
" Restore original properties {{{
|
||||
if modified == 0
|
||||
silent setl nomodified
|
||||
endif
|
||||
|
||||
if modifiable == 0
|
||||
silent setl nomodifiable
|
||||
endif
|
||||
|
||||
if readonly == 1
|
||||
silent setl readonly
|
||||
endif
|
||||
" }}}
|
||||
|
||||
" Check if the input char is valid
|
||||
if ! has_key(s:key_to_index, input_char) || s:key_to_index[input_char] >= targets_len
|
||||
" Invalid input char
|
||||
@ -260,9 +247,12 @@
|
||||
let targets = []
|
||||
let visualmode = a:0 > 0 ? a:1 : ''
|
||||
|
||||
" Store original scrolloff value
|
||||
let scrolloff = &scrolloff
|
||||
setl scrolloff=0
|
||||
try
|
||||
" Reset properties
|
||||
call <SID>VarReset('&scrolloff', 0)
|
||||
call <SID>VarReset('&modified', 0)
|
||||
call <SID>VarReset('&modifiable', 1)
|
||||
call <SID>VarReset('&readonly', 0)
|
||||
|
||||
" Find motion targets
|
||||
while 1
|
||||
@ -288,17 +278,7 @@
|
||||
let groups_len = len(s:index_to_key)
|
||||
|
||||
if targets_len == 0
|
||||
redraw
|
||||
|
||||
call <SID>Message('No matches')
|
||||
|
||||
" Restore cursor position
|
||||
call setpos('.', [0, orig_pos[0], orig_pos[1]])
|
||||
|
||||
" Restore original scrolloff value
|
||||
execute 'setl scrolloff=' . scrolloff
|
||||
|
||||
return
|
||||
throw 'No matches'
|
||||
endif
|
||||
|
||||
" Restore cursor position
|
||||
@ -346,20 +326,7 @@
|
||||
endif
|
||||
|
||||
if len(coords) != 2
|
||||
" Cancelled by user
|
||||
call <SID>Message('Operation cancelled')
|
||||
|
||||
" Restore cursor position/selection
|
||||
if ! empty(visualmode)
|
||||
silent exec 'normal! `<' . visualmode . '`>'
|
||||
else
|
||||
call setpos('.', [0, orig_pos[0], orig_pos[1]])
|
||||
endif
|
||||
|
||||
" Restore original scrolloff value
|
||||
execute 'setl scrolloff=' . scrolloff
|
||||
|
||||
return
|
||||
throw 'Cancelled'
|
||||
else
|
||||
if ! empty(visualmode)
|
||||
" Store original marks
|
||||
@ -381,10 +348,28 @@
|
||||
call setpos('.', [0, coords[0], coords[1]])
|
||||
endif
|
||||
|
||||
" Restore original scrolloff value
|
||||
execute 'setl scrolloff=' . scrolloff
|
||||
|
||||
call <SID>Message('Jumping to [' . coords[0] . ', ' . coords[1] . ']')
|
||||
endif
|
||||
catch /.*/
|
||||
redraw
|
||||
|
||||
" Show exception message
|
||||
call <SID>Message(v:exception)
|
||||
|
||||
" Restore cursor position/selection
|
||||
if ! empty(visualmode)
|
||||
silent exec 'normal! `<' . visualmode . '`>'
|
||||
else
|
||||
call setpos('.', [0, orig_pos[0], orig_pos[1]])
|
||||
endif
|
||||
finally
|
||||
redraw
|
||||
|
||||
" Restore properties
|
||||
call <SID>VarReset('&scrolloff')
|
||||
call <SID>VarReset('&modified')
|
||||
call <SID>VarReset('&modifiable')
|
||||
call <SID>VarReset('&readonly')
|
||||
endtry
|
||||
endfunction " }}}
|
||||
" }}}
|
||||
|
Loading…
Reference in New Issue
Block a user