Major internal rework by Quentin Rameau - notes - a console notes manager using… | |
Log | |
Files | |
Refs | |
Tags | |
LICENSE | |
--- | |
commit 901af4715f8b6dd389b9d047a4ff15e769b61723 | |
parent 15b0eb8c733c9fff27256068ba210d3d904bfadb | |
Author: Solene Rapenne <[email protected]> | |
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(-) | |
--- | |
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… | |
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 ; … | |
-if expr "$PARAM1" : "^hi" >/dev/null && [ -n "$PARAM2" ]; then histo "$PAR… | |
-if expr "$PARAM1" : "^c" >/dev/null && [ -n "$PARAM2" ]; then show_file "$PAR… | |
-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 |