#!/bin/bash # Simple Note System, bash completion file # ======================================== # Copyright (C) 2016, Jon Lewis # 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 and # Brian Mattern . All Rights Reserved. # This file is licensed under the GPLv2+. Please see COPYING for more information. _sns_complete_entries () { prefix="${SNS_STORE_DIR:-$HOME/.config/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}" COMPREPLY+=("${item#$prefix}") done } _sns_complete_folders () { prefix="${SNS_STORE_DIR:-$HOME/.config/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" 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