init
This commit is contained in:
		
							
								
								
									
										69
									
								
								completion
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										69
									
								
								completion
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,69 @@
 | 
			
		||||
#!/usr/bin/env bash
 | 
			
		||||
# n! (notes!, nex, nexclamation) completion script.
 | 
			
		||||
 | 
			
		||||
NPATH="${NPATH:-$HOME/Documents}"
 | 
			
		||||
 | 
			
		||||
_n_list_dirs() {
 | 
			
		||||
    find "$NPATH" -type d -exec echo {}/ \; | sed -E "s%$NPATH/?%%g;/^$/d";
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
_n_list_files() {
 | 
			
		||||
    find "$NPATH" -type f | sed -E "s%$NPATH/?%%g;/^$/d"
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
_n_get_opts() {
 | 
			
		||||
    local all_opts="$1"
 | 
			
		||||
 | 
			
		||||
    # Find matched opts.
 | 
			
		||||
    local used_opts="$(echo "${COMP_WORDS[@]} $all_opts" \
 | 
			
		||||
        | tr ' ' '\n' | sort | uniq -d \
 | 
			
		||||
    )"
 | 
			
		||||
 | 
			
		||||
    if [ "$used_opts" ]; then
 | 
			
		||||
        # Delete 'help' option.
 | 
			
		||||
        all_opts="$(sed 's%help%%' <<< "$all_opts")"
 | 
			
		||||
        # Delete opts if match.
 | 
			
		||||
        for opt in $used_opts; do
 | 
			
		||||
            all_opts="$(sed "s%$opt%%" <<< "$all_opts")"
 | 
			
		||||
        done
 | 
			
		||||
    fi
 | 
			
		||||
    echo "$all_opts"
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
_nexclamation() {
 | 
			
		||||
    local cur prev
 | 
			
		||||
    cur=${COMP_WORDS[COMP_CWORD]}
 | 
			
		||||
    prev=${COMP_WORDS[COMP_CWORD-1]}
 | 
			
		||||
 | 
			
		||||
    case ${COMP_CWORD} in
 | 
			
		||||
        1)  # Commands and options
 | 
			
		||||
            COMPREPLY=($(compgen -W \
 | 
			
		||||
                "-v --version -h --help
 | 
			
		||||
                q quick s search l last mkdir ls lsd rm i info
 | 
			
		||||
                $(_n_list_dirs) $(_n_list_files)" -- ${cur}))
 | 
			
		||||
            ;;
 | 
			
		||||
        2)  # Subcommand completion
 | 
			
		||||
            case ${prev} in
 | 
			
		||||
                ls) COMPREPLY=($(compgen -W "$(_n_list_dirs)" -- ${cur}))
 | 
			
		||||
                    ;;
 | 
			
		||||
                rm) COMPREPLY=($(compgen -W "-f --force
 | 
			
		||||
                    $(_n_list_dirs) $(_n_list_files)" -- ${cur}))
 | 
			
		||||
                    ;;
 | 
			
		||||
                i|info) COMPREPLY=($(compgen -W "$(_n_list_files)" -- ${cur}))
 | 
			
		||||
                    ;;
 | 
			
		||||
                *) COMPREPLY=()
 | 
			
		||||
                    ;;
 | 
			
		||||
            esac;;
 | 
			
		||||
        *)  # Complete file and directory names
 | 
			
		||||
            case ${COMP_WORDS[2]} in
 | 
			
		||||
                *)
 | 
			
		||||
                    COMPREPLY=($(compgen -W \
 | 
			
		||||
                    "$(_n_get_opts "$(_n_list_dirs) $(_n_list_files)")" -- ${cur}))
 | 
			
		||||
                    ;;
 | 
			
		||||
            esac;;
 | 
			
		||||
    esac
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
complete -F _nexclamation nexclamation
 | 
			
		||||
complete -F _nexclamation nex
 | 
			
		||||
complete -F _nexclamation n!
 | 
			
		||||
		Reference in New Issue
	
	Block a user