# HG changeset patch
# User David Champion <[email protected]>
# Date 1355527745 21600
# Branch HEAD
# Node ID 8f4ff2c8f2e7314e3d62e879aaf91bb035d92da0
# Parent ecae1a363182797c2c157e88ff51d07c82f0a20c
Adds mailboxrx (and unmailboxrx) command.
Mailboxrx allows you to define a regular expression and replacement
template for mailbox names. Wherever status_format's %f is expanded,
the folder name will be matched in turn against each mailboxrx
expression. If any expression matches, a replacement of the mailbox
name will be performed, with backreference expansion.
Example:
mailboxrx imaps://(.*)@imap.gmail.com/ %1@gmail:%R
This makes any Google Mail IMAP mailbox look like username@gmail:folder.
%1 expands to the first parenthesized subexpression in the regex. %L is
all text to the left of the matching expression, and %R is all text to
the right of the matching expression.
mailboxrx (pop|imap)s?://.*\.([^.]+).[^.]+/ %2:%R
This more generally simplifies POP or IMAP mailbox display, reducing it
to "domain:folder" where "domain" is the DNS domain of the server minus
the top-level domain (.com, .net, etc).
Mailboxrx commands are stackable. On top of the above, you could add:
mailboxrx earthlink %Leln%R
This would replace "earthlink" with "eln" regardless of where it appears
in the mailbox name.
diff -r ecae1a363182 -r 8f4ff2c8f2e7 doc/manual.xml.head
--- a/doc/manual.xml.head Fri Dec 14 17:29:03 2012 -0600
+++ b/doc/manual.xml.head Fri Dec 14 17:29:05 2012 -0600
@@ -5900,6 +5900,41 @@
</screen>
</example>
+<para>
+Similarly, <literal>mailboxrx</literal> lets you replace mailbox names in the
+display, which can be useful if they are very long -- for example, mailboxes
+deep in your filesystem, or IMAP URLs with a lot of prefatory junk.
+</para>
+
+<cmdsynopsis>
+<command>mailboxrx</command>
+<arg choice="plain">
+<replaceable class="parameter">pattern</replaceable>
+</arg>
+<arg choice="plain">
+<replaceable class="parameter">replacement</replaceable>
+</arg>
+
+<command>unmailboxrx</command>
+<arg choice="plain">
+<replaceable class="parameter">pattern</replaceable>
+</arg>
+</cmdsynopsis>
+
+<example id="ex-mailboxrx">
+<title>Mailbox Munging</title>
+<screen>
+# Shorten my home directory path
+mailboxrx '/home/dgc' '~/%R'
+
+# Shorten my Mail folder
+mailboxrx '/home/dgc/[mM]ail/' '=%R'
+
+# Shorten IMAP
+mailboxrx 'imaps?://[^/]*/' 'imap:%R'
+</screen>
+</example>
+
</sect1>
<sect1 id="new-mail">
diff -r ecae1a363182 -r 8f4ff2c8f2e7 globals.h
--- a/globals.h Fri Dec 14 17:29:03 2012 -0600
+++ b/globals.h Fri Dec 14 17:29:05 2012 -0600
@@ -171,6 +171,7 @@
WHERE REPLACE_LIST *SpamList INITVAL(0);
WHERE RX_LIST *NoSpamList INITVAL(0);
WHERE REPLACE_LIST *SubjectRxList INITVAL(0);
+WHERE REPLACE_LIST *MailboxRxList INITVAL(0);
/* bit vector for boolean variables */
diff -r ecae1a363182 -r 8f4ff2c8f2e7 init.h
--- a/init.h Fri Dec 14 17:29:03 2012 -0600
+++ b/init.h Fri Dec 14 17:29:05 2012 -0600
@@ -3534,6 +3534,8 @@
{ "macro", mutt_parse_macro, 0 },
{ "mailboxes", mutt_parse_mailboxes, M_MAILBOXES },
{ "unmailboxes", mutt_parse_mailboxes, M_UNMAILBOXES },
+ { "mailboxrx", parse_replace_list, UL &MailboxRxList },
+ { "unmailboxrx", parse_unreplace_list, UL &MailboxRxList },
{ "message-hook", mutt_parse_hook, M_MESSAGEHOOK },
{ "mbox-hook", mutt_parse_hook, M_MBOXHOOK },
{ "mime_lookup", parse_list, UL &MimeLookupList },
diff -r ecae1a363182 -r 8f4ff2c8f2e7 muttlib.c
--- a/muttlib.c Fri Dec 14 17:29:03 2012 -0600
+++ b/muttlib.c Fri Dec 14 17:29:05 2012 -0600
@@ -809,10 +809,24 @@
}
}
+static void apply_mailboxrx (char *s, size_t buflen)
+{
+ char *repl;
+
+ repl = mutt_apply_replace (NULL, 0, s, MailboxRxList);
+ if (repl)
+ {
+ strncpy(s, repl, buflen-1);
+ s[buflen-1] = '\0';
+ FREE(&repl);
+ }
+}
+
/* collapse the pathname using ~ or = when possible */
-void mutt_pretty_mailbox (char *s, size_t buflen)
+void mutt_pretty_mailbox (char *buf, size_t buflen)
{
- char *p = s, *q = s;
+ char *s = buf;
+ char *p = buf, *q = buf;
size_t len;
url_scheme_t scheme;
char tmp[PATH_MAX];
@@ -823,6 +837,7 @@
if (scheme == U_IMAP || scheme == U_IMAPS)
{
imap_pretty_mailbox (s);
+ apply_mailboxrx (buf, buflen);
return;
}
#endif
@@ -878,6 +893,8 @@
*s++ = '~';
memmove (s, s + len - 1, mutt_strlen (s + len - 1) + 1);
}
+
+ apply_mailboxrx (buf, buflen);
}
void mutt_pretty_size (char *s, size_t len, LOFF_T n)