Hi

I have written a small whatnow replacement[0]. This might be intresting
for some of you. The main benefit from it, is that it works without be
a shell. You allways work from your own shell.

It is a drop in replacement for whatnow. So all you need to do is to
put this script in your path and set whatnowproc or -whatnowproc
appropriate. To work with the current draft just call "whatnow2 [...]".

There are some problems for nmh users and changes between this version
and the mmh version:

This works only with the drafts folder, because it was written without
draftfile in mind. Also it currently works only with one drafts folder.
I don't know how hard is it to change this.

There is no "mime" command, because mmh don't have one. It's easy to add
one.

This version stores the state in a seperate file next to the draft. The
suffix of this file can be configured by the Metafile-Extension option
and falls back to '.meta'. In the mmh version is it also posible to
store the state in the draft itself. Therefor some changes in mhl are
required.

There are some options which aren't necesary set on nmh. I have added
sane[1] fallbacks, if they are not set. The following options and
fallbacks are used:

* draftfolder: +drafts
* Attachment-Header: Nmh-Attachment
* listproc: show

I hope I haven't missed some problems. If you have problems with it let
me know.

Philipp

[0] I have written this for mmh and never tested it with nmh but it should
    just work in most cases

[1] I hope there are sane
#!/bin/sh

printhelp()
{
	echo "Usage: $0 command"
	echo "  commands are:"
	echo "  edit [editor]"
	echo "  list"
	echo "  send [sendargs]"
	echo "  delete"
	echo "  display"
	echo "  attach files"
	echo "  alist"
	echo "  detach anum"
	echo "  refile +folder"
	echo "  -help"
	echo "  -version"
}

version()
{
	if [ $1 -eq 0 ]
	then
		echo "$0 has no own version number, thus this instead:"
		folder -version
		exit 0
	fi
	echo "$0 has no own version number, thus this instead:" 1>&2
	folder -version 1>&2
	exit 1
}

usage()
{
	if [ $1 -eq 0 ]
	then
		printhelp
		exit 0
	fi
	printhelp 1>&2
	exit 1
}

get_editor()
{
	if [ -f "$mhmetafile" ]
	then
		lasteditor=`anno -list -component 'nmh-last-editor' "$mhmetafile"`
		if [ -n "$lasteditor" ]
		then
			editor=`echo $lasteditor | cut -d ' ' -f 1`
			mheditor=`mhparam "$editor-next"`
			[ -n "$mheditor" ] && return
			mheditor=$lasteditor
			return
		fi
	fi
	if [ -n "$MMHEDITOR" ]
	then
		mheditor=$MMHEDITOR
		return
	fi
	mheditor=`mhparam 'Editor'`
}

save_config()
{
	component="$1"
	newtext="$2"
	anno -delete -number all -component "$component" "$mhmetafile"
	anno -nodate -component "$component" -text "$newtext" "$mhmetafile"
}

get_showproc()
{
	mhshowproc=`mhparam 'listproc'`
	mhshowproc=${mhshowproc:-show}
	return
}

get_realpath()
{
	reldir=`dirname "$1"`
	filename=`basename "$1"`
	cd "$reldir"
	echo "$PWD/$filename"
	cd "$OLDPWD"
}

create()
{
	if [ -z "$mhdraft" ]
	then
		usage 1
	fi
	mhext=`mhparam Metafile-Extension`
	mhext=${mhext:-.meta}
	mhmetafile="$mhdraft""$mhext"
	touch "$mhmetafile"
	if [ -z "$mheditor" ]
	then
		get_editor
	fi
	if [ "$mhuse" -eq 1 ]
	then
		exec $mheditor $mhdraft
		return
	fi
	save_config nmh-mhaltmsg "$mhaltmsg"
	save_config nmh-mhdist "$mhdist"
	save_config nmh-mhfolder "$mhfolder"
	save_config nmh-mhmessages "$mhmessages"
	save_config nmh-mhannotate "$mhannotate"
	save_config nmh-last-editor "$mheditor"
	exec $mheditor "$mhdraft"
}

edit()
{
	if [ $# -eq 0 ]
	then
		get_editor
	else
		mheditor="$@"
	fi

	save_config nmh-last-editor "$mheditor"
	exec $mheditor "$mhdraft"
}

list()
{
	get_showproc
	exec $mhshowproc -file $mhdraft
}

sendfunktion()
{
	export mhaltmsg=`anno -list -component 'nmh-mhaltmsg' "$mhmetafile"`
	export mhdist=`anno -list -component 'nmh-mhdist' "$mhmetafile"`
	export mhfolder=`anno -list -component 'nmh-mhfolder' "$mhmetafile"`
	export mhmessages=`anno -list -component 'nmh-mhmessages' "$mhmetafile"`
	export mhannotate=`anno -list -component 'nmh-mhannotate' "$mhmetafile"`
	send "$@" "$mhdraft" || exit $?
	rm -f "$mhmetafile"
	exit 0
}

delete()
{
	folder -push "$draftfolder" >/dev/null 2>&1
	rmm "$draftfolder" c
	folder -pop >/dev/null 2>&1
	rm "$mhmetafile"
}

attach()
{
	header=`mhparam 'Attachment-Header'`
	while [ -n "$1" ]
	do
		if [ ! -f "$1" ]
		then
			echo "file not found: $1" 1>&2
			shift
			echo -n "folloing files are not attached: " 1>&2
			echo -n "$1" 1>&2
			echo "$@" 1>&2
			exit 1
		fi
		file=`get_realpath "$1"`
		anno -nodate -append -component "$header" -text "$file" "$mhdraft"
		shift
	done
}

alist()
{
	header=`mhparam 'Attachment-Header'`
	header=${header:-Nmh-Attachment}
	anno -list -number -component "$header" "$mhdraft"
}

detach()
{
	header=`mhparam 'Attachment-Header'`
	header=${header:-Nmh-Attachment}
	while [ -n "$1" ]
	do
		anno -delete -component "$header" -number "$1" "$mhdraft"
		if [ $? -ne 0 ]
		then
			echo "can't delet attachment $1" 1>&2
			exit 1
		fi
		shift
	done
}

display()
{
	mhaltmsg=`anno -list -component 'nmh-mhaltmsg' "$mhmetafile"`
	get_showproc
	if [ -z "$mhaltmsg" ]
	then
		echo "no altmsg" 1>&2
		exit 1
	fi
	exec $mhshowproc -file "$mhaltmsg"
}

if [ $# -eq 0 ]
then
	create
	exit
fi

command="$1"
shift

draftfolder=`mhparam draftfolder`
draftfolder=${draftfolder:-+drafts}

mhdraft=`mhpath "$draftfolder" c 2>/dev/null`
if [ -z "$mhdraft" ]
then
	case "$command" in
	-h|-he|-hel|-help)
		usage $#
		;;
	-v|-ve|-ver|-vers|-versi|-versio|-version)
		version $#
		;;
	*)
		echo "no current message in $draftfolder" 1>&2
		usage 1
		;;
	esac
fi
mhext=`mhparam Metafile-Extension`
mhext=${mhext:-.meta}
mhmetafile="$mhdraft""$mhext"
touch "$mhmetafile"


case "$command" in
e|ed|edi|edit)
	edit "$@"
	;;
l|li|lis|list)
	[ $# -eq 0 ] || usage 1
	list
	;;
s|se|sen|send)
	sendfunktion "$@"
	;;
del|dele|delet|delete)
	[ $# -eq 0 ] || usage 1
	delete
	;;
di|dis|disp|displ|displa|display)
	[ $# -eq 0 ] || usage 1
	display
	;;
at|att|atta|attac|attach)
	attach "$@"
	;;
al|ali|alis|alist)
	[ $# -eq 0 ] || usage 1
	alist
	;;
det|deta|detac|detach)
	detach "$@"
	;;
r|re|ref|refi|refil|refile)
	refile -file "$mhdraft" "$@"
	;;
w|wh|who|whom)
	whom "$@" "$mhdraft"
	;;
-h|-he|-hel|-help)
	usage $#
	;;
-v|-ve|-ver|-vers|-versi|-versio|-version)
	version $#
	;;
*)
	usage 1
	;;
esac

Reply via email to