diff options
author | Tom Ryder <tom@sanctum.geek.nz> | 2019-06-20 00:16:36 +1200 |
---|---|---|
committer | Tom Ryder <tom@sanctum.geek.nz> | 2019-06-20 00:16:36 +1200 |
commit | 6a8fda5f3dd282bddf4c9353fee08c17aaf63396 (patch) | |
tree | 184336c84f28314db5916e0e1e267dd087b37943 /autoload/paste_insert.vim | |
parent | First version (diff) | |
parent | Bump VERSION (diff) | |
download | vim-paste-insert-6a8fda5f3dd282bddf4c9353fee08c17aaf63396.tar.gz vim-paste-insert-6a8fda5f3dd282bddf4c9353fee08c17aaf63396.zip |
Merge branch 'release/v0.2.0'v0.2.0
* release/v0.2.0:
Add comments to plugin file
Add better messages, customisable stop key
Apply a little more structure to events
Diffstat (limited to 'autoload/paste_insert.vim')
-rw-r--r-- | autoload/paste_insert.vim | 69 |
1 files changed, 64 insertions, 5 deletions
diff --git a/autoload/paste_insert.vim b/autoload/paste_insert.vim index 675fa5a..277f333 100644 --- a/autoload/paste_insert.vim +++ b/autoload/paste_insert.vim @@ -1,12 +1,71 @@ +" Autoloaded entry point function function! paste_insert#() abort + + " Set up an event table augroup paste_insert autocmd! - autocmd CursorHold,CursorMoved,User * - \ set nopaste paste? - \|autocmd! paste_insert + + " Set up the paste and tell the user + autocmd User Start + \ call s:Start() | echo 'Paste ready' + + " When starting insert mode, add completion hook for when we leave autocmd InsertEnter * \ autocmd paste_insert InsertLeave * - \ doautocmd paste_insert User + \ doautocmd paste_insert User Complete + + " User waits too long in normal mode, timeout + autocmd CursorHold * + \ doautocmd paste_insert User Timeout + + " User leaves the buffer or window, abort + autocmd BufLeave,WinLeave * + \ doautocmd paste_insert User Abort + + " Exit condition reporting + autocmd User Abort + \ echo 'Paste aborted' + autocmd User Cancel + \ echo 'Paste cancelled' + autocmd User Complete + \ echo 'Paste completed' + autocmd User Timeout + \ echo 'Paste timeout' + + " End the paste and clear the events table + autocmd User Abort,Cancel,Complete,Timeout + \ call s:Stop() | autocmd! paste_insert + augroup END - set paste paste? + + " Trigger the starting actions + doautocmd paste_insert User Start + +endfunction + +" Key that cancels the pending paste in normal mode, defaults to CTRL-C +let s:cancel = get(g:, 'paste_insert_cancel', '<C-C>') + +" Start the paste: save cancel key's prior function, remap it, set 'paste' +function! s:Start() abort + let s:maparg = maparg(s:cancel) + let command = join([ + \ 'nnoremap' + \,s:cancel + \,':<C-U>doautocmd paste_insert User Cancel<CR>' + \]) + execute command + set paste +endfunction + +" Stop the paste: unset 'paste', restore prior function of cancel key +function! s:Stop() abort + set nopaste + let command = join( + \ s:maparg !=# '' + \ ? ['nnoremap', s:cancel, s:maparg] + \ : ['nunmap', s:cancel] + \) + execute command + unlet s:maparg endfunction |