summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorThomas Roessler <roessler@does-not-exist.org>1999-08-15 11:43:03 +0000
committerThomas Roessler <roessler@does-not-exist.org>1999-08-15 11:43:03 +0000
commitd4c913f7f5de8675216d21975a49b61342600e26 (patch)
treebfff33169d7a683640b8b9bcc26827e37eb810c8
parentd0051659a6b712c4fffa8656fe1cb1fe3927e1aa (diff)
Various changes added over the last week:
- $delete_untag - creation of "application/pgp" messages - an attempt to fix prepare. - Browser format changes
-rw-r--r--Makefile.am4
-rw-r--r--Muttrc185
-rw-r--r--NEWS9
-rw-r--r--README.SECURITY7
-rw-r--r--browser.c120
-rw-r--r--browser.h5
-rw-r--r--commands.c20
-rw-r--r--copy.c11
-rw-r--r--curs_main.c4
-rw-r--r--doc/Makefile.in14
-rw-r--r--doc/manual.sgml166
-rw-r--r--doc/muttrc.man49
-rw-r--r--globals.h6
-rw-r--r--init.c20
-rw-r--r--init.h30
-rw-r--r--main.c3
-rw-r--r--mutt.h7
-rw-r--r--mx.c4
-rw-r--r--pgp.c201
-rw-r--r--pgp.h4
-rw-r--r--pgpinvoke.c15
-rwxr-xr-xprepare2
-rw-r--r--send.c90
23 files changed, 827 insertions, 149 deletions
diff --git a/Makefile.am b/Makefile.am
index 58097e00..a8a76b45 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -150,8 +150,8 @@ update-doc: stamp-doc-rc
(cd doc && make update-doc)
stamp-doc-rc: $(srcdir)/init.h makedoc Muttrc.head
- cpp -D_MAKEDOC -C -I. -I $(srcdir) -include config.h \
- $(srcdir)/init.h | ./makedoc -c | cat Muttrc.head - \
+ cpp $(INCLUDES) $(DEFS) $(CPPFLAGS) -D_MAKEDOC -C \
+ -include config.h $(srcdir)/init.h | ./makedoc -c | cat Muttrc.head - \
> Muttrc
touch stamp-doc-rc
diff --git a/Muttrc b/Muttrc
index 3a4d1425..447ee2e4 100644
--- a/Muttrc
+++ b/Muttrc
@@ -425,11 +425,23 @@ macro pager <f1> "!less /usr/local/doc/mutt/manual.txt\n" "Show Mutt documenta
# no, messages marked for deletion will be kept in the mailbox.
#
#
-# set dotlock_program="BINDIR/mutt_dotlock"
+# set delete_untag=yes
+#
+# Name: delete_untag
+# Type: boolean
+# Default: yes
+#
+#
+# If this option is set, mutt will untag messages when marking them
+# for deletion. This applies when you either explicitly delete a message,
+# or when you save it to another folder.
+#
+#
+# set dotlock_program="/usr/local/bin/mutt_dotlock"
#
# Name: dotlock_program
# Type: path
-# Default: "BINDIR/mutt_dotlock"
+# Default: "/usr/local/bin/mutt_dotlock"
#
#
# Contains the path of the mutt_dotlock (8) binary to be used by
@@ -560,17 +572,18 @@ macro pager <f1> "!less /usr/local/doc/mutt/manual.txt\n" "Show Mutt documenta
# during the `set' command.
#
#
-# set folder_format="%N %F %2l %-8.8u %-8.8g %8s %d %f"
+# set folder_format="%2C %t %N %F %2l %-8.8u %-8.8g %8s %d %f"
#
# Name: folder_format
# Type: string
-# Default: "%N %F %2l %-8.8u %-8.8g %8s %d %f"
+# Default: "%2C %t %N %F %2l %-8.8u %-8.8g %8s %d %f"
#
#
# This variable allows you to customize the file browser display to your
# personal taste. This string is similar to ``index_format'', but has
# its own set of printf()-like sequences:
#
+# %C current file number
# %d date/time folder was last modified
# %f filename
# %F file permissions
@@ -578,6 +591,7 @@ macro pager <f1> "!less /usr/local/doc/mutt/manual.txt\n" "Show Mutt documenta
# %l number of hard links
# %N N if folder has new mail, blank otherwise
# %s size in bytes
+# %t * if the file is tagged, blank otherwise
# %u owner name (or numeric uid, if missing)
# %>X right justify the rest of the string and pad
# with character "X"
@@ -795,6 +809,75 @@ macro pager <f1> "!less /usr/local/doc/mutt/manual.txt\n" "Show Mutt documenta
# list.
#
#
+# set imap_checkinterval=0
+#
+# Name: imap_checkinterval
+# Type: number
+# Default: 0
+#
+#
+# This variable configures how often (in seconds) IMAP should look for
+# new mail.
+#
+#
+# set imap_list_subscribed=no
+#
+# Name: imap_list_subscribed
+# Type: boolean
+# Default: no
+#
+#
+# This variable configures whether IMAP folder browsing will look for
+# only subscribed folders or all folders. This can be toggled in the
+# IMAP browser with the toggle-subscribed command.
+#
+#
+# set imap_user=""
+#
+# Name: imap_user
+# Type: string
+# Default: ""
+#
+#
+# Your login name on the IMAP server.
+#
+# This variable defaults to your user name on the local machine.
+#
+#
+# set imap_pass=""
+#
+# Name: imap_pass
+# Type: string
+# Default: ""
+#
+#
+# Specifies the password for your IMAP account. If unset, Mutt will
+# prompt you for your password when you invoke the fetch-mail function.
+# Warning: you should only use this option when you are on a
+# fairly secure machine, because the superuser can read your muttrc even
+# if you are the only one who can read the file.
+#
+#
+# set imap_passive=yes
+#
+# Name: imap_passive
+# Type: boolean
+# Default: yes
+#
+#
+# When set, mutt will not open new IMAP connections to check for new
+# mail. Mutt will only check for new mail over existing IMAP
+# connections. This is useful if you don't want to be prompted to
+# user/password pairs on mutt invocation, or if opening the connection
+# is slow.
+#
+#
+# set imap_home_namespace=""
+#
+# Name: imap_home_namespace
+# Type: string
+# Default: ""
+#
# set implicit_autoview=no
#
# Name: implicit_autoview
@@ -1460,6 +1543,24 @@ macro pager <f1> "!less /usr/local/doc/mutt/manual.txt\n" "Show Mutt documenta
# `reverse-'.
#
#
+# set pgp_create_traditional=no
+#
+# Name: pgp_create_traditional
+# Type: quadoption
+# Default: no
+#
+#
+# This option controls whether Mutt generates old-style PGP encrypted
+# or signed messages under certain circumstances.
+#
+# Note that PGP/MIME will be used automatically for messages which have
+# a character set different from us-ascii, or which consist of more than
+# a single MIME part.
+#
+# Also note that using the old-style PGP message format is strongly
+# deprecated.
+#
+#
# set pgp_decode_command=""
#
# Name: pgp_decode_command
@@ -1522,6 +1623,17 @@ macro pager <f1> "!less /usr/local/doc/mutt/manual.txt\n" "Show Mutt documenta
# This command is used to decrypt a PGP/MIME encrypted message.
#
#
+# set pgp_clearsign_command=""
+#
+# Name: pgp_clearsign_command
+# Type: string
+# Default: ""
+#
+#
+# This format is used to create a "clearsigned" old-style PGP attachment.
+# Note that the use of this format is strongly deprecated.
+#
+#
# set pgp_sign_command=""
#
# Name: pgp_sign_command
@@ -1668,6 +1780,71 @@ macro pager <f1> "!less /usr/local/doc/mutt/manual.txt\n" "Show Mutt documenta
# messages to an external Unix command.
#
#
+# set pop_delete=no
+#
+# Name: pop_delete
+# Type: boolean
+# Default: no
+#
+#
+# If set, Mutt will delete successfully downloaded messages from the POP
+# server when using the fetch-mail function. When unset, Mutt will
+# download messages but also leave them on the POP server.
+#
+#
+# set pop_host=""
+#
+# Name: pop_host
+# Type: string
+# Default: ""
+#
+#
+# The name or address of your POP3 server.
+#
+#
+# set pop_port=110
+#
+# Name: pop_port
+# Type: number
+# Default: 110
+#
+#
+# This variable specifies which port your POP server is listening on.
+#
+#
+# set pop_last=no
+#
+# Name: pop_last
+# Type: boolean
+# Default: no
+#
+#
+# If this variable is set, mutt will try to use the "LAST" POP command
+# for retrieving only unread messages from the POP server.
+#
+#
+# set pop_user=""
+#
+# Name: pop_user
+# Type: string
+# Default: ""
+#
+#
+# Your login name on the POP3 server.
+#
+# Defaults to your login name on the local system.
+#
+#
+# set pop_pass=""
+#
+# Name: pop_pass
+# Type: string
+# Default: ""
+#
+#
+# Your password on the POP3 server.
+#
+#
# set post_indent_string=""
#
# Name: post_indent_string
diff --git a/NEWS b/NEWS
index 979503d2..1de10e9f 100644
--- a/NEWS
+++ b/NEWS
@@ -1,6 +1,15 @@
Major changes since 0.96.3
--------------------------
+- There is a new option $delete_untag. Former mutt versions used to
+ untag messages when you save them, but leave them tagged whe you
+ mark them for deletion. $delete_untag controls _both_ cases,
+ leading to more uniform behaviour.
+
+- The $weed option applies to the decode-save and decode-copy
+ functions. Think of these functions as something along the lines
+ of "save to file".
+
- The master source of the configuration option reference has been
moved from the SGML document into special comments in init.h.
"makedoc" is used to extract this information into a new,
diff --git a/README.SECURITY b/README.SECURITY
index c2446804..40b8f60a 100644
--- a/README.SECURITY
+++ b/README.SECURITY
@@ -56,10 +56,5 @@ For example, a safe version of the mailcap statement above could
look like this:
> text/test-mailcap-bug; cat %s; copiousoutput; test=charset=%{charset} \
-> && test "`echo $charset | tr '[A-Z]' '[a-z]'`" != iso-8859-1
+> && test "`echo \"$charset\" | tr '[A-Z]' '[a-z]'`" != iso-8859-1
-The "charset=%{charset}" assignment is risk-free since mutt performs
-the necessary quoting steps here. Using it inside the backtick
-expansion is safe, too, since the variable's value is not itself
-subject to any further expansion (but note that it _is_ subject to
-word splitting).
diff --git a/browser.c b/browser.c
index 932bf40b..1eabf532 100644
--- a/browser.c
+++ b/browser.c
@@ -47,9 +47,8 @@ static struct mapping_t FolderHelp[] = {
typedef struct folder_t
{
- const char *name;
- const struct stat *f;
- int new;
+ struct folder_file *ff;
+ int num;
} FOLDER;
static char LastDir[_POSIX_PATH_MAX] = "";
@@ -63,6 +62,7 @@ static void destroy_state (struct browser_state *state)
{
safe_free ((void **) &((state->entry)[c].name));
safe_free ((void **) &((state->entry)[c].desc));
+ safe_free ((void **) &((state->entry)[c].st));
}
#ifdef USE_IMAP
safe_free ((void **) &state->folder);
@@ -146,12 +146,17 @@ folder_format_str (char *dest, size_t destlen, char op, const char *src,
switch (op)
{
+ case 'C':
+ snprintf (tmp, sizeof (tmp), "%%%sd", fmt);
+ snprintf (dest, destlen, tmp, folder->num + 1);
+ break;
+
case 'd':
- if (folder->f != NULL)
+ if (folder->ff->st != NULL)
{
tnow = time (NULL);
- t_fmt = tnow - folder->f->st_mtime < 31536000 ? "%b %d %H:%M" : "%b %d %Y";
- strftime (date, sizeof (date), t_fmt, localtime (&folder->f->st_mtime));
+ t_fmt = tnow - folder->ff->st->st_mtime < 31536000 ? "%b %d %H:%M" : "%b %d %Y";
+ strftime (date, sizeof (date), t_fmt, localtime (&folder->ff->st->st_mtime));
snprintf (tmp, sizeof (tmp), "%%%ss", fmt);
snprintf (dest, destlen, tmp, date);
}
@@ -161,38 +166,40 @@ folder_format_str (char *dest, size_t destlen, char op, const char *src,
snprintf (dest, destlen, tmp, "");
}
break;
+
case 'f':
- strfcpy (fn, folder->name, sizeof(fn));
- if (folder->f != NULL)
+ strfcpy (fn, folder->ff->name, sizeof(fn));
+ if (folder->ff->st != NULL)
{
- strcat (fn, S_ISLNK (folder->f->st_mode) ? "@" :
- (S_ISDIR (folder->f->st_mode) ? "/" :
- ((folder->f->st_mode & S_IXUSR) != 0 ? "*" : "")));
+ strcat (fn, S_ISLNK (folder->ff->st->st_mode) ? "@" :
+ (S_ISDIR (folder->ff->st->st_mode) ? "/" :
+ ((folder->ff->st->st_mode & S_IXUSR) != 0 ? "*" : "")));
}
snprintf (tmp, sizeof (tmp), "%%%ss", fmt);
snprintf (dest, destlen, tmp, fn);
break;
+
case 'F':
- if (folder->f != NULL)
+ if (folder->ff->st != NULL)
{
sprintf (permission, "%c%c%c%c%c%c%c%c%c%c",
- S_ISDIR(folder->f->st_mode) ? 'd' : (S_ISLNK(folder->f->st_mode) ? 'l' : '-'),
- (folder->f->st_mode & S_IRUSR) != 0 ? 'r': '-',
- (folder->f->st_mode & S_IWUSR) != 0 ? 'w' : '-',
- (folder->f->st_mode & S_ISUID) != 0 ? 's' : (folder->f->st_mode & S_IXUSR) != 0 ? 'x': '-',
- (folder->f->st_mode & S_IRGRP) != 0 ? 'r' : '-',
- (folder->f->st_mode & S_IWGRP) != 0 ? 'w' : '-',
- (folder->f->st_mode & S_ISGID) != 0 ? 's' : (folder->f->st_mode & S_IXGRP) != 0 ? 'x': '-',
- (folder->f->st_mode & S_IROTH) != 0 ? 'r' : '-',
- (folder->f->st_mode & S_IWOTH) != 0 ? 'w' : '-',
- (folder->f->st_mode & S_ISVTX) != 0 ? 't' : (folder->f->st_mode & S_IXOTH) != 0 ? 'x': '-');
+ S_ISDIR(folder->ff->st->st_mode) ? 'd' : (S_ISLNK(folder->ff->st->st_mode) ? 'l' : '-'),
+ (folder->ff->st->st_mode & S_IRUSR) != 0 ? 'r': '-',
+ (folder->ff->st->st_mode & S_IWUSR) != 0 ? 'w' : '-',
+ (folder->ff->st->st_mode & S_ISUID) != 0 ? 's' : (folder->ff->st->st_mode & S_IXUSR) != 0 ? 'x': '-',
+ (folder->ff->st->st_mode & S_IRGRP) != 0 ? 'r' : '-',
+ (folder->ff->st->st_mode & S_IWGRP) != 0 ? 'w' : '-',
+ (folder->ff->st->st_mode & S_ISGID) != 0 ? 's' : (folder->ff->st->st_mode & S_IXGRP) != 0 ? 'x': '-',
+ (folder->ff->st->st_mode & S_IROTH) != 0 ? 'r' : '-',
+ (folder->ff->st->st_mode & S_IWOTH) != 0 ? 'w' : '-',
+ (folder->ff->st->st_mode & S_ISVTX) != 0 ? 't' : (folder->ff->st->st_mode & S_IXOTH) != 0 ? 'x': '-');
snprintf (tmp, sizeof (tmp), "%%%ss", fmt);
snprintf (dest, destlen, tmp, permission);
}
else
{
#ifdef USE_IMAP
- if (strchr(folder->name, '{'))
+ if (strchr(folder->ff->name, '{'))
{
snprintf (tmp, sizeof (tmp), "%%%ss", fmt);
snprintf (dest, destlen, tmp, "IMAP");
@@ -200,10 +207,11 @@ folder_format_str (char *dest, size_t destlen, char op, const char *src,
#endif
}
break;
+
case 'g':
- if (folder->f != NULL)
+ if (folder->ff->st != NULL)
{
- if ((gr = getgrgid (folder->f->st_gid)))
+ if ((gr = getgrgid (folder->ff->st->st_gid)))
{
snprintf (tmp, sizeof (tmp), "%%%ss", fmt);
snprintf (dest, destlen, tmp, gr->gr_name);
@@ -211,7 +219,7 @@ folder_format_str (char *dest, size_t destlen, char op, const char *src,
else
{
snprintf (tmp, sizeof (tmp), "%%%sld", fmt);
- snprintf (dest, destlen, tmp, folder->f->st_gid);
+ snprintf (dest, destlen, tmp, folder->ff->st->st_gid);
}
}
else
@@ -220,11 +228,12 @@ folder_format_str (char *dest, size_t destlen, char op, const char *src,
snprintf (dest, destlen, tmp, "");
}
break;
+
case 'l':
- if (folder->f != NULL)
+ if (folder->ff->st != NULL)
{
snprintf (tmp, sizeof (tmp), "%%%sd", fmt);
- snprintf (dest, destlen, tmp, folder->f->st_nlink);
+ snprintf (dest, destlen, tmp, folder->ff->st->st_nlink);
}
else
{
@@ -232,15 +241,17 @@ folder_format_str (char *dest, size_t destlen, char op, const char *src,
snprintf (dest, destlen, tmp, "");
}
break;
+
case 'N':
snprintf (tmp, sizeof (tmp), "%%%sc", fmt);
- snprintf (dest, destlen, tmp, folder->new ? 'N' : ' ');
+ snprintf (dest, destlen, tmp, folder->ff->is_new ? 'N' : ' ');
break;
+
case 's':
- if (folder->f != NULL)
+ if (folder->ff->st != NULL)
{
snprintf (tmp, sizeof (tmp), "%%%sld", fmt);
- snprintf (dest, destlen, tmp, (long) folder->f->st_size);
+ snprintf (dest, destlen, tmp, (long) folder->ff->st->st_size);
}
else
{
@@ -248,10 +259,16 @@ folder_format_str (char *dest, size_t destlen, char op, const char *src,
snprintf (dest, destlen, tmp, "");
}
break;
+
+ case 't':
+ snprintf (tmp, sizeof (tmp), "%%%sc", fmt);
+ snprintf (dest, destlen, tmp, folder->ff->tagged ? '*' : ' ');
+ break;
+
case 'u':
- if (folder->f != NULL)
+ if (folder->ff->st != NULL)
{
- if ((pw = getpwuid (folder->f->st_uid)))
+ if ((pw = getpwuid (folder->ff->st->st_uid)))
{
snprintf (tmp, sizeof (tmp), "%%%ss", fmt);
snprintf (dest, destlen, tmp, pw->pw_name);
@@ -259,7 +276,7 @@ folder_format_str (char *dest, size_t destlen, char op, const char *src,
else
{
snprintf (tmp, sizeof (tmp), "%%%sld", fmt);
- snprintf (dest, destlen, tmp, folder->f->st_uid);
+ snprintf (dest, destlen, tmp, folder->ff->st->st_uid);
}
}
else
@@ -268,6 +285,11 @@ folder_format_str (char *dest, size_t destlen, char op, const char *src,
snprintf (dest, destlen, tmp, "");
}
break;
+
+ default:
+ snprintf (tmp, sizeof (tmp), "%%%sc", fmt);
+ snprintf (dest, destlen, tmp, op);
+ break;
}
return (src);
}
@@ -276,14 +298,6 @@ static void add_folder (MUTTMENU *m, struct browser_state *state,
const char *name, const struct stat *s, int new)
{
char buffer[_POSIX_PATH_MAX + SHORT_STRING];
- FOLDER folder;
-
- folder.name = name;
- folder.f = s;
- folder.new = new;
- mutt_FormatString (buffer, sizeof (buffer), NONULL(FolderFormat),
- folder_format_str, (unsigned long) &folder,
- M_FORMAT_ARROWCURSOR);
if (state->entrylen == state->entrymax)
{
@@ -296,10 +310,15 @@ static void add_folder (MUTTMENU *m, struct browser_state *state,
if (s != NULL)
{
- (state->entry)[state->entrylen].mode = s->st_mode;
- (state->entry)[state->entrylen].mtime = s->st_mtime;
- (state->entry)[state->entrylen].size = s->st_size;
+ (state->entry)[state->entrylen].mode = s->st_mode;
+ (state->entry)[state->entrylen].mtime = s->st_mtime;
+ (state->entry)[state->entrylen].size = s->st_size;
+
+ (state->entry)[state->entrylen].st = safe_malloc (sizeof (struct stat));
+ memcpy ((state->entry)[state->entrylen].st, s, sizeof (struct stat));
}
+
+ (state->entry)[state->entrylen].is_new = new;
(state->entry)[state->entrylen].name = safe_strdup (name);
(state->entry)[state->entrylen].desc = safe_strdup (buffer);
#ifdef USE_IMAP
@@ -423,10 +442,13 @@ int select_file_search (MUTTMENU *menu, regex_t *re, int n)
void folder_entry (char *s, size_t slen, MUTTMENU *menu, int num)
{
- snprintf (s, slen, "%2d %c %s",
- num + 1,
- ((struct folder_file *) menu->data)[num].tagged ? '*' : ' ',
- ((struct folder_file *) menu->data)[num].desc);
+ FOLDER folder;
+
+ folder.ff = &((struct folder_file *) menu->data)[num];
+ folder.num = num;
+
+ mutt_FormatString (s, slen, NONULL(FolderFormat), folder_format_str,
+ (unsigned long) &folder, M_FORMAT_ARROWCURSOR);
}
static void init_menu (struct browser_state *state, MUTTMENU *menu, char *title,
diff --git a/browser.h b/browser.h
index b8e0cd45..5fd2928b 100644
--- a/browser.h
+++ b/browser.h
@@ -23,14 +23,17 @@
struct folder_file
{
mode_t mode;
- time_t mtime;
off_t size;
+ time_t mtime;
+ struct stat *st;
+
char *name;
char *desc;
#ifdef USE_IMAP
short notfolder;
#endif
unsigned tagged : 1;
+ unsigned is_new : 1;
};
struct browser_state
diff --git a/commands.c b/commands.c
index 40228cc4..22aee3cc 100644
--- a/commands.c
+++ b/commands.c
@@ -477,7 +477,7 @@ void mutt_display_address (ENVELOPE *env)
mutt_message ("%s: %s", pfx, buf);
}
-static void set_copy_flags(HEADER *hdr, int decode, int decrypt, int *cmflags, int *chflags)
+static void set_copy_flags (HEADER *hdr, int decode, int decrypt, int *cmflags, int *chflags)
{
*cmflags = 0;
*chflags = CH_UPDATE_LEN;
@@ -495,27 +495,37 @@ static void set_copy_flags(HEADER *hdr, int decode, int decrypt, int *cmflags, i
}
#endif
- if(decode)
+ if (decode)
{
*chflags = CH_XMIT | CH_MIME | CH_TXTPLAIN;
*cmflags = M_CM_DECODE | M_CM_CHARCONV;
}
+ /* respect $weed only if decode doesn't kick in
+ * for decrypt.
+ */
+
+ if (decode && !decrypt && option (OPTWEED))
+ {
+ *chflags |= CH_WEED;
+ *cmflags |= M_CM_WEED;
+ }
}
static void _mutt_save_message (HEADER *h, CONTEXT *ctx, int delete, int decode, int decrypt)
{
int cmflags, chflags;
- set_copy_flags(h, decode, decrypt, &cmflags, &chflags);
+ set_copy_flags (h, decode, decrypt, &cmflags, &chflags);
- if (decode || decrypt)
+ if (decode || decrypt)
mutt_parse_mime_message (Context, h);
if (mutt_append_message (ctx, Context, h, cmflags, chflags) == 0 && delete)
{
mutt_set_flag (Context, h, M_DELETE, 1);
- mutt_set_flag (Context, h, M_TAG, 0);
+ if (option (OPTDELETEUNTAG))
+ mutt_set_flag (Context, h, M_TAG, 0);
}
}
diff --git a/copy.c b/copy.c
index fe6b35aa..c6b60925 100644
--- a/copy.c
+++ b/copy.c
@@ -45,6 +45,7 @@ mutt_copy_hdr (FILE *in, FILE *out, long off_start, long off_end, int flags,
const char *prefix)
{
int from = 0;
+ int this_is_from;
int ignore = 0;
char buf[STRING]; /* should be long enough to get most fields in one pass */
char *nl;
@@ -136,16 +137,19 @@ mutt_copy_hdr (FILE *in, FILE *out, long off_start, long off_end, int flags,
if (nl && buf[0] != ' ' && buf[0] != '\t')
{
ignore = 1;
+ this_is_from = 0;
if (!from && mutt_strncmp ("From ", buf, 5) == 0)
{
if ((flags & CH_FROM) == 0)
continue;
- from = 1;
+ this_is_from = from = 1;
}
else if (buf[0] == '\n' || (buf[0] == '\r' && buf[1] == '\n'))
break; /* end of header */
- if ((flags & CH_WEED) &&
+ /* note: CH_FROM takes precedence over header weeding. */
+ if (!((flags & CH_FROM) && (flags & CH_FORCE_FROM) && this_is_from) &&
+ (flags & CH_WEED) &&
mutt_matches_ignore (buf, Ignore) &&
!mutt_matches_ignore (buf, UnIgnore))
continue;
@@ -262,6 +266,7 @@ mutt_copy_hdr (FILE *in, FILE *out, long off_start, long off_end, int flags,
/* flags
CH_DECODE RFC2047 header decoding
CH_FROM retain the "From " message separator
+ CH_FORCE_FROM give CH_FROM precedence over CH_WEED
CH_MIME ignore MIME fields
CH_NOLEN don't write Content-Length: and Lines:
CH_NONEWLINE don't output a newline after the header
@@ -606,7 +611,7 @@ _mutt_append_message (CONTEXT *dest, FILE *fpin, CONTEXT *src, HEADER *hdr,
if ((msg = mx_open_new_message (dest, hdr, (src->magic == M_MBOX || src->magic == M_MMDF || src->magic == M_KENDRA) ? 0 : M_ADD_FROM)) == NULL)
return -1;
if (dest->magic == M_MBOX || dest->magic == M_MMDF || dest->magic == M_KENDRA)
- chflags |= CH_FROM;
+ chflags |= CH_FROM | CH_FORCE_FROM;
chflags |= (dest->magic == M_MAILDIR ? CH_NOSTATUS : CH_UPDATE);
r = _mutt_copy_message (msg->fp, fpin, hdr, body, flags, chflags);
if (mx_commit_message (msg, dest) != 0)
diff --git a/curs_main.c b/curs_main.c
index e876a8ad..3634caf5 100644
--- a/curs_main.c
+++ b/curs_main.c
@@ -1440,11 +1440,15 @@ int mutt_index_menu (void)
if (tag)
{
mutt_tag_set_flag (M_DELETE, 1);
+ if (option (OPTDELETEUNTAG))
+ mutt_tag_set_flag (M_TAG, 0);
menu->redraw = REDRAW_INDEX;
}
else
{
mutt_set_flag (Context, CURHDR, M_DELETE, 1);
+ if (option (OPTDELETEUNTAG))
+ mutt_set_flag (Context, CURHDR, M_TAG, 0);
if (option (OPTRESOLVE))
{
if ((menu->current = ci_next_undeleted (menu->current)) == -1)
diff --git a/doc/Makefile.in b/doc/Makefile.in
index 552ab471..2edc9ad4 100644
--- a/doc/Makefile.in
+++ b/doc/Makefile.in
@@ -13,6 +13,7 @@ mandir=@mandir@
sharedir=@sharedir@
srcdir=@srcdir@
docdir=@docdir@
+includedir = @includedir@
top_srcdir=@top_srcdir@
top_builddir=..
VPATH=@srcdir@
@@ -25,6 +26,13 @@ CFLAGS=@CFLAGS@ -DSHAREDIR=\"$(sharedir)\" $(XCPPFLAGS)
LDFLAGS=@LDFLAGS@
subdir = doc
+CPPFLAGS = @CPPFLAGS@
+
+DEFS=-DSHAREDIR=\"$(sharedir)\" -DSYSCONFDIR=\"$(sysconfdir)\" \
+ -DBINDIR=\"$(bindir)\" -DHAVE_CONFIG_H=1
+INCLUDES=-I. -I$(includedir) -I$(top_srcdir)
+
+MAKEDOC_CPP=cpp $(INCLUDES) $(DEFS) $(CPPFLAGS) -D_MAKEDOC -C -include ../config.h
DISTFILES = Makefile.in dotlock.man \
mutt.man \
@@ -127,16 +135,14 @@ at=@
update-doc: ../makedoc stamp-doc-sgml stamp-doc-man
stamp-doc-man: ../makedoc $(top_srcdir)/init.h muttrc.man.head muttrc.man.tail
- cpp -D_MAKEDOC -C -I.. -I $(top_srcdir) -include ../config.h \
- $(top_srcdir)/init.h | ../makedoc -m | \
+ $(MAKEDOC_CPP) $(top_srcdir)/init.h | ../makedoc -m | \
cat $(srcdir)/muttrc.man.head - $(srcdir)/muttrc.man.tail\
> muttrc.man
touch stamp-doc-man
stamp-doc-sgml: ../makedoc $(top_srcdir)/init.h manual.sgml.head manual.sgml.tail
( sed -e "s/$(at)VERSION$(at)/`cat $(top_srcdir)/VERSION`/" manual.sgml.head ;\
- cpp -D_MAKEDOC -C -I.. -I $(top_srcdir) -include ../config.h \
- $(top_srcdir)/init.h | ../makedoc -s ) | \
+ $(MAKEDOC_CPP) $(top_srcdir)/init.h | ../makedoc -s ) | \
cat - $(srcdir)/manual.sgml.tail > manual.sgml
touch stamp-doc-sgml
diff --git a/doc/manual.sgml b/doc/manual.sgml
index 78101512..b435b290 100644
--- a/doc/manual.sgml
+++ b/doc/manual.sgml
@@ -2910,10 +2910,21 @@ deleting will automatically be purged without prompting. If set to
<em>no</em>, messages marked for deletion will be kept in the mailbox.
+<sect2>delete&lowbar;untag<label id="delete_untag">
+<p>
+Type: boolean<newline>
+Default: yes
+
+<p>
+If this option is <em>set</em>, mutt will untag messages when marking them
+for deletion. This applies when you either explicitly delete a message,
+or when you save it to another folder.
+
+
<sect2>dotlock&lowbar;program<label id="dotlock_program">
<p>
Type: path<newline>
-Default: &dquot;BINDIR/mutt&lowbar;dotlock&dquot;
+Default: &dquot;/usr/local/bin/mutt&lowbar;dotlock&dquot;
<p>
Contains the path of the mutt&lowbar;dotlock (8) binary to be used by
@@ -3038,7 +3049,7 @@ during the `set' command.
<sect2>folder&lowbar;format<label id="folder_format">
<p>
Type: string<newline>
-Default: &dquot;&percnt;N &percnt;F &percnt;2l &percnt;-8.8u &percnt;-8.8g &percnt;8s &percnt;d &percnt;f&dquot;
+Default: &dquot;&percnt;2C &percnt;t &percnt;N &percnt;F &percnt;2l &percnt;-8.8u &percnt;-8.8g &percnt;8s &percnt;d &percnt;f&dquot;
<p>
This variable allows you to customize the file browser display to your
@@ -3047,6 +3058,7 @@ its own set of printf()-like sequences:
<p>
<tscreen><verb>
+%C current file number
%d date/time folder was last modified
%f filename
%F file permissions
@@ -3054,6 +3066,7 @@ its own set of printf()-like sequences:
%l number of hard links
%N N if folder has new mail, blank otherwise
%s size in bytes
+%t * if the file is tagged, blank otherwise
%u owner name (or numeric uid, if missing)
%>X right justify the rest of the string and pad
with character "X"
@@ -3256,6 +3269,69 @@ function; <em>group-reply</em> will reply to both the sender and the
list.
+<sect2>imap&lowbar;checkinterval<label id="imap_checkinterval">
+<p>
+Type: number<newline>
+Default: 0
+
+<p>
+This variable configures how often (in seconds) IMAP should look for
+new mail.
+
+
+<sect2>imap&lowbar;list&lowbar;subscribed<label id="imap_list_subscribed">
+<p>
+Type: boolean<newline>
+Default: no
+
+<p>
+This variable configures whether IMAP folder browsing will look for
+only subscribed folders or all folders. This can be toggled in the
+IMAP browser with the <em>toggle-subscribed</em> command.
+
+
+<sect2>imap&lowbar;user<label id="imap_user">
+<p>
+Type: string<newline>
+Default: &dquot;&dquot;
+
+<p>
+Your login name on the IMAP server.
+<p>
+This variable defaults to your user name on the local machine.
+
+
+<sect2>imap&lowbar;pass<label id="imap_pass">
+<p>
+Type: string<newline>
+Default: &dquot;&dquot;
+
+<p>
+Specifies the password for your IMAP account. If unset, Mutt will
+prompt you for your password when you invoke the fetch-mail function.
+<bf>Warning</bf>: you should only use this option when you are on a
+fairly secure machine, because the superuser can read your muttrc even
+if you are the only one who can read the file.
+
+
+<sect2>imap&lowbar;passive<label id="imap_passive">
+<p>
+Type: boolean<newline>
+Default: yes
+
+<p>
+When set, mutt will not open new IMAP connections to check for new
+mail. Mutt will only check for new mail over existing IMAP
+connections. This is useful if you don't want to be prompted to
+user/password pairs on mutt invocation, or if opening the connection
+is slow.
+
+
+<sect2>imap&lowbar;home&lowbar;namespace<label id="imap_home_namespace">
+<p>
+Type: string<newline>
+Default: &dquot;&dquot;
+
<sect2>implicit&lowbar;autoview<label id="implicit_autoview">
<p>
Type: boolean<newline>
@@ -3883,6 +3959,23 @@ If you prefer reverse order of the above values, prefix it with
`reverse-'.
+<sect2>pgp&lowbar;create&lowbar;traditional