diff options
Diffstat (limited to 'lib/keyringer/functions')
-rwxr-xr-x | lib/keyringer/functions | 29 |
1 files changed, 18 insertions, 11 deletions
diff --git a/lib/keyringer/functions b/lib/keyringer/functions index ab519b2..09b004d 100755 --- a/lib/keyringer/functions +++ b/lib/keyringer/functions @@ -430,16 +430,18 @@ function keyringer_get_option { function keyringer_get_file { FILE="$(keyringer_filename "$RELATIVE_PATH/$1")" - if [ -z "$FILE" ]; then - keyringer_action_usage - exit 1 - elif [ ! -f "$KEYDIR/$FILE" ]; then + if [ ! -f "$KEYDIR/$FILE" ]; then # Try to find a similar file + FILE="" count=0 candidates=(`keyringer_exec find "$BASEDIR" | grep -i "$1" | grep -e '.asc$'`) if [ ! -z "$candidates" ]; then - echo "Could not find exact match for \"$1\", please choose one of the following secrets:" + if [ ! -z "$1" ]; then + echo "Could not find exact match for \"$1\"" + fi + + echo "Choose one of the following or type a pattern:" echo "" for candidate in ${candidates[@]}; do @@ -452,15 +454,20 @@ function keyringer_get_file { if [[ "$option" =~ ^[0-9]+$ ]] && [ ! -z "${candidates[$option]}" ]; then FILE="$(keyringer_filename "$RELATIVE_PATH/${candidates[$option]}")" - else - echo "Invalid option" - exit 1 + elif [ ! -z "$option" ]; then + keyringer_get_file $option fi else - echo "File not found: $KEYDIR/$FILE" - exit 1 + echo "Nothing matches $option, try again." + keyringer_get_file fi fi + + # Probably Ctrl-D was hit + if [ -z "$FILE" ]; then + echo "" + exit + fi } # Get a new file argument @@ -473,7 +480,7 @@ function keyringer_get_new_file { fi # Sanitize and complete file name - FILE="`echo $FILE | sed -e 's/[^A-Za-z0-9.\/\-]/_/g'`" + FILE="`echo $FILE | sed -e 's/[^A-Za-z0-9@.\/\-]/_/g'`" # Warn user about file name change if [ "`basename "$*"`" != "`basename $FILE`" ]; then |