hlfw.ca

task

ref: 932aa079d1f8a98ba1d50e7bb4b3ea876053125c
dir: /add/

View raw version
#!/bin/rc -e
rfork ne

# Remove commentary lines.
# Remove leading and trailing empty lines.
# Combine consecutive empty lines between paragraphs.
# Remove trailing spaces from lines.
# Ensure there's trailing newline.
fn cleanmsg{
	awk '
	/^[ 	]*#/ {next}
	/^[ 	]*$/ {empty = 1; next}

	wet && empty {printf "\n"}
	{wet = 1; empty = 0}
	{sub(/[ 	]+$/, ""); print $0}
	'
}

fn editmsg{
	if(! test -s $msgfile.tmp){
		>$msgfile.tmp {
			echo -n '# tag:' $tag
			if(! ~ $#before 0)
				echo -n ' before:' $before
			if(! ~ $#after 0)
				echo -n ' after:' $after
			echo ''
			echo $data
		}
		edit=1
	}
	if(~ $#editor 0)
		editor=hold
	$editor $msgfile.tmp

	cleanmsg < $msgfile.tmp > $msgfile
	if(! test -s $msgfile){
		echo 'empty task message' >[1=2]
		exit 'task'
	}
}

fn gettag{
	files=`{ls .pro/todo/}
	if(! ~ $#change 0)
		tag=$change
	if not
		tag=$#files
}

fn final{
	cp $msgfile .pro/todo/$tag
}

fn sigexit{
	if(! ~ $#msgfile 0)
		rm -f $msgfile $msgfile.tmp
}

flagfmt='c:change change, a:after after, b:before before, e:edit'; args='[msg ...]'
eval `''{aux/getflags $*} || exec aux/usage

msgfile=/tmp/pro-msg.$pid
if(! ~ $#* 0){
	data=`{echo $*}
if(! ~ $#change 0 )
	if(test -s .pro/todo/$change){
		cat .pro/todo/$change > $msgfile.tmp
		if(! ~ $#data 0)
			echo $data >> $msgfile.tmp
	}

@{
	flag e +
	gettag
	editmsg
	final
} || echo 'could not add task:' $status >[1=2]
exit ''