releasing gnupg.vim 1605

- new plugin options to set preferences for symmetric/asymmetric and armor/binary files
- fix for use with gvim. !! plugin works only in gvim if gpg-agent is available !!
This commit is contained in:
Markus Braun 2007-03-01 09:58:04 -05:00 committed by James Vega
parent 31d69b326a
commit 66fdaa0558

View File

@ -1,5 +1,5 @@
" Name: gnupg.vim
" Version: $Id: gnupg.vim 1472 2006-12-15 13:09:40Z mbr $
" Version: $Id: gnupg.vim 1605 2007-03-01 09:58:04Z mbr $
" Author: Markus Braun <markus.braun@krawel.de>
" Summary: Vim plugin for transparent editing of gpg encrypted files.
" Licence: This program is free software; you can redistribute it and/or
@ -45,6 +45,12 @@
" g:GPGUseAgent
" If set to 0 a possible available gpg-agent won't be used. Defaults to 1.
"
" g:GPGPreferSymmetric
" If set to 1 symmetric encryption is preferred for new files. Defaults to 0.
"
" g:GPGPreferArmor
" If set to 1 armored data is preferred for new files. Defaults to 0.
"
" Credits:
" Mathieu Clabaut for inspirations through his vimspell.vim script.
" Richard Bronosky for patch to enable ".pgp" suffix.
@ -68,8 +74,9 @@ autocmd BufNewFile,BufReadPre,FileReadPre *.\(gpg\|asc\|pgp\) set viminfo=
autocmd BufNewFile,BufReadPre,FileReadPre *.\(gpg\|asc\|pgp\) set noswapfile
" Initialize the internal variables
autocmd BufNewFile,BufReadPre,FileReadPre *.\(gpg\|asc\|pgp\) call s:GPGInit()
" Force the user to edit the recipient list if he opens a new file
autocmd BufNewFile *.\(gpg\|asc\|pgp\) call s:GPGEditRecipients()
" Force the user to edit the recipient list if he opens a new file and public
" keys are preferred
autocmd BufNewFile *.\(gpg\|asc\|pgp\) if (exists("g:GPGPreferSymmetric") && g:GPGPreferSymmetric == 0) | call s:GPGEditRecipients() | endi
" Switch to binary mode to read the encrypted file
autocmd BufReadPre,FileReadPre *.\(gpg\|asc\|pgp\) set bin
autocmd BufReadPost,FileReadPost *.\(gpg\|asc\|pgp\) call s:GPGDecrypt()
@ -104,6 +111,16 @@ fun s:GPGInit()
let g:GPGUseAgent = 1
endif
" check if symmetric encryption is preferred
if (!exists("g:GPGPreferSymmetric"))
let g:GPGPreferSymmetric = 0
endif
" check if armored files are preferred
if (!exists("g:GPGPreferArmor"))
let g:GPGPreferArmor = 0
endif
" determine if gnupg can use the gpg-agent
if (exists("$GPG_AGENT_INFO") && g:GPGUseAgent == 1)
if (!exists("$GPG_TTY"))
@ -117,6 +134,13 @@ fun s:GPGInit()
let s:GPGCommand="gpg --no-use-agent"
endif
" don't use tty in gvim
" FIXME find a better way to avoid an error.
" with this solution only --use-agent will work
if has("gui_running")
let s:GPGCommand=s:GPGCommand . " --no-tty"
endif
" setup shell environment for unix and windows
let s:shellredirsave=&shellredir
let s:shellsave=&shell
@ -130,14 +154,14 @@ fun s:GPGInit()
let s:shellredir = &shellredir
let s:shell = 'sh'
let s:stderrredirnull ='2>/dev/null'
let s:GPGCommand="LANG=C " . s:GPGCommand
let s:GPGCommand="LANG=C LC_ALL=C " . s:GPGCommand
endi
" find the supported algorithms
let &shellredir=s:shellredir
let &shell=s:shell
let output=system(s:GPGCommand . " --version")
let &shellredir=s:shellredir
let &shellredir=s:shellredirsave
let &shell=s:shellsave
let s:GPGPubkey=substitute(output, ".*Pubkey: \\(.\\{-}\\)\n.*", "\\1", "")
@ -164,7 +188,7 @@ fun s:GPGDecrypt()
let &shellredir=s:shellredir
let &shell=s:shell
let output=system(s:GPGCommand . " --decrypt --dry-run --batch --no-use-agent --logger-fd 1 \"" . filename . "\"")
let &shellredir=s:shellredir
let &shellredir=s:shellredirsave
let &shell=s:shellsave
" check if the file is symmetric/asymmetric encrypted
@ -224,7 +248,7 @@ fun s:GPGDecrypt()
let &shellredir=s:shellredir
let &shell=s:shell
exec "'[,']!" . s:GPGCommand . " --quiet --decrypt " . s:stderrredirnull
let &shellredir=s:shellredir
let &shellredir=s:shellredirsave
let &shell=s:shellsave
if (v:shell_error) " message could not be decrypted
silent u
@ -255,8 +279,15 @@ fun s:GPGEncrypt()
" built list of options
if (!exists("b:GPGOptions") || strlen(b:GPGOptions) == 0)
if (exists("g:GPGPreferSymmetric") && g:GPGPreferSymmetric == 1)
let b:GPGOptions="symmetric:"
else
let b:GPGOptions="encrypt:"
endi
if (exists("g:GPGPreferArmor") && g:GPGPreferArmor == 1)
let b:GPGOptions=b:GPGOptions . "armor:"
endi
endi
let field=0
let option=s:GetField(b:GPGOptions, ":", field)
while (strlen(option))
@ -297,7 +328,7 @@ fun s:GPGEncrypt()
let &shellredir=s:shellredir
let &shell=s:shell
silent exec "'[,']!" . s:GPGCommand . " --quiet --no-encrypt-to " . options . recipients . " " . s:stderrredirnull
let &shellredir=s:shellredir
let &shellredir=s:shellredirsave
let &shell=s:shellsave
if (v:shell_error) " message could not be encrypted
silent u
@ -717,7 +748,7 @@ fun s:GPGNameToID(name)
let &shellredir=s:shellredir
let &shell=s:shell
let output=system(s:GPGCommand . " --quiet --with-colons --fixed-list-mode --list-keys \"" . a:name . "\"")
let &shellredir=s:shellredir
let &shellredir=s:shellredirsave
let &shell=s:shellsave
" parse the output of gpg
@ -781,7 +812,7 @@ fun s:GPGIDToName(identity)
let &shellredir=s:shellredir
let &shell=s:shell
let output=system(s:GPGCommand . " --quiet --with-colons --fixed-list-mode --list-keys " . a:identity )
let &shellredir=s:shellredir
let &shellredir=s:shellredirsave
let &shell=s:shellsave
" parse the output of gpg