aboutsummaryrefslogtreecommitdiff
path: root/compl/crypt.bash
diff options
context:
space:
mode:
Diffstat (limited to 'compl/crypt.bash')
-rwxr-xr-xcompl/crypt.bash53
1 files changed, 53 insertions, 0 deletions
diff --git a/compl/crypt.bash b/compl/crypt.bash
new file mode 100755
index 0000000..8631050
--- /dev/null
+++ b/compl/crypt.bash
@@ -0,0 +1,53 @@
+# Bash completion
+#
+# Copy to /usr/share/bash-completion/completions/crypt
+
+_crypt() {
+ COMPREPLY=()
+
+ local location="${CRYPT_LOCATION:-$HOME/.crypt}"
+ location="${location%/}/"
+ local cur="${COMP_WORDS[COMP_CWORD]}"
+
+ local IFS=$'\n'
+ local suffix=".gpg"
+
+ local firstitem=""
+ local i=0 item
+ local items=($(compgen -f $location$cur))
+
+ for item in ${items[@]}; do
+ [[ $item =~ /\.[^/]*$ ]] && continue
+
+ if [[ ${#items[@]} -eq 1 ]]; then
+ while [[ -d $item ]]; do
+ local subitems=($(compgen -f "$item/"))
+ local filtereditems=( ) item2
+ for item2 in "${subitems[@]}"; do
+ [[ $item2 =~ /\.[^/]*$ ]] && continue
+ filtereditems+=( "$item2" )
+ done
+ if [[ ${#filtereditems[@]} -eq 1 ]]; then
+ item="${filtereditems[0]}"
+ else
+ break
+ fi
+ done
+ fi
+
+ [[ -d $item ]] && item="$item/"
+
+ item="${item%$suffix}"
+ COMPREPLY+=("${item#$location}")
+ if [[ $i -eq 0 ]]; then
+ firstitem=$item
+ fi
+ let i+=1
+ done
+
+ if [[ $i -gt 1 || ( $i -eq 1 && -d $firstitem ) ]]; then
+ compopt -o nospace
+ fi
+}
+
+complete -o filenames -F _crypt crypt