URI: 
       Major internal rework by Quentin Rameau - notes - a console notes manager using git
   DIR Log
   DIR Files
   DIR Refs
   DIR Tags
   DIR LICENSE
       ---
   DIR commit 901af4715f8b6dd389b9d047a4ff15e769b61723
   DIR parent 15b0eb8c733c9fff27256068ba210d3d904bfadb
  HTML Author: Solene Rapenne <solene@perso.pw>
       Date:   Sat, 14 Jul 2018 10:50:03 +0200
       
       Major internal rework by Quentin Rameau
       
       Diffstat:
         M notes                               |     130 ++++++++++++++-----------------
       
       1 file changed, 60 insertions(+), 70 deletions(-)
       ---
   DIR diff --git a/notes b/notes
       @@ -2,40 +2,40 @@
        
        # tool for taking notes inside a git repository
        
       -REPO=${REPO:=~/notes}
       +: ${REPO:=~/notes}
       +
       +# search for a suitable editor
       +[ -z "$EDITOR" ] && \
       +for e in nvim vim emacs vi ed; do
       +        if command -v $e >/dev/null 2>&1; then
       +                EDITOR=$e
       +                break
       +        fi
       +done
        
       -# default editor to vi
        if [ -z "$EDITOR" ]; then
       -        type nvim >/dev/null 2>&1 && EDITOR=nvim
       -        test -z "$EDITOR" && type vim   >/dev/null 2>&1 && EDITOR=vim
       -        test -z "$EDITOR" && type emacs >/dev/null 2>&1 && EDITOR=emacs
       -        test -z "$EDITOR" && EDITOR=vi
       +        printf 'Could not elect an editor. ED is the standard text editor!\n'
       +        exit 1
        fi
        
        usage() {
       -        NAME=$(basename $0)
       -        echo "$NAME [init|ls|history|cat|rm] [path]"
       -        echo ""
       -        echo "  $NAME init"
       -        echo "     - initialize the git repository"
       -        echo ""
       -        echo "  $NAME [ls]"
       -        echo "     - show hierarchy tree"
       -        echo ""
       -        echo "  $NAME path"
       -        echo '     - start $EDITOR on file and auto commit'
       -        echo ""
       -        echo "  $NAME history path"
       -        echo "     - start tig on file to display file history"
       -        echo ""
       -        echo "  $NAME cat path"
       -        echo "     - output content of the file"
       -        echo ""
       -        echo "  $NAME rm path"
       -        echo "     - delete file"
       -        echo ""
       -        echo "  $NAME last"
       -        echo "     - show files ordered by edition time"
       +        name=$(basename $0)
       +        printf '%s\n' \
       +            "$name [ls] | init | last | [history|cat|rm] PATH" \
       +            "$name [ls]" \
       +            ': show hierarchy tree' \
       +            "$name init" \
       +            ': initialize the git repository' \
       +            "$name last" \
       +            ': show files ordered by edition time' \
       +            "$name history PATH" \
       +            ': uses tig to display file history' \
       +            "$name cat PATH" \
       +            ': output content of the file' \
       +            "$name rm PATH" \
       +            ': delete file' \
       +            "$name PATH" \
       +            ": start \$EDITOR ($EDITOR) on file and auto commit"
        }
        
        # display a file tree of notes taken
       @@ -45,54 +45,46 @@ display() {
        
        # edit a file given as parameter
        edit() {
       -        DEST="$1"
       -        DIRNAME=$(dirname "$DEST")
                cd "$REPO"
       -
       -        if [ ! -d "$DEST" ]
       +        if [ ! -d "$1" ]
                then
       -                mkdir -p "${DIRNAME}"
       -                $EDITOR "$DEST"
       -                git add "$DEST"
       -                git commit -m "editing by $USER" "$DEST"
       +                mkdir -p "$(dirname "$destdir")"
       +                "$EDITOR" "$1"
       +                git add "$1"
       +                git commit -m "editing by $USER" "$1"
                else
       -                echo "${DEST} is a folder. Aborting"
       +                printf 'Aborting: "%s" is a directory.\n' "$1"
                        exit 1
                fi
        }
        
        # show file history using tig program
        histo() {
       -        DEST="$1"
                cd "$REPO"
       -
       -        tig "$DEST"
       +        tig "$1"
        }
        
        # output the content of a file
        show_file() {
       -        DEST="$1"
                cd "$REPO"
       -        cat "$DEST"
       +        cat "$1"
        }
        
        # delete a file and commit in git
        delete() {
       -        DEST="$1"
                cd "$REPO"
       -        if [ -f "$DEST" ];
       +        if [ -f "$1" ];
                then
       -                git rm "$DEST"
       -                git commit -m "deleted by $USER" "$DEST"
       +                git rm "$1"
       +                git commit -m "deleted by $USER" "$1"
                else
       -                echo "${DEST} is a folder. Aborting."
       +                printf 'Aborting: "%s" is a directory.\n' "$1"
                        exit 1
                fi
        }
        
        # display the list of edited files ordered by time
        last() {
       -        DEST="$1"
                cd "$REPO"
                git log --pretty="%cr" --name-only | \
                        awk '{
       @@ -113,12 +105,12 @@ _completion_list() {
                        cd "$REPO"
                        find . -name '.git' -prune -o -mindepth 2 -type f -print | sed 's,^\./,,'
                else
       -                echo "$REPO does not exist. Aborting..."
       +                printf 'Aborting: "%s" does not exist.\n' "$REPO"
                        exit 4
                fi
        }
        
       -# create a git repo
       +# create a git repository
        initialization() {
                cd "$REPO"
                if [ -d .git ]
       @@ -130,27 +122,25 @@ initialization() {
                fi
        }
        
       -mkdir -p "${REPO}"
       -if [ $? -ne 0 ]
       +if ! mkdir -p "$REPO"
        then
       -        echo "Can't create ${REPO}. Aborting."
       +        printf 'Aborting: cannot create "%s".\n' "$REPO"
                exit 2
        fi
        
       -PARAM1="$1"
       -PARAM2="$2"
       -
       -if [ "$PARAM1" = "ls" ];      then display          ; exit 0 ; fi
       -if [ "$PARAM1" = "init" ];    then initialization   ; exit 0 ; fi
       -if [ "$PARAM1" = "" ];        then display          ; exit 0 ; fi
       -if [ "$PARAM1" = "_files" ] ; then _completion_list ; exit 0 ; fi
       -if [ "$PARAM1" = "rm" ] && [ -n "$PARAM2" ]; then delete "$PARAM2" ; exit 0 ; fi
       -if expr "$PARAM1" : "^hi" >/dev/null && [ -n "$PARAM2" ]; then histo     "$PARAM2" ; exit 0 ; fi
       -if expr "$PARAM1" : "^c"  >/dev/null && [ -n "$PARAM2" ]; then show_file "$PARAM2" ; exit 0 ; fi
       -if expr "$PARAM1" : "^he" >/dev/null ; then usage ; exit 0 ; fi
       -if expr "$PARAM1" : "^l"  >/dev/null ; then last  ; exit 0 ; fi
       -
       -if [ -f "${REPO}/${PARAM1}" ] ; then edit "$PARAM1" ; exit 0 ; fi
       +if [ -f "$REPO/$1" ]; then
       +        edit "$1"
       +        exit 0
       +fi
        
       -# nothing matched
       -echo "${PARAM1} is not a valid command or an existing filename" && exit 5
       +case "$1" in
       +        '') display ;;
       +        "ls") display ;;
       +        "i*") initialization ;;
       +        "la*") last ;;
       +        "hi*") [ -n "$2" ] && histo "$2" ;;
       +        "c*") [ -n "$2" ] && show_file "$2" ;;
       +        "r*") [ -n "$2" ] && delete "$2" ;;
       +        "_files") _completion_list ;;
       +        *) usage && exit 1 ;; 
       +esac