First, thank you to everyone who has helped develop Mutt! I had been
stuck using Solaris mailx because no other program would let me edit
message headers using vi, until I recently discovered Mutt.
Also, bravo to whomever is responsible for the large speedup in reading
mail files between versions 0.93.2i and 0.95.1i.
Below are a number of questions and suggestions for further
improvements.
AMC
Comments on Mutt 0.95.1i (under Solaris 2.6):
Miscellaneous:
In the pager, next-line and previous-line appear to repaint the
entire screen instead of scrolling it. Scrolling it would be a lot
faster. The same might be true for the index.
The documentation says nothing about the dangers (or lack thereof)
of running multiple instances of Mutt. How about running two Mutts
on different machines accessing the same spool file via NFS?
When Mutt is suspended and resumed, it sometimes ends up in a bad
state. I think the terminal is no longer in non-canonical (raw)
mode, because Mutt doesn't react to my keystrokes until I press
return.
The suspend variable causes Mutt to ignore the susp key (usually
ctrl-Z) the first time I press it, but not the second time. After
this is fixed, check whether Mutt will also ignore the dsusp key
(usually ctrl-Y).
It would be nice to have a function for the index screen that causes
a check for new mail to happen right now (like the inc command of
mailx). One would then have the option of setting mail_check to a
larger (possibly infinite) value.
When Mutt first starts up, the index is scrolled so that the
selection is at the bottom of the window, but it would be nicer
if it were in the middle of the window. Sometimes after I change
folders the index is scrolled so that only the last item is shown,
at the top of the window. Again, it would be nicer if the selected
item started out in the middle of the window.
In the index, half-up and half-down behave strangly near the top and
bottom. Usually, they scroll the viewable region without affecting
the selection, unless the selection is scrolled out of the window,
in which case the selection is moved as little as possible in order
to make it visible. But when the first (for half-up) or last (for
half-down) entry is already visible, then no scrolling happens, and
the first/last entry becomes selected. I think it would make much
more sense if half-down were exactly equivalent to doing next-line
w/2 times, where w is the window size.
Bindings:
<exit> does not work in this context: macro pager X <exit>XXX
There is apparently no way to truly unbind a key. Binding it to
noop does not allow it to fall through to the generic map. I'm
currently working around this by creating bindings that duplicate
the generic bindings.
When I bind "<backspace>", it doesn't work, but when I bind "\cH",
it works. My terminfo entry contains "kbs=\b", so shouldn't the
curses library see character 8 as backspace? (I'm using an xterm
under Solaris 2.6.)
It would be nice if I could override the tty special characters
via bind and macro commands. For example, when I bind \cY to
previous-line (for compatibility with vi), it currently doesn't
work, because ctrl-Y is the dsusp character and therefore suspends
Mutt. It would be nice if Mutt, when it executes the bind and macro
commands, would notice if a character is a tty special character and
reconfigure the tty to disable that character.
Undocumented functions:
index/tag-subthread
Documented but nonexistent functions:
attach/decode-copy
Tabs:
I hate tabs because they're rendered differently in different
environments, so text that looks aligned in one environment will
look misaligned in another. I make it a policy never to use tabs
(except in Makefiles, where it's required). Mutt uses tabs to fold
long header fields, so I edited the source to make it use spaces
instead:
*** sendlib-orig.c Thu Jan 14 23:29:03 1999
--- sendlib.c Thu Jan 14 23:38:18 1999
***************
*** 406,415 ****
tmplen = mutt_strlen (buffer) + mutt_strlen (p->attribute) + 1;
! if (len + tmplen + 2 > 76)
{
! fputs ("\n\t", f);
! len = tmplen + 8;
}
else
{
--- 406,415 ----
tmplen = mutt_strlen (buffer) + mutt_strlen (p->attribute) + 1;
! if (len + tmplen + 2 > 72)
{
! fputs ("\n ", f);
! len = tmplen + 2;
}
else
{
***************
*** 1183,1194 ****
buf[0] = 0;
rfc822_write_address (buf, sizeof (buf), adr);
len = mutt_strlen (buf);
! if (count && linelen + len > 74)
{
if (count)
{
! fputs ("\n\t", fp);
! linelen = len + 8; /* tab is usually about 8 spaces... */
}
}
else
--- 1183,1194 ----
buf[0] = 0;
rfc822_write_address (buf, sizeof (buf), adr);
len = mutt_strlen (buf);
! if (count && linelen + len > 72)
{
if (count)
{
! fputs ("\n ", fp);
! linelen = len + 2;
}
}
else