Commit 9bf6d74e authored by Kevin J. McCarthy's avatar Kevin J. McCarthy

Compress patch from the neomutt repository.

With the following changes:
- po/de.po changes trimmed to just the compress additions.

- Move the sample muttrc to contrib, and add it to the Makefile.am so it is
  distributed.  Remove the sample vimrc.

- Remove extra fluff from manual.

Thanks to Roland Rosenfeld for the original patch, and to the NeoMutt
team for their work cleaning up the patch.
parent b17cd673
......@@ -54,7 +54,7 @@ DEFS=-DPKGDATADIR=\"$(pkgdatadir)\" -DSYSCONFDIR=\"$(sysconfdir)\" \
AM_CPPFLAGS=-I. -I$(top_srcdir) $(IMAP_INCLUDES) $(GPGME_CFLAGS) -Iintl
EXTRA_mutt_SOURCES = account.c bcache.c crypt-gpgme.c crypt-mod-pgp-classic.c \
EXTRA_mutt_SOURCES = account.c bcache.c compress.c crypt-gpgme.c crypt-mod-pgp-classic.c \
crypt-mod-pgp-gpgme.c crypt-mod-smime-classic.c \
crypt-mod-smime-gpgme.c dotlock.c gnupgparse.c hcache.c md5.c \
mutt_idna.c mutt_sasl.c mutt_socket.c mutt_ssl.c mutt_ssl_gnutls.c \
......@@ -65,7 +65,7 @@ EXTRA_mutt_SOURCES = account.c bcache.c crypt-gpgme.c crypt-mod-pgp-classic.c \
EXTRA_DIST = COPYRIGHT GPL OPS OPS.PGP OPS.CRYPT OPS.SMIME TODO UPDATING \
configure account.h \
attach.h buffy.h charset.h copy.h crypthash.h dotlock.h functions.h gen_defs \
attach.h buffy.h charset.h compress.h copy.h crypthash.h dotlock.h functions.h gen_defs \
globals.h hash.h history.h init.h keymap.h mutt_crypt.h \
mailbox.h mapping.h md5.h mime.h mutt.h mutt_curses.h mutt_menu.h \
mutt_regex.h mutt_sasl.h mutt_socket.h mutt_ssl.h mutt_tunnel.h \
......
......@@ -837,6 +837,16 @@ int mutt_save_message (HEADER *h, int delete,
if (mx_open_mailbox (buf, MUTT_APPEND, &ctx) != NULL)
{
#ifdef USE_COMPRESSED
/* If we're saving to a compressed mailbox, the stats won't be updated
* until the next open. Until then, improvise. */
BUFFY *cm = NULL;
if (ctx.compress_info)
cm = mutt_find_mailbox (ctx.realpath);
/* We probably haven't been opened yet */
if (cm && (cm->msg_count == 0))
cm = NULL;
#endif
if (h)
{
if (_mutt_save_message(h, &ctx, delete, decode, decrypt) != 0)
......@@ -844,6 +854,16 @@ int mutt_save_message (HEADER *h, int delete,
mx_close_mailbox (&ctx, NULL);
return -1;
}
#ifdef USE_COMPRESSED
if (cm)
{
cm->msg_count++;
if (!h->read)
cm->msg_unread++;
if (h->flagged)
cm->msg_flagged++;
}
#endif
}
else
{
......@@ -858,6 +878,17 @@ int mutt_save_message (HEADER *h, int delete,
mx_close_mailbox (&ctx, NULL);
return -1;
}
#ifdef USE_COMPRESSED
if (cm)
{
HEADER *h = Context->hdrs[Context->v2r[i]];
cm->msg_count++;
if (!h->read)
cm->msg_unread++;
if (h->flagged)
cm->msg_flagged++;
}
#endif
}
}
}
......
This diff is collapsed.
/* Copyright (C) 1997 Alain Penders <Alain@Finale-Dev.com>
* Copyright (C) 2016 Richard Russon <rich@flatcap.org>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*/
#ifndef _COMPRESS_H_
#define _COMPRESS_H_
int comp_can_append (CONTEXT *ctx);
int comp_can_read (const char *path);
int comp_sync (CONTEXT *ctx);
int comp_valid_command (const char *cmd);
extern struct mx_ops mx_comp_ops;
#endif /* _COMPRESS_H_ */
......@@ -183,6 +183,15 @@ AC_ARG_ENABLE(sidebar, AC_HELP_STRING([--enable-sidebar], [Enable Sidebar suppor
fi
])
AC_ARG_ENABLE(compressed, AC_HELP_STRING([--enable-compressed], [Enable compressed folders support]),
enable_compressed=$enableval, enable_compressed=no
)
AS_IF([test x$enable_compressed = "xyes"], [
AC_DEFINE(USE_COMPRESSED, 1, [Define to enable compressed folders support.])
MUTT_LIB_OBJECTS="$MUTT_LIB_OBJECTS compress.o"
])
AM_CONDITIONAL(BUILD_COMPRESS, test x$enable_compressed = xyes)
AC_ARG_WITH(mixmaster, AS_HELP_STRING([--with-mixmaster@<:@=PATH@:>@],[Include Mixmaster support]),
[if test "$withval" != no
then
......
......@@ -4,7 +4,7 @@ subdir = contrib
SAMPLES = Mush.rc Pine.rc gpg.rc pgp2.rc pgp5.rc pgp6.rc Tin.rc \
sample.mailcap sample.muttrc sample.muttrc-sidebar sample.muttrc-tlr \
sample.vimrc-sidebar colors.default colors.linux smime.rc \
sample.muttrc-compress sample.vimrc-sidebar colors.default colors.linux smime.rc \
ca-bundle.crt smime_keys_test.pl mutt_xtitle
EXTRA_DIST = language.txt language50.txt \
......
# Example Mutt config file for the compress feature.
# This feature adds three hooks to Mutt which allow it to
# work with compressed, or encrypted, mailboxes.
# The hooks are of the form:
# open-hook regexp "shell-command"
# close-hook regexp "shell-command"
# append-hook regexp "shell-command"
# The 'append-hook' is optional.
# Handler for gzip compressed mailboxes
open-hook '\.gz$' "gzip -cd '%f' > '%t'"
close-hook '\.gz$' "gzip -c '%t' > '%f'"
append-hook '\.gz$' "gzip -c '%t' >> '%f'"
# Handler for bzip2 compressed mailboxes
open-hook '\.bz2$' "bzip2 -cd '%f' > '%t'"
close-hook '\.bz2$' "bzip2 -c '%t' > '%f'"
append-hook '\.bz2$' "bzip2 -c '%t' >> '%f'"
# Handler for xz compressed mailboxes
open-hook '\.xz$' "xz -cd '%f' > '%t'"
close-hook '\.xz$' "xz -c '%t' > '%f'"
append-hook '\.xz$' "xz -c '%t' >> '%f'"
# Handler for pgp encrypted mailboxes
# PGP does not support appending to an encrypted file
open-hook '\.pgp$' "pgp -f < '%f' > '%t'"
close-hook '\.pgp$' "pgp -fe YourPgpUserIdOrKeyId < '%t' > '%f'"
# Handler for gpg encrypted mailboxes
# gpg does not support appending to an encrypted file
open-hook '\.gpg$' "gpg --decrypt < '%f' > '%t'"
close-hook '\.gpg$' "gpg --encrypt --recipient YourGpgUserIdOrKeyId < '%t' > '%f'"
# vim: syntax=muttrc
......@@ -1241,6 +1241,11 @@ int mutt_index_menu (void)
{
int check;
#ifdef USE_COMPRESSED
if (Context->compress_info && Context->realpath)
mutt_str_replace (&LastFolder, Context->realpath);
else
#endif
mutt_str_replace (&LastFolder, Context->path);
oldcount = Context ? Context->msgcount : 0;
......
......@@ -29,6 +29,11 @@ macro generic,pager <F1> "<shell-escape> less @docdir@/manual.txt<Enter>" "show
macro index,pager y "<change-folder>?<toggle-mailboxes>" "show incoming mailboxes list"
bind browser y exit
# Handler for gzip compressed mailboxes
# open-hook '\.gz$' "gzip -cd '%f' > '%t'"
# close-hook '\.gz$' "gzip -c '%t' > '%f'"
# append-hook '\.gz$' "gzip -c '%t' >> '%f'"
# If Mutt is unable to determine your site's domain name correctly, you can
# set the default here.
#
......
......@@ -8427,6 +8427,282 @@ please have a look at the mixmaster documentation.
</sect2>
</sect1>
<sect1 id="compress">
<title>Compressed Folders Feature</title>
<subtitle>Read from/write to compressed mailboxes</subtitle>
<sect2 id="compress-intro">
<title>Introduction</title>
<para>
The Compressed Folder patch allows Mutt to read mailbox files that are
compressed. But it isn't limited to compressed files. It works well
with encrypted files, too. In fact, if you can create a program/script
to convert to and from your format, then Mutt can read it.
</para>
<para>
The patch adds three hooks to Mutt: <literal>open-hook</literal>,
<literal>close-hook</literal> and <literal>append-hook</literal>. They
define commands to: uncompress a file; compress a file; append
messages to an already compressed file.
</para>
<para>
There are some examples of both compressed and encrypted files,
later. For now, the documentation will just concentrate on
compressed files.
</para>
</sect2>
<sect2 id="compress-commands">
<title>Commands</title>
<cmdsynopsis>
<command>open-hook</command>
<arg choice="plain">
<replaceable class="parameter">pattern</replaceable>
</arg>
<arg choice="plain">
<replaceable class="parameter">shell-command</replaceable>
</arg>
<command>close-hook</command>
<arg choice="plain">
<replaceable class="parameter">pattern</replaceable>
</arg>
<arg choice="plain">
<replaceable class="parameter">shell-command</replaceable>
</arg>
<command>append-hook</command>
<arg choice="plain">
<replaceable class="parameter">pattern</replaceable>
</arg>
<arg choice="plain">
<replaceable class="parameter">shell-command</replaceable>
</arg>
</cmdsynopsis>
<para>
The shell-command must contain two placeholders for filenames:
<literal>%f</literal> and <literal>%t</literal>. These represent
<quote>from</quote> and <quote>to</quote> filenames. It's a good idea to
put quotes around these placeholders.
</para>
<para>
If you need the exact string <quote>%f</quote> or <quote>%t</quote> in your
command, simply double up the <quote>%</quote> character, e.g.
<quote>%%f</quote> or <quote>%%t</quote>.
</para>
<table id="table-compress-optional">
<title>Not all Hooks are Required</title>
<tgroup cols="5">
<thead>
<row>
<entry>Open</entry>
<entry>Close</entry>
<entry>Append</entry>
<entry>Effect</entry>
<entry>Useful if</entry>
</row>
</thead>
<tbody>
<row>
<entry>Open</entry>
<entry>-</entry>
<entry>-</entry>
<entry>Folder is readonly</entry>
<entry>The folder is just a backup</entry>
</row>
<row>
<entry>Open</entry>
<entry>Close</entry>
<entry>-</entry>
<entry>Folder is read/write, but the entire folder must be
written if anything is changed</entry>
<entry>Your compression format doesn't support appending</entry>
</row>
<row>
<entry>Open</entry>
<entry>Close</entry>
<entry>Append</entry>
<entry>Folder is read/write and emails can be efficiently added
to the end</entry>
<entry>Your compression format supports appending</entry>
</row>
<row>
<entry>Open</entry>
<entry>-</entry>
<entry>Append</entry>
<entry>Folder is readonly, but can be appended to</entry>
<entry>You want to store emails, but never change them</entry>
</row>
</tbody>
</tgroup>
</table>
<note>
<para>The command:</para>
<itemizedlist>
<listitem><para>should return a non-zero exit status on failure</para></listitem>
<listitem><para>should not delete any files</para></listitem>
</itemizedlist>
</note>
<sect3 id="open-hook">
<title>Read from compressed mailbox</title>
<screen>open-hook regexp shell-command</screen>
<para>
If Mutt is unable to open a file, it then looks for
<literal>open-hook</literal> that matches the filename.
</para>
<para>
If your compression program doesn't have a well-defined extension,
then you can use <literal>.</literal> as the regexp.
</para>
<sect4 id="compress-open-hook-example">
<title>Example of open-hook</title>
<screen>open-hook '\.gz$' &quot;gzip -cd '%f' &gt; '%t'&quot;</screen>
<itemizedlist>
<listitem><para>Mutt finds a file, <quote>example.gz</quote>,
that it can't read</para></listitem>
<listitem><para>Mutt has an <literal>open-hook</literal>
whose regexp matches the filename:
<literal>\.gz$</literal></para></listitem>
<listitem><para>Mutt uses the command <literal>gzip -cd</literal>
to create a temporary file that it <emphasis>can</emphasis>
read</para></listitem>
</itemizedlist>
</sect4>
</sect3>
<sect3 id="close-hook">
<title>Write to a compressed mailbox</title>
<screen>close-hook regexp shell-command</screen>
<para>
When Mutt has finished with a compressed mail folder, it will look
for a matching <literal>close-hook</literal> to recompress the file.
This hook is <link linkend="table-compress-optional">optional</link>.
</para>
<note>
<para>
If the folder has not been modified, the
<literal>close-hook</literal> will not be called.
</para>
</note>
<sect4 id="compress-close-hook-example">
<title>Example of close-hook</title>
<screen>close-hook '\.gz$' &quot;gzip -c '%t' &gt; '%f'&quot;</screen>
<itemizedlist>
<listitem><para>Mutt has finished with a folder, <quote>example.gz</quote>,
that it opened with <literal>open-hook</literal></para></listitem>
<listitem><para>The folder has been modified</para></listitem>
<listitem><para>Mutt has a <literal>close-hook</literal> whose regexp
matches the filename: <literal>\.gz$</literal></para></listitem>
<listitem><para>Mutt uses the command <literal>gzip -c</literal>
to create a new compressed file</para></listitem>
</itemizedlist>
</sect4>
</sect3>
<sect3 id="append-hook">
<title>Append to a compressed mailbox</title>
<screen>append-hook regexp shell-command</screen>
<para>
When Mutt wants to append an email to a compressed mail folder, it
will look for a matching <literal>append-hook</literal>.
This hook is <link linkend="table-compress-optional">optional</link>.
</para>
<para>
Using the <literal>append-hook</literal> will save time, but
Mutt won't be able to determine the type of the mail folder
inside the compressed file.
</para>
<para>
Mutt will <emphasis>assume</emphasis> the type to be that of
the <literal>$mbox_type</literal> variable. Mutt also uses
this type for temporary files.
</para>
<para>
Mutt will only use the <literal>append-hook</literal> for existing files.
The <literal>close-hook</literal> will be used for empty, or missing files.
</para>
<note>
<para>
If your command writes to stdout, it is vital that you use
<literal>&gt;&gt;</literal> in the <quote>append-hook</quote>.
If not, data will be lost.
</para>
</note>
<sect4 id="compress-append-hook-example">
<title>Example of append-hook</title>
<screen>append-hook '\.gz$' &quot;gzip -c '%t' &gt;&gt; '%f'&quot;</screen>
<itemizedlist>
<listitem><para>Mutt wants to append an email to a folder, <quote>example.gz</quote>,
that it opened with <literal>open-hook</literal></para></listitem>
<listitem><para>Mutt has an <literal>append-hook</literal> whose regexp matches
the filename: <literal>\.gz$</literal></para></listitem>
<listitem><para>Mutt knows the mailbox type from the <literal>$mbox</literal>
variable</para></listitem>
<listitem><para>Mutt uses the command <literal>gzip -c</literal>
to append to an existing compressed file</para></listitem>
</itemizedlist>
</sect4>
</sect3>
<sect3 id="compress-empty">
<title>Empty Files</title>
<para>
Mutt assumes that an empty file is not compressed. In this
situation, unset <link linkend="save-empty">$save_empty</link>, so
that the compressed file will be removed if you delete all of the
messages.
</para>
</sect3>
<sect3 id="compress-security">
<title>Security</title>
<para>
Encrypted files are decrypted into temporary files which are
stored in the <link linkend="tmpdir">$tmpdir</link> directory.
This could be a security risk.
</para>
</sect3>
</sect2>
<sect2 id="compress-known-bugs">
<title>Known Bugs</title>
<itemizedlist>
<listitem><para>The Compressed Folder hooks cannot deal with filenames that contains quotes/apostrophes.</para></listitem>
</itemizedlist>
</sect2>
</sect1>
</chapter>
<chapter id="security">
......
......@@ -358,7 +358,24 @@ You may use multiple
\fBcrypt-hook\fPs with the same \fIregexp\fP; multiple matching
\fBcrypt-hook\fPs result in the use of multiple \fIkey-id\fPs for
a recipient.
.PP
.nf
\fBopen-hook\fP \fIregexp\fP "\fIcommand\fP"
\fBclose-hook\fP \fIregexp\fP "\fIcommand\fP"
\fBappend-hook\fP \fIregexp\fP "\fIcommand\fP"
.fi
.IP
These commands provide a way to handle compressed folders. The given
\fBregexp\fP specifies which folders are taken as compressed (e.g.
"\fI\\\\.gz$\fP"). The commands tell Mutt how to uncompress a folder
(\fBopen-hook\fP), compress a folder (\fBclose-hook\fP) or append a
compressed mail to a compressed folder (\fBappend-hook\fP). The
\fIcommand\fP string is the
.BR printf (3)
like format string, and it should accept two parameters: \fB%f\fP,
which is replaced with the (compressed) folder name, and \fB%t\fP
which is replaced with the name of the temporary folder to which to
write.
.TP
\fBpush\fP \fIstring\fP
This command adds the named \fIstring\fP to the keyboard buffer.
......
......@@ -24,6 +24,10 @@
#include "mailbox.h"
#include "mutt_crypt.h"
#ifdef USE_COMPRESSED
#include "compress.h"
#endif
#include <limits.h>
#include <string.h>
#include <stdlib.h>
......@@ -109,6 +113,14 @@ int mutt_parse_hook (BUFFER *buf, BUFFER *s, unsigned long data, BUFFER *err)
memset (&pattern, 0, sizeof (pattern));
pattern.data = safe_strdup (path);
}
#ifdef USE_COMPRESSED
else if (data & (MUTT_APPENDHOOK | MUTT_OPENHOOK | MUTT_CLOSEHOOK)) {
if (comp_valid_command (command.data) == 0) {
strfcpy (err->data, _("badly formatted command string"), err->dsize);
return -1;
}
}
#endif
else if (DefaultHook && !(data & (MUTT_CHARSETHOOK | MUTT_ICONVHOOK | MUTT_ACCOUNTHOOK))
&& (!WithCrypto || !(data & MUTT_CRYPTHOOK))
)
......
......@@ -3907,6 +3907,11 @@ const struct command_t Commands[] = {
{ "fcc-hook", mutt_parse_hook, MUTT_FCCHOOK },
{ "fcc-save-hook", mutt_parse_hook, MUTT_FCCHOOK | MUTT_SAVEHOOK },
{ "folder-hook", mutt_parse_hook, MUTT_FOLDERHOOK },
#ifdef USE_COMPRESSED
{ "open-hook", mutt_parse_hook, MUTT_OPENHOOK },
{ "close-hook", mutt_parse_hook, MUTT_CLOSEHOOK },
{ "append-hook", mutt_parse_hook, MUTT_APPENDHOOK },
#endif
{ "group", parse_group, MUTT_GROUP },
{ "ungroup", parse_group, MUTT_UNGROUP },
{ "hdr_order", parse_list, UL &HeaderOrderList },
......
......@@ -494,6 +494,12 @@ static void show_version (void)
"-USE_SIDEBAR "
#endif
#ifdef USE_COMPRESSED
"+USE_COMPRESSED "
#else
"-USE_COMPRESSED "
#endif
);
#ifdef ISPELL
......
......@@ -146,6 +146,11 @@ typedef enum
#define MUTT_ACCOUNTHOOK (1<<9)
#define MUTT_REPLYHOOK (1<<10)
#define MUTT_SEND2HOOK (1<<11)
#ifdef USE_COMPRESSED
#define MUTT_OPENHOOK (1<<12)
#define MUTT_APPENDHOOK (1<<13)
#define MUTT_CLOSEHOOK (1<<14)
#endif
/* tree characters for linearize_tree and print_enriched_string */
#define MUTT_TREE_LLCORNER 1
......@@ -951,6 +956,10 @@ typedef struct _context
unsigned int closing : 1; /* mailbox is being closed */
unsigned int peekonly : 1; /* just taking a glance, revert atime */
#ifdef USE_COMPRESSED
void *compress_info; /* compressed mbox module private data */
#endif /* USE_COMPRESSED */
/* driver hooks */
void *data; /* driver specific data */
struct mx_ops *mx_ops;
......
......@@ -33,6 +33,10 @@
#include "sidebar.h"
#endif
#ifdef USE_COMPRESSED
#include "compress.h"
#endif
#ifdef USE_IMAP
#include "imap.h"
#endif
......@@ -60,7 +64,7 @@
#include <ctype.h>
#include <utime.h>
static struct mx_ops* mx_get_ops (int magic)
struct mx_ops* mx_get_ops (int magic)
{
switch (magic)
{
......@@ -79,6 +83,10 @@ static struct mx_ops* mx_get_ops (int magic)
#ifdef USE_POP
case MUTT_POP:
return &mx_pop_ops;
#endif
#ifdef USE_COMPRESSED
case MUTT_COMPRESSED:
return &mx_comp_ops;
#endif
default:
return NULL;
......@@ -441,6 +449,12 @@ int mx_get_magic (const char *path)
return (-1);
}
#ifdef USE_COMPRESSED
/* If there are no other matches, see if there are any
* compress hooks that match */
if ((magic == 0) && comp_can_read (path))
return MUTT_COMPRESSED;
#endif
return (magic);
}
......@@ -507,6 +521,11 @@ static int mx_open_mailbox_append (CONTEXT *ctx, int flags)
return -1;
}
#ifdef USE_COMPRESSED
if (comp_can_append (ctx))
ctx->mx_ops = &mx_comp_ops;
else
#endif
ctx->mx_ops = mx_get_ops (ctx->magic);
if (!ctx->mx_ops || !ctx->mx_ops->open_append)
return -1;
......@@ -700,6 +719,14 @@ static int sync_mailbox (CONTEXT *ctx, int *index_hint)
if (tmp && tmp->new == 0)
mutt_update_mailbox (tmp);
#ifdef USE_COMPRESSED
/* If everything went well, the mbox handler saved the changes to our
* temporary file. Next, comp_sync() will compress the temporary file. */
if ((rc == 0) && ctx->compress_info)
return comp_sync (ctx);
#endif
return rc;
}
......
......@@ -37,6 +37,9 @@ enum
MUTT_MAILDIR,
MUTT_IMAP,
MUTT_POP
#ifdef USE_COMPRESSED
, MUTT_COMPRESSED
#endif
};
WHERE short DefaultMagic INITVAL (MUTT_MBOX);
......@@ -70,6 +73,7 @@ void mx_update_tables (CONTEXT *, int);
int mx_lock_file (const char *, int, int, int, int);
int mx_unlock_file (const char *path, int fd, int dot);
struct mx_ops* mx_get_ops (int magic);
extern struct mx_ops mx_maildir_ops;
extern struct mx_ops mx_mbox_ops;
extern struct mx_ops mx_mh_ops;
......
......@@ -8,6 +8,7 @@ charset.c
color.c
commands.c
compose.c
compress.c
crypt-gpgme.c
crypt.c
cryptglue.c
......
......@@ -5418,6 +5418,31 @@ msgstr "Extrahiere unterst
msgid "show S/MIME options"
msgstr "Zeige S/MIME Optionen"
#: compress.c:228 compress.c:253
#, c-format
msgid "Decompressing %s"
msgstr "Entpacke %s"
#: compress.c:264
#, c-format
msgid "Error executing: %s\n"
msgstr "Fehler beim Ausfhren von %s\n"
#: compress.c:350 compress.c:377 compress.c:423 compress.c:454
#, c-format
msgid "Compressing %s..."
msgstr "Komprimiere %s..."
#: compress.c:425 compress.c:456
#, c-format
msgid "Compressed-appending to %s..."
msgstr "Hnge komprimiert an %s... an"
#: compress.c:461
#, c-format
msgid " %s: Error compressing mailbox! Uncompressed one kept!\n"
msgstr " %s: Fehler beim packen der Mailbox! Entpackte Mailbox gespeichert!\n"
#~ msgid "delete message(s)"
#~ msgstr "Nachricht(en) lschen"
......
......@@ -96,6 +96,12 @@ status_format_str (char *buf, size_t buflen, size_t col, int cols, char op, cons
case 'f':
snprintf (fmt, sizeof(fmt), "%%%ss", prefix);
#ifdef USE_COMPRESSED
if (Context && Context->compress_info && Context->realpath) {
strfcpy (tmp, Context->realpath, sizeof (tmp));
mutt_pretty_mailbox (tmp, sizeof (tmp));
} else
#endif
if (Context && Context->path)
{
strfcpy (tmp, Context->path, sizeof (tmp));
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment