aboutsummaryrefslogtreecommitdiff
path: root/extra
diff options
context:
space:
mode:
Diffstat (limited to 'extra')
-rwxr-xr-xextra/crypt.bash53
-rwxr-xr-xextra/crypt.zsh13
2 files changed, 66 insertions, 0 deletions
diff --git a/extra/crypt.bash b/extra/crypt.bash
new file mode 100755
index 0000000..3074ff5
--- /dev/null
+++ b/extra/crypt.bash
@@ -0,0 +1,53 @@
+# Bash completion
+#
+# Copy to /usr/share/bash-completion/completions/crypt
+
+_crypt() {
+ COMPREPLY=()
+
+ local location="${CRYPT_PATH:-$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
diff --git a/extra/crypt.zsh b/extra/crypt.zsh
new file mode 100755
index 0000000..2e1e57a
--- /dev/null
+++ b/extra/crypt.zsh
@@ -0,0 +1,13 @@
+#compdef crypt
+#autoload
+
+# copy to /usr/share/zsh/site-functions/_crypt
+
+_crypt() {
+ local IFS=$'\n'
+ local location
+ zstyle -s ":completion:${curcontext}:" location location || location="${CRYPT_PATH:-$HOME/.crypt}"
+ _values -C 'entries' ${$(crypt list --plain | sed -e "s#\([^[:space:]]*\)[[:space:]]*\(.*\)#\1\[\2\]#g" | sort):-""}
+}
+
+_crypt