inotes - notes - a console notes manager using git Err bitreich.org 70 1Log /scm/notes/log.gph bitreich.org 70 1Files /scm/notes/files.gph bitreich.org 70 1Refs /scm/notes/refs.gph bitreich.org 70 1Tags /scm/notes/tag bitreich.org 70 1LICENSE /scm/notes/file/LICENSE.gph bitreich.org 70 i--- Err bitreich.org 70 inotes (3372B) Err bitreich.org 70 i--- Err bitreich.org 70 i 1 #!/bin/sh Err bitreich.org 70 i 2 Err bitreich.org 70 i 3 : ${REPO:=~/notes} Err bitreich.org 70 i 4 Err bitreich.org 70 i 5 # search for a suitable editor Err bitreich.org 70 i 6 [ -z "$EDITOR" ] && \ Err bitreich.org 70 i 7 for e in nvim vim emacs vi ed; do Err bitreich.org 70 i 8 if command -v $e >/dev/null 2>&1; then Err bitreich.org 70 i 9 EDITOR=$e Err bitreich.org 70 i 10 break Err bitreich.org 70 i 11 fi Err bitreich.org 70 i 12 done Err bitreich.org 70 i 13 Err bitreich.org 70 i 14 if [ -z "$EDITOR" ]; then Err bitreich.org 70 i 15 printf 'Could not elect an editor. ED is the standard text editor!\n' Err bitreich.org 70 i 16 EDITOR=ed Err bitreich.org 70 i 17 exit 1 Err bitreich.org 70 i 18 fi Err bitreich.org 70 i 19 Err bitreich.org 70 i 20 usage() { Err bitreich.org 70 i 21 name=$(basename $0) Err bitreich.org 70 i 22 printf '%s\n' \ Err bitreich.org 70 i 23 "$name [ls] | init | last | [history|cat|rm] PATH" \ Err bitreich.org 70 i 24 "$name [ls]" \ Err bitreich.org 70 i 25 ': show hierarchy tree' \ Err bitreich.org 70 i 26 "$name init" \ Err bitreich.org 70 i 27 ': initialize the git repository' \ Err bitreich.org 70 i 28 "$name last [limit]" \ Err bitreich.org 70 i 29 ': show files ordered by edition time' \ Err bitreich.org 70 i 30 "$name history PATH" \ Err bitreich.org 70 i 31 ': uses tig to display file history' \ Err bitreich.org 70 i 32 "$name cat PATH" \ Err bitreich.org 70 i 33 ': output content of the file' \ Err bitreich.org 70 i 34 "$name rm PATH" \ Err bitreich.org 70 i 35 ': delete file' \ Err bitreich.org 70 i 36 "$name [edit] PATH" \ Err bitreich.org 70 i 37 ": start \$EDITOR ($EDITOR) on file and auto commit" Err bitreich.org 70 i 38 exit 0 Err bitreich.org 70 i 39 } Err bitreich.org 70 i 40 Err bitreich.org 70 i 41 # display a file tree of notes taken Err bitreich.org 70 i 42 display() { Err bitreich.org 70 i 43 if type colortree >/dev/null 2>&1 Err bitreich.org 70 i 44 then Err bitreich.org 70 i 45 colortree -C --prune --noreport "$REPO" Err bitreich.org 70 i 46 exit 0 Err bitreich.org 70 i 47 else Err bitreich.org 70 i 48 cd "$REPO" Err bitreich.org 70 i 49 find . -name '.git' -prune -o -type f -print Err bitreich.org 70 i 50 exit 0 Err bitreich.org 70 i 51 fi Err bitreich.org 70 i 52 } Err bitreich.org 70 i 53 Err bitreich.org 70 i 54 # edit a file given as parameter Err bitreich.org 70 i 55 edit() { Err bitreich.org 70 i 56 cd "$REPO" Err bitreich.org 70 i 57 if [ ! -d "$1" ] Err bitreich.org 70 i 58 then Err bitreich.org 70 i 59 mkdir -p "$(dirname "$1")" Err bitreich.org 70 i 60 "$EDITOR" "$1" Err bitreich.org 70 i 61 if [ -f "$1" ] Err bitreich.org 70 i 62 then Err bitreich.org 70 i 63 git add "$1" Err bitreich.org 70 i 64 git commit -m "editing by $USER" "$1" Err bitreich.org 70 i 65 fi Err bitreich.org 70 i 66 exit 0 Err bitreich.org 70 i 67 else Err bitreich.org 70 i 68 printf 'Aborting: "%s" is a directory.\n' "$1" Err bitreich.org 70 i 69 exit 1 Err bitreich.org 70 i 70 fi Err bitreich.org 70 i 71 } Err bitreich.org 70 i 72 Err bitreich.org 70 i 73 # show file history using tig program Err bitreich.org 70 i 74 histo() { Err bitreich.org 70 i 75 cd "$REPO" Err bitreich.org 70 i 76 if [ -f "$1" ] Err bitreich.org 70 i 77 then Err bitreich.org 70 i 78 if type tig >/dev/null 2>&1 Err bitreich.org 70 i 79 then Err bitreich.org 70 i 80 tig "$1" Err bitreich.org 70 i 81 exit 0 Err bitreich.org 70 i 82 else Err bitreich.org 70 i 83 printf 'Aborting: tig software is needed for history\n' Err bitreich.org 70 i 84 exit 6 Err bitreich.org 70 i 85 fi Err bitreich.org 70 i 86 else Err bitreich.org 70 i 87 printf 'Aborting: "%s" file does not exist.\n' "$1" Err bitreich.org 70 i 88 exit 5 Err bitreich.org 70 i 89 fi Err bitreich.org 70 i 90 } Err bitreich.org 70 i 91 Err bitreich.org 70 i 92 # output the content of a file Err bitreich.org 70 i 93 show_file() { Err bitreich.org 70 i 94 cd "$REPO" Err bitreich.org 70 i 95 cat "$1" Err bitreich.org 70 i 96 exit 0 Err bitreich.org 70 i 97 } Err bitreich.org 70 i 98 Err bitreich.org 70 i 99 # delete a file and commit in git Err bitreich.org 70 i 100 delete() { Err bitreich.org 70 i 101 cd "$REPO" Err bitreich.org 70 i 102 if [ -f "$1" ]; Err bitreich.org 70 i 103 then Err bitreich.org 70 i 104 git rm "$1" Err bitreich.org 70 i 105 git commit -m "deleted by $USER" "$1" Err bitreich.org 70 i 106 exit 0 Err bitreich.org 70 i 107 else Err bitreich.org 70 i 108 printf 'Aborting: "%s" is a directory.\n' "$1" Err bitreich.org 70 i 109 exit 1 Err bitreich.org 70 i 110 fi Err bitreich.org 70 i 111 } Err bitreich.org 70 i 112 Err bitreich.org 70 i 113 # display the list of edited files ordered by time Err bitreich.org 70 i 114 last() { Err bitreich.org 70 i 115 Err bitreich.org 70 i 116 cd "$REPO" Err bitreich.org 70 i 117 Err bitreich.org 70 i 118 if [ -n "$1" ]; then Err bitreich.org 70 i 119 limit="$1" Err bitreich.org 70 i 120 else Err bitreich.org 70 i 121 limit=10 Err bitreich.org 70 i 122 fi Err bitreich.org 70 i 123 Err bitreich.org 70 i 124 git log --date=relative --name-only | \ Err bitreich.org 70 i 125 awk ' Err bitreich.org 70 i 126 /^commit / { Err bitreich.org 70 i 127 date="no" Err bitreich.org 70 i 128 next Err bitreich.org 70 i 129 } Err bitreich.org 70 i 130 Err bitreich.org 70 i 131 /^Date/ { Err bitreich.org 70 i 132 date=substr($0,index($0,$2)) Err bitreich.org 70 i 133 getline Err bitreich.org 70 i 134 for(s="x";s!="";) { Err bitreich.org 70 i 135 getline Err bitreich.org 70 i 136 s=$0 Err bitreich.org 70 i 137 } Err bitreich.org 70 i 138 next Err bitreich.org 70 i 139 } Err bitreich.org 70 i 140 Err bitreich.org 70 i 141 { Err bitreich.org 70 i 142 if(date!="no" && Err bitreich.org 70 i 143 substr($0,0,1)!=" " && Err bitreich.org 70 i 144 length($0)>1) Err bitreich.org 70 i 145 { Err bitreich.org 70 i 146 seen[$0]++ Err bitreich.org 70 i 147 if(seen[$0]==1) { Err bitreich.org 70 i 148 print date" "$0 Err bitreich.org 70 i 149 } Err bitreich.org 70 i 150 } Err bitreich.org 70 i 151 }' | head -n "$limit" Err bitreich.org 70 i 152 exit 0 Err bitreich.org 70 i 153 } Err bitreich.org 70 i 154 Err bitreich.org 70 i 155 # raw list of files for completion Err bitreich.org 70 i 156 _completion_list() { Err bitreich.org 70 i 157 if [ -d "$REPO" ] Err bitreich.org 70 i 158 then Err bitreich.org 70 i 159 cd "$REPO" Err bitreich.org 70 i 160 find ./${1} -name '.git' -prune -o -type f -print | sed 's,^\./,,' Err bitreich.org 70 i 161 exit 0 Err bitreich.org 70 i 162 else Err bitreich.org 70 i 163 printf 'Aborting: "%s" does not exist.\n' "$REPO" Err bitreich.org 70 i 164 exit 4 Err bitreich.org 70 i 165 fi Err bitreich.org 70 i 166 } Err bitreich.org 70 i 167 Err bitreich.org 70 i 168 # create a git repository Err bitreich.org 70 i 169 initialization() { Err bitreich.org 70 i 170 cd "$REPO" Err bitreich.org 70 i 171 if [ -d .git ] Err bitreich.org 70 i 172 then Err bitreich.org 70 i 173 echo "Git already initialized" Err bitreich.org 70 i 174 exit 3 Err bitreich.org 70 i 175 else Err bitreich.org 70 i 176 git init Err bitreich.org 70 i 177 exit 0 Err bitreich.org 70 i 178 fi Err bitreich.org 70 i 179 } Err bitreich.org 70 i 180 Err bitreich.org 70 i 181 if ! mkdir -p "$REPO" Err bitreich.org 70 i 182 then Err bitreich.org 70 i 183 printf 'Aborting: cannot create "%s".\n' "$REPO" Err bitreich.org 70 i 184 exit 2 Err bitreich.org 70 i 185 fi Err bitreich.org 70 i 186 Err bitreich.org 70 i 187 case "$1" in Err bitreich.org 70 i 188 '') display ;; Err bitreich.org 70 i 189 help) usage;; Err bitreich.org 70 i 190 ls) display ;; Err bitreich.org 70 i 191 init) initialization ;; Err bitreich.org 70 i 192 last) last "$2" ;; Err bitreich.org 70 i 193 e*) [ -n "$2" ] && edit "$2" ;; Err bitreich.org 70 i 194 hi*) [ -n "$2" ] && histo "$2" ;; Err bitreich.org 70 i 195 r*) [ -n "$2" ] && delete "$2" ;; Err bitreich.org 70 i 196 c*) [ -n "$2" ] && show_file "$2" ;; Err bitreich.org 70 i 197 _files) _completion_list "$2" ;; Err bitreich.org 70 i 198 esac Err bitreich.org 70 i 199 Err bitreich.org 70 i 200 # if parameter doesn't match a command, it may be a file Err bitreich.org 70 i 201 edit "$1" Err bitreich.org 70 .