Added licensing information (GPLv2) and began importing completion code
from pass.
This commit is contained in:
94
src/bash-completion/sns
Normal file
94
src/bash-completion/sns
Normal file
@@ -0,0 +1,94 @@
|
||||
#!/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/.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)
|
||||
_sns_complete_folders
|
||||
--edit|--print)
|
||||
_sns_complete_entries
|
||||
;;
|
||||
*)
|
||||
;;
|
||||
esac
|
||||
else
|
||||
COMPREPLY+=($(compgen -W "${commands}" -- ${cur}))
|
||||
|
||||
fi
|
||||
}
|
||||
|
||||
complete -o filenames -o nospace -F _sns sns
|
||||
@@ -8,7 +8,7 @@ if [ -z "$EDITOR" ]; then
|
||||
"No editor specified in environment."
|
||||
exit
|
||||
# Verify the note exists
|
||||
elif [ ! -r "$NOTE" ]; then
|
||||
elif [ ! -r "$NOTES_DIR/$NOTE" ]; then
|
||||
>&2 printf " $RED_COLOR!$RESET_COLOR %s\n"\
|
||||
"Note cannot be opened for editing."
|
||||
exit 40;
|
||||
@@ -17,17 +17,17 @@ fi
|
||||
# If encryption is enabled, decrypt $NOTE to a temp file, otherwise
|
||||
# operate on the note directly.
|
||||
if [ "$ENCRYPTION" == "TRUE" ]; then
|
||||
cp "$NOTE" "$NOTE".bk #Insurance
|
||||
cp "$NOTES_DIR/$NOTE" "$NOTES_DIR$/$NOTE".bk #Insurance
|
||||
TMP_NOTE="$TMP_DIR/$SESSION_ID"
|
||||
decrypt > "$TMP_NOTE"
|
||||
else
|
||||
TMP_NOTE="$NOTE";
|
||||
TMP_NOTE="$NOTES_DIR/$NOTE";
|
||||
fi
|
||||
|
||||
# Write an ammendment header
|
||||
if [ -z "$CREATE" ]; then
|
||||
printf "\n %s\n" "edit - $(date)" >> "$TMP_NOTE"
|
||||
printf "\n %s\n" "===================================" >> "$TMP_NOTE"
|
||||
printf "%s\n" "===================================" >> "$TMP_NOTE"
|
||||
fi
|
||||
|
||||
# Call the editor
|
||||
@@ -36,13 +36,13 @@ printf " - %s\n" "editing ${NOTE%.*}"
|
||||
|
||||
# If the file was previously decrypted, encrypt it back
|
||||
if [ "$ENCRYPTION" == "TRUE" ]; then
|
||||
rm "$NOTE"
|
||||
rm "$NOTES_DIR/$NOTE"
|
||||
encrypt;
|
||||
if [ ! -r "$NOTE" ]; then
|
||||
>&2 printf " $RED_COLOR!$RESET_COLOR %s\n" "error: note was not saved."
|
||||
cp "$NOTE.bk" "$NOTE"
|
||||
cp "$NOTES_DIR/$NOTE.bk" "$NOTES_DIR/$NOTE"
|
||||
else
|
||||
rm "$NOTE.bk";
|
||||
rm "$NOTES_DIR/$NOTE.bk";
|
||||
fi
|
||||
fi
|
||||
|
||||
|
||||
Reference in New Issue
Block a user