100 lines
2.7 KiB
Bash
100 lines
2.7 KiB
Bash
#!/bin/bash
|
|
# Simple Note System, bash completion file
|
|
# ========================================
|
|
# Copyright (C) 2016, Jon Lewis <jon.lewis@xenami.net>
|
|
# Simple Note System is licensed under the GPLv2. Please see LICENSE for more
|
|
# information.
|
|
#
|
|
# **Notice**
|
|
# This file was adapted from pass, the standard unix password manager under the
|
|
# terms of the GPLv2 license. Pass may be found at https://passwordstore.org.
|
|
#
|
|
# The original file bore the following copyright notice:
|
|
#
|
|
# Copyright (C) 2012 - 2014 Jason A. Donenfeld <Jason@zx2c4.com> and
|
|
# Brian Mattern <rephorm@rephorm.com>. All Rights Reserved.
|
|
# This file is licensed under the GPLv2+. Please see COPYING for more information.
|
|
|
|
if [ -r "$HOME"/.local/sns/sns.conf ]; then source "$HOME"/.local/sns/sns.conf; fi
|
|
|
|
_sns_complete_entries () {
|
|
prefix="${SNS_STORE_DIR:-$HOME/.local/sns/notes/}"
|
|
suffix=".note"
|
|
autoexpand=${1:-0}
|
|
|
|
local IFS=$'\n'
|
|
local items=($(compgen -f $prefix$cur))
|
|
for item in "${items[@]}"; do
|
|
[[ $item =~ /\.[^/]*$ ]] && continue
|
|
|
|
# if there is a unique match, and it is a directory with one entry
|
|
# autocomplete the subentry as well (recursively)
|
|
if [[ ${#items[@]} -eq 1 && $autoexpand -eq 1 ]]; then
|
|
while [[ -d $item ]]; do
|
|
local subitems=($(compgen -f "$item/"))
|
|
local filtereditems=( )
|
|
for item2 in "${subitems[@]}"; do
|
|
[[ $item2 =~ /\.[^/]*$ ]] && continue
|
|
filtereditems+=( "$item2" )
|
|
done
|
|
if [[ ${#filtereditems[@]} -eq 1 ]]; then
|
|
item="${filtereditems[0]}"
|
|
else
|
|
break
|
|
fi
|
|
done
|
|
fi
|
|
|
|
# append / to directories
|
|
[[ -d $item ]] && item="$item/"
|
|
|
|
item="${item%$suffix}"
|
|
item="${item%.gpg}"
|
|
COMPREPLY+=("${item#$prefix}")
|
|
done
|
|
}
|
|
|
|
_sns_complete_folders () {
|
|
prefix="${SNS_STORE_DIR:-$HOME/.local/sns/notes/}"
|
|
|
|
local IFS=$'\n'
|
|
local items=($(compgen -d $prefix$cur))
|
|
for item in "${items[@]}"; do
|
|
[[ $item == $prefix.* ]] && continue
|
|
COMPREPLY+=("${item#$prefix}/")
|
|
done
|
|
}
|
|
|
|
_sns_complete_keys () {
|
|
local IFS=$'\n'
|
|
# Extract names and email addresses from gpg --list-keys
|
|
local keys="$(gpg2 --list-keys --with-colons | cut -d : -f 10 | sort -u | sed '/^$/d')"
|
|
COMPREPLY+=($(compgen -W "${keys}" -- ${cur}))
|
|
}
|
|
|
|
_sns()
|
|
{
|
|
COMPREPLY=()
|
|
local cur="${COMP_WORDS[COMP_CWORD]}"
|
|
local commands="--create --config --delete --edit --help --print --list --init\
|
|
-c "$VCTL" -d -e -h -p -l -i"
|
|
if [[ $COMP_CWORD -gt 1 ]]; then
|
|
local lastarg="${COMP_WORDS[$COMP_CWORD-1]}"
|
|
case "${COMP_WORDS[1]}" in
|
|
--list|-l)
|
|
_sns_complete_folders
|
|
;;
|
|
--edit|-e|--print|-p|--delete|-d)
|
|
_sns_complete_entries
|
|
;;
|
|
*)
|
|
;;
|
|
esac
|
|
else
|
|
COMPREPLY+=($(compgen -W "${commands}" -- ${cur}))
|
|
|
|
fi
|
|
}
|
|
|
|
complete -o filenames -o nospace -F _sns sns
|