Side-by-side diff
Diffstat (more/less context) (ignore whitespace changes)
4 files changed, 24 insertions, 12 deletions
diff --git a/NEWS b/NEWS
index 50eadb8..f23851e 100644
--- a/NEWS
+++ b/NEWS
@@ -1,13 +1,13 @@
-GNU mailutils NEWS -- history of user-visible changes. 2019-09-03
+GNU mailutils NEWS -- history of user-visible changes. 2019-09-11
Copyright (C) 2002-2019 Free Software Foundation, Inc.
See the end of file for copying conditions.
Please send mailutils bug reports to <>.
Version 3.7.90 (git)
* Use of TLS in pop3d run from inetd
New global configuration statement "tls-mode" configures the TLS for
use in inetd mode.
@@ -18,25 +18,33 @@ Example configuration (pop3s server):
mode inetd;
tls-mode connection;
tls {
ssl-key-file /etc/ssl/key.pem;
ssl-certificate-file /etc/ssl/cert.pem;
* comsatd --test
The --test option takes optional argument: name of the tty or file to
use for reporting.
+* mail
+** fix the semantics of 'hold' and 'keepsave' variables
+** New message type specification ":s"
+Selects messages in state 'saved'.
Version 3.7 - 2019-06-21
* Support for the new mailbox format - dotmail
Dotmail is a replacement for traditional mbox format, proposed by
Kurt Hackenberg. A dotmail mailbox is a single disk file, where
messages are stored sequentially. Each message ends with a single
dot (similar to the format used in the SMTP DATA command). Any dot
appearing at the start of the line is doubled, to prevent it from
being interpreted as end of message marker.
diff --git a/doc/texinfo/programs/mail.texi b/doc/texinfo/programs/mail.texi
index b4c68a1..accd891 100644
--- a/doc/texinfo/programs/mail.texi
+++ b/doc/texinfo/programs/mail.texi
@@ -423,36 +423,38 @@ of
This specifier addresses the message with the given ordinal number
in the mailbox.
@item @var{n}-@var{m}
All messages with ordinal numbers between @var{n} and @var{m}, inclusive.
@item :@var{t}
All messages of type @var{t}, where @var{t} can be any of:
@table @samp
@item d
Deleted messages.
-@item :n
+@item n
New messages.
-@item :o
+@item o
Old messages (any message not in state @samp{read} or @samp{new}).
-@item :r
+@item r
Messages in state @samp{read}.
-@item :u
+@item u
Messages in state @samp{unread}.
-@item :t
+@item t
Selects all tagged messages.
-@item :T
+@item T
Selects all untagged messages.
+@item s
+Selects all messages in state @samp{saved}.
@end table
@item [@var{header}:]/@var{string}[/]
Header match.
Selects all messages that contain header field @var{header} matching
given @var{string}. If the variable @code{regex} is set, the
@var{string} is assumed to be a POSIX regexp. (All comparison is
case-insensitive in either case).
If @var{header}: part is omitted, it is assumed to be @samp{Subject:}.
diff --git a/mail/mailline.c b/mail/mailline.c
index 647cb1e..d6cef37 100644
--- a/mail/mailline.c
+++ b/mail/mailline.c
@@ -681,25 +681,25 @@ folder_generator (const char *text, int state)
free (path);
if (rc)
return NULL;
return filegen_next (&fg);
static char *
msgtype_generator (const char *text, int state)
/* Allowed message types, plus '/'. The latter can folow a colon,
meaning body lookup */
- static char types[] = "dnorTtu/";
+ static char types[] = "dnorsTtu/";
static int i;
char c;
if (!state)
i = 0;
while ((c = types[i]))
if (!text[1] || text[1] == c)
diff --git a/mail/msgset.y b/mail/msgset.y
index 8011dc7..6f31325 100644
--- a/mail/msgset.y
+++ b/mail/msgset.y
@@ -157,25 +157,25 @@ msg : header REGEXP /* /.../ */
$$ = msgset_select (select_body, $1, 0, 0);
if (!$$)
mu_error (_("No applicable messages from {:/%s}"), $1);
| TYPE /* :n, :d, etc */
- if (strchr ("dnorTtu", $1) == NULL)
+ if (strchr ("dnorsTtu", $1) == NULL)
yyerror (_("unknown message type"));
$$ = msgset_select (select_type, (void *)&$1, 0, 0);
if (!$$)
mu_error (_("No messages satisfy :%c"), $1);
| IDENT /* Sender name */
@@ -737,30 +737,32 @@ select_type (mu_message_t msg, void *closure)
mu_message_get_attribute (msg, &attr);
switch (type)
case 'd':
return mu_attribute_is_deleted (attr);
case 'n':
return mu_attribute_is_recent (attr);
case 'o':
return mu_attribute_is_seen (attr);
case 'r':
return mu_attribute_is_read (attr);
- case 'u':
- return !mu_attribute_is_read (attr);
+ case 's':
+ return mu_attribute_is_userflag (attr, MAIL_ATTRIBUTE_SAVED);
case 't':
return mu_attribute_is_userflag (attr, MAIL_ATTRIBUTE_TAGGED);
case 'T':
return !mu_attribute_is_userflag (attr, MAIL_ATTRIBUTE_TAGGED);
+ case 'u':
+ return !mu_attribute_is_read (attr);
return 0;
select_deleted (mu_message_t msg, void *closure MU_ARG_UNUSED)
mu_attribute_t attr= NULL;
int rc;
mu_message_get_attribute (msg, &attr);
rc = mu_attribute_is_deleted (attr);

Return to:

Send suggestions and report system problems to the System administrator.