denote-acme/scripts/Djournal

129 lines
3.0 KiB
Bash
Executable File

#!/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