aboutsummaryrefslogtreecommitdiff
path: root/autoload
diff options
context:
space:
mode:
authorTom Ryder <tom@sanctum.geek.nz>2019-07-11 16:40:59 +1200
committerTom Ryder <tom@sanctum.geek.nz>2019-07-11 16:40:59 +1200
commit21eeff50594ac4c1f79ed96315367bd9d0728845 (patch)
treecbec6a03d26625008bbc6da58e6f872c01be6ed2 /autoload
parentMerge branch 'release/v0.4.0' into develop (diff)
downloadvim-paste-insert-21eeff50594ac4c1f79ed96315367bd9d0728845.tar.gz
vim-paste-insert-21eeff50594ac4c1f79ed96315367bd9d0728845.zip
End paste mode on TextChanged too
Diffstat (limited to 'autoload')
-rw-r--r--autoload/paste_insert.vim18
1 files changed, 18 insertions, 0 deletions
diff --git a/autoload/paste_insert.vim b/autoload/paste_insert.vim
index 946e09a..b5e36a0 100644
--- a/autoload/paste_insert.vim
+++ b/autoload/paste_insert.vim
@@ -14,6 +14,18 @@ function! paste_insert#() abort
\ autocmd paste_insert InsertLeave *
\ doautocmd paste_insert User Complete
+ " User changed the text somehow, presumably a paste, so complete the
+ " operation; use the new TextChanged event if we've got it
+ if exists('##TextChanged')
+ autocmd TextChanged *
+ \ doautocmd paste_insert User Complete
+ else
+ autocmd CursorMoved *
+ \ if changenr() > b:paste_insert_changenr
+ \| doautocmd paste_insert User Complete
+ \|endif
+ endif
+
" User waits too long in normal mode, timeout
autocmd CursorHold *
\ doautocmd paste_insert User Timeout
@@ -38,6 +50,9 @@ let s:cancel_keys = get(g:, 'paste_insert_cancel_keys', ['<C-C>', '<Esc>'])
" Start the paste: remap any cancel keys, set 'paste'
function! s:Start() abort
+ if exists('##TextChanged')
+ let b:paste_insert_changenr = changenr()
+ endif
for key in s:cancel_keys
if maparg(key, 'n') ==# ''
execute join(['nnoremap', key,
@@ -51,6 +66,9 @@ endfunction
" Stop the paste: unset 'paste', restore prior function of cancel key
function! s:Stop() abort
+ if exists('##TextChanged')
+ unlet b:paste_insert_changenr
+ endif
set nopaste paste?
for key in s:cancel_keys
execute join(['nunmap', key])