#!/bin/bash _notes_complete_notes() { # Look for configuration file at ~/.config/notes/config and use it if [ -f ~/.config/notes/config ]; then . ~/.config/notes/config fi local configured_dir=${NOTES_DIRECTORY%/} # Remove trailing slashes local notes_dir="${configured_dir:-$HOME/notes}" local OLD_IFS="$IFS" IFS=$'\n' local items=($(compgen -f "$notes_dir/$1" | sort )) IFS="$OLD_IFS" for item in "${items[@]}"; do [[ $item =~ /\.[^/]*$ ]] && continue [[ -d $item ]] && item="$item/" local filename=${item#$notes_dir/} COMPREPLY+=("${filename%.md}") done } _notes_complete_commands() { local valid_commands="new find grep open ls rm cat append search" COMPREPLY=($(compgen -W "${valid_commands}" -- "${1}")) } _notes() { local cur COMPREPLY=() # Array variable storing the possible completions. cur=${COMP_WORDS[COMP_CWORD]} if [[ $COMP_CWORD -gt 1 ]]; then case "${COMP_WORDS[1]}" in new|n) _notes_complete_notes "$cur" ;; find|f) _notes_complete_notes "$cur" ;; grep) ;; append|a) _notes_complete_notes "$cur" ;; open|o) _notes_complete_notes "$cur" ;; cat|c) _notes_complete_notes "$cur" ;; ls) _notes_complete_notes "$cur" ;; esac else compopt +o nospace _notes_complete_commands "$cur" fi return 0 } complete -o filenames -o nospace -F _notes notes