summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorJason A. Donenfeld <Jason@zx2c4.com>2014-04-14 14:59:07 +0200
committerJason A. Donenfeld <Jason@zx2c4.com>2014-04-15 00:27:57 +0200
commit7ed0a70aa6d1fd502ff5443bced462d6dedd8511 (patch)
treeac45fb7a2479752b39c84a053bfbfdab420644a2 /src
parent7efccbc1c2bed9ad94102c5a962054e6b87b5390 (diff)
downloadpass-7ed0a70aa6d1fd502ff5443bced462d6dedd8511.tar.gz
pass-7ed0a70aa6d1fd502ff5443bced462d6dedd8511.tar.bz2
pass-7ed0a70aa6d1fd502ff5443bced462d6dedd8511.zip
find: add find/search command
This relies on a patched version of tree to work, unfortunately. Hopefully upstream will accept our patch. Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com>
Diffstat (limited to '')
-rw-r--r--src/completion/pass.bash-completion2
-rw-r--r--src/completion/pass.fish-completion2
-rw-r--r--src/completion/pass.zsh-completion1
-rwxr-xr-xsrc/password-store.sh23
4 files changed, 26 insertions, 2 deletions
diff --git a/src/completion/pass.bash-completion b/src/completion/pass.bash-completion
index d80b186..f7a51e9 100644
--- a/src/completion/pass.bash-completion
+++ b/src/completion/pass.bash-completion
@@ -57,7 +57,7 @@ _pass()
{
COMPREPLY=()
local cur="${COMP_WORDS[COMP_CWORD]}"
- local commands="init ls show insert generate edit rm git help version"
+ local commands="init ls find show insert generate edit rm git help version"
if [[ $COMP_CWORD -gt 1 ]]; then
local lastarg="${COMP_WORDS[$COMP_CWORD-1]}"
case "${COMP_WORDS[1]}" in
diff --git a/src/completion/pass.fish-completion b/src/completion/pass.fish-completion
index 5c52ecc..d8f97e2 100644
--- a/src/completion/pass.fish-completion
+++ b/src/completion/pass.fish-completion
@@ -106,3 +106,5 @@ complete -c $PROG -f -A -n '__fish_pass_uses_command git' -a 'commit' -d 'Commit
complete -c $PROG -f -A -n '__fish_pass_uses_command git' -a 'push' -d 'Push changes to remote repo'
complete -c $PROG -f -A -n '__fish_pass_uses_command git' -a 'pull' -d 'Pull changes from remote repo'
complete -c $PROG -f -A -n '__fish_pass_uses_command git' -a 'log' -d 'View changelog'
+
+complete -c $PROG -f -A -n '__fish_pass_needs_command' -a find -d 'Command: find a password file or directory matching pattern'
diff --git a/src/completion/pass.zsh-completion b/src/completion/pass.zsh-completion
index 7590322..ca983e2 100644
--- a/src/completion/pass.zsh-completion
+++ b/src/completion/pass.zsh-completion
@@ -77,6 +77,7 @@ _pass () {
subcommands=(
"init:Initialize new password storage"
"ls:List passwords"
+ "find:Find password files or directories based on pattern"
"show:Decrypt and print a password"
"insert:Insert a new password"
"generate:Generate a new password using pwgen"
diff --git a/src/password-store.sh b/src/password-store.sh
index a7a5604..706eada 100755
--- a/src/password-store.sh
+++ b/src/password-store.sh
@@ -43,6 +43,8 @@ usage() {
Optionally reencrypt existing passwords using new gpg-id.
$program [ls] [subfolder]
List passwords.
+ $program find pass-names...
+ List passwords that match pass-names.
$program [show] [--clip,-c] pass-name
Show existing password and optionally put it on the clipboard.
If put on the clipboard, it will be cleared in $CLIP_TIME seconds.
@@ -71,7 +73,7 @@ usage() {
}
is_command() {
case "$1" in
- init|ls|list|show|insert|edit|generate|remove|rm|delete|git|help|--help|version|--version) return 0 ;;
+ init|ls|list|find|search|show|insert|edit|generate|remove|rm|delete|git|help|--help|version|--version) return 0 ;;
*) return 1 ;;
esac
}
@@ -268,6 +270,25 @@ case "$command" in
exit 1
fi
;;
+ find|search)
+ if [[ -z "$@" ]]; then
+ echo "Usage: $program $command pass-names..."
+ exit 1
+ fi
+ if ! tree --help |& grep -q "^ --matchdirs"; then
+ echo "ERROR: $program: incompatible tree command"
+ echo
+ echo "Your version of the tree command is missing the relevent patch to add the"
+ echo "--matchdirs switch. Please ask your distribution to patch your version of"
+ echo "tree with:"
+ echo " http://git.zx2c4.com/password-store/plain/contrib/tree-1.6.0-matchdirs.patch"
+ echo "Sorry for the inconvenience."
+ exit 1
+ fi
+ terms="$@"
+ echo "Search Terms: $terms"
+ tree -l --noreport -P "*${terms// /*|*}*" --prune --matchdirs "$PREFIX" | tail -n +2 | sed 's/\.gpg$//'
+ ;;
insert)
multiline=0
noecho=1