#!/usr/bin/env rc # Journal interval: daily, weekly, monthly, yearly interval=daily # Title format: full, date, day, year titleformat=full # Signature (optional) signature='' mnt=$DENOTE_9MOUNT if(~ $#mnt 0) mnt=$HOME/mnt/denote basedir=$DENOTE_DIR if(~ $#basedir 0) basedir=$HOME/doc # Save current dir and cd to journal silo origdir=`{cat $mnt/dir} echo 'cd '$basedir/journal > $mnt/ctl # Parse time offset argument (e.g., +2d, -3h, +15m) offset=0 if(! ~ $#* 0) { arg=$1 sign=`{echo $arg | awk '{print substr($0,1,1)}'} num=`{echo $arg | awk '{s=substr($0,2); sub(/[a-z]$/,"",s); print s}'} unit=`{echo $arg | awk '{print substr($0,length($0))}'} switch($unit) { case d offset=`{hoc -e 'int('$num' * 86400)'} case h offset=`{hoc -e 'int('$num' * 3600)'} case m offset=`{hoc -e 'int('$num' * 60)'} } if(~ $sign '-') { offset=`{hoc -e 'int(-1 * '$offset')'} } } epoch=`{9 date -n} if(~ $#* 0) { switch($interval) { case weekly dow=`{9 date $epoch | awk '{print $1}'} daysback=0 switch($dow) { case Mon; daysback=0 case Tue; daysback=1 case Wed; daysback=2 case Thu; daysback=3 case Fri; daysback=4 case Sat; daysback=5 case Sun; daysback=6 } epoch=`{hoc -e 'int('$epoch' - ('$daysback' * 86400))'} case monthly yearmonth=`{9 date $epoch | awk '{print $6 " " $2}'} epoch=`{9 date -n `{echo $yearmonth | awk '{print $2 " 1 " $1}'}} case yearly year=`{9 date $epoch | awk '{print $6}'} epoch=`{9 date -n 'Jan 1 '^$year} } } targetepoch=`{hoc -e 'int('$epoch' + '$offset')'} datefull=`{9 date $targetepoch | awk ' BEGIN { m["Jan"]="January"; m["Feb"]="February"; m["Mar"]="March" m["Apr"]="April"; m["May"]="May"; m["Jun"]="June" m["Jul"]="July"; m["Aug"]="August"; m["Sep"]="September" m["Oct"]="October"; m["Nov"]="November"; m["Dec"]="December" d["Sun"]="Sunday"; d["Mon"]="Monday"; d["Tue"]="Tuesday" d["Wed"]="Wednesday"; d["Thu"]="Thursday"; d["Fri"]="Friday" d["Sat"]="Saturday" } { split($4, t, ":") print d[$1], $3, m[$2], $6, t[1]":"t[2] }'} switch($titleformat) { case full title=$"datefull case date title=`{echo $datefull | awk '{print $1 " " $2 " " $3 " " $4}'} case day title=`{echo $datefull | awk '{print $1}'} case year title=`{echo $datefull | awk '{print $4}'} case * title=$"datefull } filtertitle=`{echo $"datefull | awk '{print tolower($1 " " $2 " " $3 " " $4)}'} filtertitle=$"filtertitle # Apply filter echo 'filter title:'''$"filtertitle'''' > $mnt/ctl # Check if there are any results results=`{cat $mnt/index} # If no results, create new journal entry if(~ $#results 0) { if(! ~ $signature '') { cmd=''''$"title''' =='^$signature' journal' } if not { cmd=''''$"title''' journal' } echo $cmd > $mnt/new # Re-filter to get the new entry echo 'filter' > $mnt/ctl echo 'filter title:'''$"filtertitle'''' > $mnt/ctl results=`{cat $mnt/index} } Denote 'denote:'$results(1) # Clear filter and restore original directory echo 'filter' > $mnt/ctl echo 'cd '$origdir > $mnt/ctl