Files
vns/build/bash-completion
Jon-William Lewis 687e7b59e4 Restructuring
2016-08-14 13:08:32 -05:00

98 lines
2.6 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.
_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-secret-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 --delete --edit --help --print --list --init\
-c -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