Added a delete-and-expunge command.
This command is analogous to the delete command, except that it also
expunges only the {current,given} message. It also takes an optional
--quiet parameter, because I plan to use it internally and don't want
spew on success. Perhaps there's a better way to accomplish this...
I couldn't figure out how the existing delete command is supposed to
work internally. The logic behind the delete-and-expunge command is as
follows:
We always update both the message list and the display. So model the
command that will do much of the work,
owl_function_delete_and_expunge_message, off of owl_function_expunge.
owl_function_delete_and_expunge_message takes one argument, which is the
position of the item in the message list. It deletes it from the
message list with a new function
owl_messagelist_delete_and_expunge_element. This calls delete on the
underlying owl_list, so the errors (if any) on an index that is too big
might be unhelpful.
owl_function_delete_and_expunge_cur and
owl_function_delete_and_expunge_by_id both get the index of the relevant
message (and a function owl_messagelist_get_index_by_id is added to
messagelist.c to help the latter). They owl_function_error if no such
message exists, and conditionally owl_function_makemsg on success.