129 lines
3.0 KiB
Bash
Executable File
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
|