---
Hello password storers! Hope you are well.

I made this patch to make *pass* honour the $VISUAL environment
variable, as in my system $EDITOR is not a visual editor.

What do you think?

Best regards,
Pudinha <3

 man/pass.1                         |  8 ++++----
 src/completion/pass.zsh-completion |  2 +-
 src/password-store.sh              |  8 +++++---
 tests/setup.sh                     |  1 +
 tests/t0200-edit-tests.sh          | 15 +++++++++++++--
 5 files changed, 24 insertions(+), 10 deletions(-)

diff --git a/man/pass.1 b/man/pass.1
index a555dcb..bca5d9c 100644
--- a/man/pass.1
+++ b/man/pass.1
@@ -116,8 +116,8 @@ before overwriting an existing password, unless 
\fI--force\fP or \fI-f\fP is spe
 command is alternatively named \fBadd\fP.
 .TP
 \fBedit\fP \fIpass-name\fP
-Insert a new password or edit an existing password using the default text 
editor specified
-by the environment variable \fIEDITOR\fP or using
+Insert a new password or edit an existing password using the default text 
editor specified,
+in order of precedence, by the environment variables \fIVISUAL\fP and 
\fIEDITOR\fP or using
 .BR vi (1)
 as a fallback. This mode makes use of temporary files for editing, but care is 
taken to
 ensure that temporary files are created in \fI/dev/shm\fP in order to avoid 
writing to
@@ -463,8 +463,8 @@ upper-case fingerprint in this variable. If multiple 
fingerprints are specified,
 separated by a whitespace character, then signatures must match at least one.
 The \fBinit\fP command will keep signatures of \fB.gpg-id\fP files up to date.
 .TP
-.I EDITOR
-The location of the text editor used by \fBedit\fP.
+.I VISUAL, EDITOR
+In order of precedence, the location of the text editor used by \fBedit\fP.
 .SH SEE ALSO
 .BR gpg2 (1),
 .BR tr (1),
diff --git a/src/completion/pass.zsh-completion 
b/src/completion/pass.zsh-completion
index 27ce15a..ceb2855 100644
--- a/src/completion/pass.zsh-completion
+++ b/src/completion/pass.zsh-completion
@@ -98,7 +98,7 @@ _pass () {
                        "show:Decrypt and print a password"
                        "insert:Insert a new password"
                        "generate:Generate a new password using pwgen"
-                       "edit:Edit a password with \$EDITOR"
+                       "edit:Edit a password with the default editor"
                        "mv:Rename the password"
                        "cp:Copy the password"
                        "rm:Remove the password"
diff --git a/src/password-store.sh b/src/password-store.sh
index 77f3eda..8ff2b24 100755
--- a/src/password-store.sh
+++ b/src/password-store.sh
@@ -6,6 +6,8 @@
 umask "${PASSWORD_STORE_UMASK:-077}"
 set -o pipefail
 
+EDITOR=${VISUAL:-${EDITOR:-vi}}
+
 GPG_OPTS=( $PASSWORD_STORE_GPG_OPTS "--quiet" "--yes" "--compress-algo=none" 
"--no-encrypt-to" )
 GPG="gpg"
 export GPG_TTY="${GPG_TTY:-$(tty 2>/dev/null)}"
@@ -292,7 +294,7 @@ cmd_usage() {
                during entry. Or, optionally, the entry may be multiline. 
Prompt before
                overwriting existing password unless forced.
            $PROGRAM edit pass-name
-               Insert a new password or edit an existing password using 
${EDITOR:-vi}.
+               Insert a new password or edit an existing password using 
$EDITOR.
            $PROGRAM generate [--no-symbols,-n] [--clip,-c] [--in-place,-i | 
--force,-f] pass-name [pass-length]
                Generate a new password of pass-length (or $GENERATED_LENGTH if 
unspecified) with optionally no symbols.
                Optionally put it on the clipboard and clear board after 
$CLIP_TIME seconds.
@@ -498,13 +500,13 @@ cmd_edit() {
                $GPG -d -o "$tmp_file" "${GPG_OPTS[@]}" "$passfile" || exit 1
                action="Edit"
        fi
-       ${EDITOR:-vi} "$tmp_file"
+       $EDITOR "$tmp_file"
        [[ -f $tmp_file ]] || die "New password not saved."
        $GPG -d -o - "${GPG_OPTS[@]}" "$passfile" 2>/dev/null | diff - 
"$tmp_file" &>/dev/null && die "Password unchanged."
        while ! $GPG -e "${GPG_RECIPIENT_ARGS[@]}" -o "$passfile" 
"${GPG_OPTS[@]}" "$tmp_file"; do
                yesno "GPG encryption failed. Would you like to try again?"
        done
-       git_add_file "$passfile" "$action password for $path using 
${EDITOR:-vi}."
+       git_add_file "$passfile" "$action password for $path using $EDITOR."
 }
 
 cmd_generate() {
diff --git a/tests/setup.sh b/tests/setup.sh
index 5d1e794..296f97b 100644
--- a/tests/setup.sh
+++ b/tests/setup.sh
@@ -22,6 +22,7 @@ unset PASSWORD_STORE_ENABLE_EXTENSIONS
 unset PASSWORD_STORE_EXTENSIONS_DIR
 unset PASSWORD_STORE_SIGNING_KEY
 unset EDITOR
+unset VISUAL
 
 # We must be called from tests/
 TEST_HOME="$(pwd)"
diff --git a/tests/t0200-edit-tests.sh b/tests/t0200-edit-tests.sh
index d8d7b64..23af0ab 100755
--- a/tests/t0200-edit-tests.sh
+++ b/tests/t0200-edit-tests.sh
@@ -4,14 +4,25 @@ test_description='Test edit'
 cd "$(dirname "$0")"
 . ./setup.sh
 
-test_expect_success 'Test "edit" command' '
+test_expect_success 'Test "edit" command with EDITOR' '
        "$PASS" init $KEY1 &&
        "$PASS" generate cred1 90 &&
        export FAKE_EDITOR_PASSWORD="big fat fake password" &&
-       export PATH="$TEST_HOME:$PATH"
+       export PATH="$TEST_HOME:$PATH" &&
        export EDITOR="fake-editor-change-password.sh" &&
        "$PASS" edit cred1 &&
        [[ $("$PASS" show cred1) == "$FAKE_EDITOR_PASSWORD" ]]
 '
 
+test_expect_success 'Test "edit" command with VISUAL' '
+       "$PASS" init $KEY1 &&
+       "$PASS" generate cred1 90 &&
+       export FAKE_EDITOR_PASSWORD="big fat fake password" &&
+       export PATH="$TEST_HOME:$PATH" &&
+       export EDITOR="exit -1" &&
+       export VISUAL="fake-editor-change-password.sh" &&
+       "$PASS" edit cred1 &&
+       [[ $("$PASS" show cred1) == "$FAKE_EDITOR_PASSWORD" ]]
+'
+
 test_done
-- 
2.27.0

Reply via email to