diff --git a/plugin/gnupg.vim b/plugin/gnupg.vim index 7cd51d7..5e47bd9 100644 --- a/plugin/gnupg.vim +++ b/plugin/gnupg.vim @@ -1,5 +1,5 @@ " Name: gnupg.vim -" Last Change: 2014 Nov 20 +" Last Change: 2014 Dec 25 " Maintainer: James McCoy " Original Author: Markus Braun " Summary: Vim plugin for transparent editing of gpg encrypted files. @@ -193,14 +193,10 @@ augroup GnuPG " convert all text to encrypted text before writing " We check for GPGCorrespondingTo to avoid triggering on writes in GPG Options/Recipient windows - exe "autocmd BufWriteCmd " . g:GPGFilePattern . " if !exists('b:GPGCorrespondingTo') |" . - \ " call s:GPGBufWritePre() |" . - \ " endif" - exe "autocmd BufWriteCmd,FileWriteCmd " . g:GPGFilePattern . " if !exists('b:GPGCorrespondingTo') |" . - \ " call s:GPGInit(0) |" . - \ " call s:GPGEncrypt() |" . - \ " endif" + \ " call s:GPGInit(0) |" . + \ " call s:GPGEncrypt() |" . + \ " endif" " cleanup on leaving vim exe "autocmd VimLeave " . g:GPGFilePattern . " call s:GPGCleanup()" @@ -571,19 +567,6 @@ function s:GPGBufReadPost() call s:GPGDebug(3, "<<<<<<<< Leaving s:GPGBufReadPost()") endfunction -" Function: s:GPGBufWritePre() {{{2 -" -" Handle functionality specific to saving an entire buffer to a file rather -" than saving a partial buffer -" -function s:GPGBufWritePre() - call s:GPGDebug(3, ">>>>>>>> Entering s:GPGBufWritePre()") - " call the autocommand for the file minus .gpg$ - silent execute ':doautocmd BufWritePre ' . fnameescape(expand(':r')) - call s:GPGDebug(2, 'called autocommand for ' . fnameescape(expand(':r'))) - call s:GPGDebug(3, "<<<<<<<< Leaving s:GPGBufWritePre()") -endfunction - " Function: s:GPGEncrypt() {{{2 " " encrypts the buffer to all previous recipients @@ -591,6 +574,19 @@ endfunction function s:GPGEncrypt() call s:GPGDebug(3, ">>>>>>>> Entering s:GPGEncrypt()") + " FileWriteCmd is only called when a portion of a buffer is being written to + " disk. Since Vim always sets the '[,'] marks to the part of a buffer that + " is being written, that can be used to determine whether BufWriteCmd or + " FileWriteCmd triggered us. + if [line("'["), line("']")] == [1, line('$')] + let auType = 'BufWrite' + else + let auType = 'FileWrite' + endif + + silent exe ':doautocmd '. auType .'Pre '. fnameescape(expand(':r')) + call s:GPGDebug(2, 'called '. auType .'Pre autocommand for ' . fnameescape(expand(':r'))) + " store encoding and switch to a safe one if (&fileencoding != &encoding) let s:GPGEncoding = &encoding @@ -680,7 +676,9 @@ function s:GPGEncrypt() call rename(destfile, resolve(expand(''))) setl nomodified - silent execute ':doautocmd BufWritePost ' . fnameescape(expand(':r')) + silent exe ':doautocmd '. auType .'Post '. fnameescape(expand(':r')) + call s:GPGDebug(2, 'called '. auType .'Post autocommand for ' . fnameescape(expand(':r'))) + call s:GPGDebug(3, "<<<<<<<< Leaving s:GPGEncrypt()") endfunction