From: Antonio Radici Date: Sun, 24 May 2009 11:22:13 +0000 (+0100) Subject: restoring debian/ for master X-Git-Tag: debian/1.5.19-3~12 X-Git-Url: https://git.llucax.com/software/mutt-debian.git/commitdiff_plain/5d81d183a92497924d4f784426e9863a83998c83?hp=19304f7c526fbe36ba0db2fb80bcaf3bd974d81d restoring debian/ for master --- diff --git a/debian/MY-TODO b/debian/MY-TODO new file mode 100644 index 0000000..e9494c7 --- /dev/null +++ b/debian/MY-TODO @@ -0,0 +1,7 @@ +Only in ../m/debian/mutt/usr/share/doc/mutt: BUGS.IMAP +Only in ../m/debian/mutt/usr/share/doc/mutt: README.IMAP +Only in ../m/debian/mutt/usr/share/doc/mutt: TODO.IMAP + +Only in debian/mutt/usr/share/doc/mutt/examples: ca-bundle.crt +Only in debian/mutt/usr/share/doc/mutt/examples: iconv +Only in debian/mutt/usr/share/doc/mutt/examples: smime_keys_test.pl diff --git a/debian/NEWS b/debian/NEWS new file mode 100644 index 0000000..d00133e --- /dev/null +++ b/debian/NEWS @@ -0,0 +1,46 @@ +mutt (1.5.17-2) unstable; urgency=low + + There is now a "mutt-patched" package that will contain some more + experimental patches. For now that is the "sidebar" patch. See + README.Patches for details. + + -- Christoph Berg Tue, 01 Jan 2008 20:03:16 +0100 + +mutt (1.5.16-2) unstable; urgency=low + + User-visible changes in this version: + * The gpgme crypt backend is not yet stable enough, disabled again. + * The imap_home_namespace variable was removed upstream. + + -- Christoph Berg Thu, 28 Jun 2007 20:58:49 +0200 + +mutt (1.5.14+cvs20070301-1) experimental; urgency=low + + We no longer unset write_bcc in /etc/Muttrc. If your MTA does not strip Bcc: + headers, edit /etc/Muttrc. (exim4 and postfix strip them, exim(3) does not.) + We also no longer unset use_from and use_domain. Mutt will use the contents + of /etc/mailname to determine the domain part of the From: header. + + This release adds ESMTP support to mutt. To use, set smtp_url to your + smarthost, e.g. smtps://mail.company.com/. + + The gpgme crypt backend is now enabled. + + -- Christoph Berg Thu, 1 Mar 2007 23:56:58 +0100 + +mutt (1.5.6-1) unstable; urgency=low + + In this release the alternates, lists, and subscribe configuration + variables have been turned into regular expression lists. + Additionaly, alternates is now an option, not a variable. + This means that you should change: + + set alternates="foo|bar" + + into + + alternates "foo|bar" + + in your .muttrc file. See muttrc(5) for details. + + -- Artur R. Czechowski Sun, 4 Apr 2004 14:04:03 +0200 diff --git a/debian/README.Debian b/debian/README.Debian new file mode 100644 index 0000000..9ac18c8 --- /dev/null +++ b/debian/README.Debian @@ -0,0 +1,81 @@ +l10n support +~~~~~~~~~~~~ +If you want to see non-ASCII characters on a Debian system, there's no +use fiddling with the variable "charset", as described in the manual +page muttrc(5). +Instead, you'll need to have the Debian package "locales" installed on +your system and set the LANG or LC_CTYPE environment variable. +e.g. US users will want to add "export LC_CTYPE=en_US" to their ~/.bashrc. +If you have a /etc/locale.gen file read carefully the comment and do +what it says, or it will not work. +No, linux systems do not need --enable-locales-fix or --without-wc-funcs, +so don't bother me saying these switches cure your problems. + + +PGP support +~~~~~~~~~~~ +GnuPG support works out of the box with the default /etc/Muttrc. +You do not need any of the example files in /usr/share/doc/mutt/ +unless you plan to send signed+encrypted messages to pgp2 users. + + +gpg-2comp +~~~~~~~~~ +/usr/share/doc/mutt/examples/gpg.rc uses a wrapper program called +gpg-2comp which is not available as a debian package. +This program is needed only to sign and encrypt messages with a method +compatible with PGP 2.x. Users who don't need this feature can use the +commands provided in the default /etc/Muttrc. +The pgpewrap and pgpring programs used by some example rc files have +been installed in /usr/lib/mutt. +The files /usr/share/doc/mutt/examples/*.rc are just examples and are not +supposed to be used as is. Actually they are not supposed to be used at +all, PGP support works out of the box if gnupg is installed. + + +GnuPG passphrase +~~~~~~~~~~~~~~~~ +The GnuPG passphrase is not asked if the $GPG_AGENT_INFO environment +variable exists. + + +Scripts +~~~~~~~ +Look at /usr/lib/mutt/{debian-ldap-query,mailspell}. + + +pgp_encryptself +~~~~~~~~~~~~~~~ +This mutt 1.0.x configuration option does not exist anymore and this +will not change. To achieve the same effect you can add something like +--encrypt-to=your@mail.address to the relevant ~/.muttrc configuration +lines (pgp_encrypt_only_command and pgp_encrypt_sign_command) or to +~/.gnupg/options . + + +S/MIME Support +~~~~~~~~~~~~~~ +See README.SMIME for details. + + +About temporary files and security +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +When using mutt to view an encrypted message, the plain text is saved in +a temporary file. If you have reasons to worry an attacker may recover +the deleted file from your hard disk please take appropriate actions to +prevent this (e.g. use a ramdisk or shred(1) or wipe(1)). +Also don't forget about the temporary files created by your editor. +Mutt creates temporary files in a secure way. See #222125 for details. + + +/etc/Muttrc.d/ +~~~~~~~~~~~~~~ +The default /etc/Muttrc will source more configuration directives from +files in the /etc/Muttrc.d/ directory ending in ".rc". +The system administrator may use the directory for local customizations +and packages enhancing mutt may use it to install their configuration +directives. +The directory is processed last in /etc/Muttrc, so that settings there +may override the defaults from the file. + + -- Christoph Berg Sat, 03 Nov 2007 21:02:26 +0100 diff --git a/debian/README.source b/debian/README.source new file mode 100644 index 0000000..8646078 --- /dev/null +++ b/debian/README.source @@ -0,0 +1,57 @@ +This package uses quilt to manage all modifications to the upstream +source. Changes are stored in the source package as diffs in +debian/patches and applied during the build. + +To configure quilt to use debian/patches instead of patches, you want +either to export QUILT_PATCHES=debian/patches in your environment +or use this snippet in your ~/.quiltrc: + + for where in ./ ../ ../../ ../../../ ../../../../ ../../../../../; do + if [ -e ${where}debian/rules -a -d ${where}debian/patches ]; then + export QUILT_PATCHES=debian/patches + fi + done + +To get the fully patched source after unpacking the source package, cd to +the root level of the source package and run: + + quilt push -a + +The last patch listed in debian/patches/series will become the current +patch. + +To add a new set of changes, first run quilt push -a, and then run: + + quilt new + +where is a descriptive name for the patch, used as the filename in +debian/patches. Then, for every file that will be modified by this patch, +run: + + quilt add + +before editing those files. You must tell quilt with quilt add what files +will be part of the patch before making changes or quilt will not work +properly. After editing the files, run: + + quilt refresh + +to save the results as a patch. + +Alternately, if you already have an external patch and you just want to +add it to the build system, run quilt push -a and then: + + quilt import -P /path/to/patch + quilt push -a + +(add -p 0 to quilt import if needed). as above is the filename to +use in debian/patches. The last quilt push -a will apply the patch to +make sure it works properly. + +To remove an existing patch from the list of patches that will be applied, +run: + + quilt delete + +You may need to run quilt pop -a to unapply patches first before running +this command. diff --git a/debian/bug/control b/debian/bug/control new file mode 100644 index 0000000..1d19eee --- /dev/null +++ b/debian/bug/control @@ -0,0 +1 @@ +package-status: mutt mutt-patched mutt-dbg diff --git a/debian/bug/script b/debian/bug/script new file mode 100755 index 0000000..d5f4c44 --- /dev/null +++ b/debian/bug/script @@ -0,0 +1,5 @@ +#!/bin/sh + +echo "Including output of \`mutt -v'..." + +LC_ALL=C mutt -v >&3 diff --git a/debian/changelog b/debian/changelog new file mode 100644 index 0000000..db2c6ff --- /dev/null +++ b/debian/changelog @@ -0,0 +1,1491 @@ +mutt (1.5.19-2) experimental; urgency=low + + * Recommends: libsasl2-modules. Technically, we depend on libsasl2-2 which + already recommends this package, but not having it installed just confuses + too many users. + * Use upstream's smime.rc file, hereby fixing S/MIME encryption. + (Closes: #315319) + * Grab two patches from upstream that should also go into lenny: + + Always sort inode list for accessing header cache. (Closes: #508988) + + Delete partially downloaded files in message cache. (Closes: #500016) + * Add Antonio Radici to Uploaders. Thanks for the BTS triaging! + + -- Christoph Berg Thu, 05 Feb 2009 23:26:41 +0100 + +mutt (1.5.19-1) experimental; urgency=low + + * New upstream version. + + Header weeding changed in default config; now we ignore * and unignore + from: subject to cc date x-mailer x-url user-agent. (Mutt: #286) + + $move now defaults to "no" instead of "ask-no". + * Upstream dropped changelog.old, so do we. + * Temporarily disable building mutt-patched until an updated sidebar patch + is available. + + -- Christoph Berg Thu, 15 Jan 2009 23:47:29 +0100 + +mutt (1.5.18-4) unstable; urgency=low + + * In order to evade a conflict with the sidebar patch, move the set_xterm_* + prototypes from pager.c to mutt_menu.h. No functional change. + * Introduce two new patches that revert the conflicting part of the + maildir-mtime patch before applying the sidebar patch, and afterwards + re-apply the relevant bits. This mitigates the chance of bugs being + introduced when manually resolving conflicts with new versions of the + sidebar patch. This fixes new mail detection in the mutt-patched package. + (Closes: #484537, #484538) + + -- Christoph Berg Sun, 03 Aug 2008 00:51:58 +0200 + +mutt (1.5.18-3) unstable; urgency=low + + * Pull patch from upstream to fix multipart decoding. (Closes: #489283) + * Add example sidebar config, thanks Stefano Zacchiroli. (Closes: #460452) + * (Finally) compile with native Kerberos GSSAPI support. (Closes: #469483) + * Add a switch in debian/rules to make building mutt-patched configurable. + + -- Christoph Berg Sun, 20 Jul 2008 01:35:03 +0200 + +mutt (1.5.18-2) unstable; urgency=low + + * Updated sidebar patch, does not display (NULL) anymore. (Closes: #483151) + * Install reportbug script to inform us about the status of installed + mutt packages. + * Use dh_lintian (prefix with '-' so we do not need to bump the DH level). + * Register mutt as message/rfc822 application in /etc/mailcap. + (Closes: #474539) + * Refresh some patches to get rid of -p0 in series file. + * Bump Standards-Version; add debian/README.source. + * Switch Maintainer and Uploader as suggested by Dato. + + -- Christoph Berg Thu, 12 Jun 2008 23:53:46 +0200 + +mutt (1.5.18-1) unstable; urgency=low + + * New upstream version. + + Query menu format is configurable. (Closes: #66096, Mutt: #170) + + Quote attachment filenames starting with '='. + (Closes: #351890, Mutt: #1719) + + Mention that References: and Date: cannot be changed in editor. + (Closes: #191850, Mutt: #1234). + * Refreshing patches from upstream: + + compressed-folders. + + sidebar. (Closes: #470657) + * Update doc-base section. + + -- Christoph Berg Sat, 24 May 2008 19:36:44 +0200 + +mutt (1.5.17+20080114-1) unstable; urgency=low + + * New upstream snapshot (hg 130aa0517251), and this time build a proper + orig.tar.gz tarball. + + Fixes message corruption/duplication. (Closes: #459739) + + -- Christoph Berg Mon, 14 Jan 2008 23:26:14 +0100 + +mutt (1.5.17-2) unstable; urgency=low + + * Build a mutt-patched package to apply the sidebar patch. Thanks to Dato + who had the right idea for the necessary debian/rules magic during the + recent debian-qa meeting in Extremadura. (Closes: #277637) + * Build a mutt-dbg package, and bump DH level to 5. + * Grab current hg tip from upstream (68a9c3e74f9a). + + Fixes "mailto:" URL parsing. + (Closes: #426148, #426158, #446016, Mutt: #2968, #2980) + + 'set folder= =' won't segfault. (Closes: #448728) + + Improve DSN docs. (Closes: #436228) + * Bump Standards-Version, add Homepage field. + + -- Christoph Berg Tue, 01 Jan 2008 20:00:33 +0100 + +mutt (1.5.17-1) unstable; urgency=low + + [ Adeodato Simó ] + * Move the packaging back to Bazaar, adjust X-VCS-* accordingly. + + [ Christoph Berg ] + * Mention libsasl2-modules-gssapi-mit in README.Debian. (Closes: #433425) + * Call autoreconf at build time, drop the autotools-update patch. + * Update menu file, add lintian override file. + * Refresh patches. + + * New upstream version: + + fix segfaults with single byte 8-bit characters in index_format. + (Closes: #420598, Mutt: #2882) + + properly render subject headers with encoded linefeeds. + (Closes: #264014, Mutt: #1810) + + only calls gnutls_error_is_fatal when gnutls_record_recv returns a + negative value. (Closes: #439775, Mutt: #2954) + + Large file support for mutt_pretty_size(). + (Closes: #352478, #416555, Mutt: #2191) + + Do not consider empty pipes for filtering in format strings. + (Closes: #447340) + + -- Christoph Berg Sat, 03 Nov 2007 23:00:04 +0100 + +mutt (1.5.16-3) unstable; urgency=medium + + * Fix the maildir-mtime patch change in 1.5.14+cvs20070403-1 that broke + new mail message count in IMAP folders. (Closes: #421468, #428734, #433275) + + -- Adeodato Simó Thu, 19 Jul 2007 23:41:02 +0200 + +mutt (1.5.16-2) unstable; urgency=low + + * Finally a new unstable version :) + * Disable gpgme backend again, it needs two "optional" libs we do not want + to pull into "standard" now, and it is still somewhat buggy. + Reopens: #263443. + * Use gdbm instead of bdb for the cache files. + * Enable sensible_browser_position patch. + + -- Christoph Berg Thu, 28 Jun 2007 21:58:47 +0200 + +mutt (1.5.16-1) experimental; urgency=low + + * New upstream version. + * compressed-folders: grab updated patch, thanks Roland. + + -- Christoph Berg Thu, 14 Jun 2007 10:54:56 +0200 + +mutt (1.5.15+20070608-1) experimental; urgency=low + + * Muttrc.head: Temporarily set pipe_decode in the \cb urlview macro. + Closes: #423640. + * Apply patch by pywatson@gmail.com to strdup strings when sorting. + Mutt: #2515, Closes: #196545. + + -- Christoph Berg Fri, 08 Jun 2007 11:19:08 +0200 + +mutt (1.5.15+20070515-1) experimental; urgency=low + + * New snapshot. + + Removed hardcoded pager progress indicator and add %P format code to + $pager_status which contains the same information. + Mutt: #2087, Closes: #259145. + * $smime_verify_opaque_command: fallback to -noverify. + Mutt: #2428, Closes: #420014. + + -- Christoph Berg Thu, 17 May 2007 14:15:48 +0200 + +mutt (1.5.15+20070412-1) experimental; urgency=low + + * New snapshot: + + Avoid altering the argument to mutt_complete() when completion fails. + Mutt: #2871, Closes: #367405 + + Allow reply-hook to use ~h when replying from the index. + Mutt: #2866, Closes: #362919 + + Exit with a nonzero value if sending a message in batch mode fails. + Mutt: #2709, Closes: #273137 + + Make mutt more posixly-correct. Mutt: #1615, Closes: #204904 + + -- Christoph Berg Thu, 12 Apr 2007 17:04:05 +0000 + +mutt (1.5.14+cvs20070403-1) experimental; urgency=low + + * set ssl_ca_certificates_file="/etc/ssl/certs/ca-certificates.crt". + * Use /etc/ssl/certs/ca-certificates.crt as smime_ca_location if there is + none in ~/.smime/ (Closes: #255653). + * New snapshot: + + Make mutt_edit_file display error if editor return is non-zero + (Closes: #209244). + + Use ~/.muttrc as the default alias_file if no user muttrc exists + (Closes: #226500). + + Reset list.name before each list response in folder browser + (Mutt: #2444, Closes: #377783). + + Fix segfault when trying to read header cache if cwd does not exist + (Mutt: #2714, Closes: #387560). + + Make message cache write to temporary location until file is complete + (Closes: #394383). + + Use RECENT for first mailbox check if header cache check fails + (Closes: #372512). + * Patches: + + maildir-mtime: refreshed. + + -- Christoph Berg Tue, 3 Apr 2007 20:54:35 +0200 + +mutt (1.5.14+cvs20070321-1) experimental; urgency=low + + * Move source package to http://hg.debian.org/hg/pkg-mutt/debian-mutt. + * debian/control: Add XS-Vcs fields. + * New snapshot: + + More space for the "help" string (Closes: #415277). + + --buffy-size is a config option, $check_mbox_size (Closes: #379472). + * Patches: + + gpg.rc: upstream ships without absolute paths, our patch is much simpler + now. + + compressed-folders: refreshed. + * Mention /etc/Muttrc defaults in documentation (Closes: #388667). + * debian-ldap-query: Support middle names (Closes: #415653). + + -- Christoph Berg Wed, 21 Mar 2007 21:54:08 +0100 + +mutt (1.5.14+cvs20070315-1) experimental; urgency=low + + * New upstream snapshot (now from mercurial). + + send_charset supports charset-hook'd charsets (Closes: #152444). + + Regex for color patterns can be > 256 chars long (Closes: #229801). + + Reduces massive strcat use (Closes: #290701). + + Uses realpath of folders in the cache (Closes: #298121). + + Wraps help correctly on utf-8 terminals (Closes: #328921). + + Fixes typos in muttrc.5 (Closes: #366413). + + Requery IMAP capabilities after login (Closes: #384076). + + Various mutt.1 updates (Closes: #332803, #355912, #366413, #394256). + + The key binding documentation is now auto-generated, thereby documenting + some missing functions (Closes: #413144). + + Previously fixed: IMAP hangs (Closes: #413715). + * Split up Muttrc into separate files in /etc/Muttrc.d/. + * charset.rc: iconv-hooks for some commonly misused charsets + (Closes: #402027). + * Add compatibility alias file_charset for attach_charset (got renamed when + the assumed-charset patch went upstream). + * Patches: + + compressed-folders: synced with upstream. + + compressed-folders.ranty-fix: removed, went upstream. + * Packaging: + + Use quilt.make. + + Move patchlist sorting into patchlist.sh. + + -- Christoph Berg Thu, 15 Mar 2007 14:11:31 +0100 + +mutt (1.5.14+cvs20070301-1) experimental; urgency=low + + * New upstream snapshot. Hilights: + + Now features ESMTP support, yay! + + PKA support via gpgme. + + Ability to save history. + * Enable gpgme backend (Closes: #263443). + * Move mail-transport-agent from Depends to Recommends (Closes: #356297). + * /etc/Muttrc: + + Do not unset write_bcc (Closes: #304718). + + Do not unset use_from and use_domain (Closes: #283311, #398699). + + Add quotes for compressed folder hooks (Closes: #238034), + + mime_lookup application/octet-stream. + * Patches: + + assumed-charset: removed, applied upstream. + + xtitles: Removed a comment on the default of xterm_set_titles (mentioned + in #366413). + * colors.angdraug: Fix spelling (Closes: #295241). + * gpg.rc: add full path for pgpewrap (Closes: #396207). + * Update copyright holders. + + -- Christoph Berg Thu, 1 Mar 2007 22:48:53 +0100 + +mutt (1.5.13+cvs20070215-1) experimental; urgency=low + + * Update to a CVS snapshot: + Closes: #47284: newlines/spaces are removed from custom multiple header + lines + Closes: #397858: /usr/bin/mutt_dotlock: off-by-one error in mutt_dotlock.c + Closes: #400831: logic error in mutt-1.5.13/account.c + Closes: #404916: sort-mailbox by spam tag score sorting strangeness + Closes: #410678: crash when IMAP server skips messages during a FETCH + without a cast. + + * Patches: + + Reshuffle patches to move autotools-needing/updating to front. + + compressed-folders: refreshed. + + autotools-update: updated. + + tempfile-race, thread_pattern_in_UPDATING: removed, included upstream. + + New patches: + + ifdef: test for presence of features, patch by Cedric Duval. + + trash-folder, purge-message: trash folder support, also by Cedric Duval + (Closes: #263204). + + Patches shipped but not applied by default: + + chdir: change working directory. + + indexcolor: color index colums. + + w3mface: display X-Face headers using w3mimgdisplay. + + * Create /etc/Muttrc.d/ (Closes: #391961). + * Make sure reldate.h is found while building the docs. + + -- Christoph Berg Fri, 16 Feb 2007 02:04:35 +0100 + +mutt (1.5.13-2) experimental; urgency=low + + * Adding myself as uploader, thanks Dato. + * debian/rules: + + Actually support DEB_BUILD_OPTIONS=noopt. + + Do not touch stamp-h.in, touch PATCHES in clean. + * Patches: + + Moved xtitles to features/ and fixed a segfault (Closes: #365683). + + -- Christoph Berg Mon, 12 Feb 2007 18:37:44 +0100 + +mutt (1.5.13-1.1etch1) stable; urgency=low + + * Stable update. + * Grab patch from upstream: + Add imap_close_connection to fully reset IMAP state (Closes: #413715). + * Add myself to Uploaders, thanks Dato. + + -- Christoph Berg Tue, 15 May 2007 09:59:24 +0200 + +mutt (1.5.13-1.1) unstable; urgency=high + + * Non-maintainer upload. + * Add upstream patch to fix insecure temp file generation + (Closes: #396104, CVE-2006-5297, CVE-2006-5298). + + -- Christoph Berg Tue, 12 Dec 2006 14:49:24 +0100 + +mutt (1.5.13-1) unstable; urgency=low + + * New upstream release, with a new pattern to match full threads (see + NEWS.gz). + + -- Adeodato Simó Wed, 16 Aug 2006 15:22:53 +0200 + +mutt (1.5.12-1) unstable; urgency=low + + * New upstream release. Ship upstream's UPDATING file as NEWS.gz in + /usr/share/doc/mutt. + + -- Adeodato Simó Sat, 15 Jul 2006 02:49:50 +0200 + +mutt (1.5.11+cvs20060403-2) unstable; urgency=high + + * Fix CVE-2006-3242, stack-based buffer overflow when processing an overly + long namespace from the IMAP server. (Closes: #375828) + + -- Adeodato Simó Fri, 7 Jul 2006 15:01:28 +0200 + +mutt (1.5.11+cvs20060403-1) unstable; urgency=low + + * Update to CVS 2006-04-03, which finally: + + fixes segfault when changing to an IMAP folder and the mailbox name + is implicitly INBOX. (Closes: #351337, #353550) + + -- Adeodato Simó Tue, 4 Apr 2006 06:10:12 +0200 + +mutt (1.5.11+cvs20060330-1) unstable; urgency=low + + * Update to CVS 2006-03-30, which fixes the following bugs: + + IMAP cache works again with Courier. (Closes: #351220) + + does not segfault if external query command output contains spaces. + (Closes: #351258) + + does not segfault when replying from the view-attachments menu when a + reply-hook is in use. (Closes: #352357) + + default save location for attachments which specify a path in their name + is not `dirname $attachment` anymore, but $CWD. (Closes: #301236) + + * Switch to libdb4.4. (Closes: #355433) + + -- Adeodato Simó Mon, 3 Apr 2006 02:41:15 +0200 + +mutt (1.5.11+cvs20060126-2) unstable; urgency=medium + + * Make imap_idle default to off, since it does not work with dovecot from + stable, which a lot of people use; upstream will make this change before + 1.5.12. (Closes: #351263, #354902) + + * Ignore DKIM-Signature by default in /etc/Muttrc. (Closes: #354907) + + -- Adeodato Simó Thu, 2 Mar 2006 22:42:34 +0100 + +mutt (1.5.11+cvs20060126-1) unstable; urgency=low + + * Update to CVS 2006-01-26; since this includes a huge diff between + ChangeLog and ChangeLog.old (moved entries), prepare a new tarball. + Some worth-mentioning changes: + + + Mutt can now expand its own variables as it does with envvars; for + example, it's now possible to put something like this into a hook: + set sendmail="mysmtp -f $from". + + + Support for user-defined variables starting with my_; environment + variables take precedence, and expansion does not occur in shell-escape. + + + Pattern group support, as explained (only!) in: + + + + Loooots of improvments in the IMAP code, including sync speed-ups + (through pipelining), hcache stuff (eg. $imap_cachedir), and things + like $imap_idle and support for the "old" flag in IMAP folders. + + * Rework the package build system to fit personal preference: + + debhelperize debian/rules a bit more. + + drop dbs in favor of quilt; reorganize patches a bit. + + (NOTE: quilt means that dropping patches into debian/patches is + no longer enough to get them applied; they must be listed in the + debian/patches/series file.) + + * Adjustments to debian/control: + + use '*' for the bulleted list, instead of 'o'. + + build-depend on gawk instead of mawk, to have "nextfile". + + drop conflicts and replaces on packages that are not in woody. + + * Updated debian/copyright. + + * Added debian/watch. + + -- Adeodato Simó Thu, 2 Feb 2006 05:12:18 +0100 + +mutt (1.5.11-5) unstable; urgency=medium + + * Unbreak Mutt in Turkish locales (tr_TR): include patch from CVS to use the + proper strcmp function in several places. Upstream bug #2144, reported in + both BTS by Recai Oktas. (Closes: #343655) + + * Apply patch from Nik A. Melchior to fix formatting problem in muttrc(5). + (Closes: #343030) + + -- Adeodato Simó Fri, 23 Dec 2005 23:18:44 +0100 + +mutt (1.5.11-4) unstable; urgency=low + + * Update to CVS 2005-11-24 to fix the following bug (yay): + + + does not fail to open messages that contain base64-encoded inline PGP + bits (signature, encrypted hunk, or a key). (Closes: #340116) + + Also, do not report success to decrypt an inline PGP message when + decryption actually failed. + + * Again, update my e-mail address in debian/control, yada yada. + + -- Adeodato Simó Fri, 25 Nov 2005 02:50:20 +0100 + +mutt (1.5.11-3) unstable; urgency=low + + * Update to CVS 2005-11-01, with the following worth-of-mentioning goodies + (among others): + + + full read/write >2 GB mbox support. + + attachment counting patch merged upstream (%X in index_format); check + the "Attachment Searching and Counting" section in the manual for more + information. + + And the following bugs are fixed as well: + + + S/MIME keys can be selected from the menu. (Closes: #318470) + + clarified description of pop_checkinterval. (Closes: #320642) + + * Update my e-mail address in debian/control. + + -- Adeodato Simó Fri, 11 Nov 2005 02:16:11 +0100 + +mutt (1.5.11-2) unstable; urgency=low (but fixes critical bug not in testing) + + * The fix for coping with mboxes bigger than 2 GB introduced a bug affecting + at least powerpc (but not i386) which made mutt write Content-Length: 0 in + mboxes due to a un-updated %ld format specifier. This caused for mail to + be lost in the next mbox write. + + Apply a patch quickly provided by upstream (thanks, Brendan Cully!) that + makes mutt use the right format specifier. (Closes: #330474) + + * Update the compressed folders to the 1.5.11, which includes documentation + in XML format. + + -- Adeodato Simó Fri, 30 Sep 2005 01:15:28 +0200 + +mutt (1.5.11-1) unstable; urgency=low + + * New upstream release, fixing the following bugs: + + + ~h can match folded headers. (Closes: #319654) + + implements progress indication when uploading messages to an imap + folder. (Closes: #228713) + + limit pattern is properly displayed when zero messages matched. + (Closes: #242398) + + A further CVS pull (2005-09-24) fixes the following bugs: + + + can open mboxes bigger than 2 GB. (Closes: #296940) + + does not require GPG_TTY to be set in order to accept using the GnuPG + agent: it'll set the variable itself if not present. (Closes: #316388) + + does not segfault when replying to a message if content_type is unset. + (Closes: #329306) + + does not segfault with IMAP folder completion. (Closes: #329442) + + Packaging changes needed: + + + Upstream documentation now comes in XML, so changed Build-Dependency on + linuxdoc-tools-text and groff to xsltproc, docbook-xml, docbook-xsl and + links. Added patch debian/patches/doc_build_adjustments.diff to force + the use of links instead of lynx for generating the text version of the + manual, and to not ignore errors from links and xsltproc. + + + Changed --with-sasl2 to its new name --with-sasl in debian/rules; + removed extra hunk on debian/patches/patch-1.5.4.Md.sasl2-1arc. + + + Rediffed 080_Md.Muttrc, removed patch.asp.fix-bug-266493.1 (applied + upstream). + + + Temporarily removed documentation from the compressed-folders patch, + until upstream reacts to the move to XML. + + * Build against libgnutls12 (build-depend on libgnutls-dev instead of + libgnutls11-dev). (Closes: #323279) + + * Remove spurious dash in argument to -encrypt in smime_encrypt_command. + (Closes: #315319) + + -- Adeodato Simó Sun, 25 Sep 2005 23:11:59 +0200 + +mutt (1.5.10-1) unstable; urgency=low + + * New upstream release, fixing the following bugs: + + does not store gpg passphrase when signing or decrypting has failed, + since that probably means it was wrong. (Closes: #132548) + + does not fail to delete attachments in unencrypted mails. (Closes: + #302500) + + * New functionality overview or otherwise noticeable news: + + $imap_check_subscribed variable to add the list of subscribed folders to + the buffy list. + + $braille_friendly variable to make Mutt more usable for blind users. + + $imap_login variable in case the login name on the IMAP server is + different to the name of the account ($imap_user). + + -D command line option to dump current configuration, after all + initialization files have been read. + + $imap_force_ssl gone. + + an empty limit is now interpreted as a request to cancel the current + limit. + + * Patches: + + 080_Md.paths_mutt.man: adjusted; upstream build system puts now the + right paths in mutt.1 using @bindir@. Install mutt.1 instead of mutt.man + in debian/rules. + + 080_Md.Muttrc: don't set menu_move_off in /etc/Muttrc since the + compile-time default is now what we want (pre-1.5.7 compatible). + + edit-threads, current-shortcut, incomplete-mbyte: removed, integrated + upstream. + + maildir-mtime: s/if/ifdef/ to get it to apply. + + compressed-folders: updated to 1.5.10. + + * Upstream now builds "complete" documentation, i.e., for all features + whether enabled or not. Disable that for Debian. [patch.docs-match-config.h] + + * Build-Depend on autotools-dev and use updated config.{guess,sub} at build + time to fix FTBFS on GNU/kFreeBSD. (Closes: #302735) + + * Update Standards-Version to 3.6.2 (no changes required). + + * Set myself as the maintainer, and remove Marco from Uploaders as agreed + with him. + + -- Adeodato Simó Mon, 15 Aug 2005 15:51:55 +0200 + +mutt (1.5.9-2sarge2) stable-security; urgency=high + + * Fix buffer overflow in IMAP parsing code + + -- Moritz Muehlenhoff Wed, 28 Jun 2006 17:12:05 +0000 + +mutt (1.5.9-2sarge1) stable; urgency=low + + * For attachments marked for deletion after the message is sent, don't + remove them if the message is finally cancelled, or if the attachments + are dropped from the message prior to sending. (Closes: #332972) + + -- Adeodato Simó Tue, 31 Jan 2006 01:23:28 +0100 + +mutt (1.5.9-2) unstable; urgency=high + + * Added a missing Build-Depend on mawk. (Closes: #310039) + * Updated the Swedish translation. + + -- Adeodato Simó Sun, 22 May 2005 17:29:25 +0200 + +mutt (1.5.9-1) unstable; urgency=medium + + * New upstream release, though the previous upload already included most of + it because of the CVS pull. Do another one now (2005-04-03), including the + following bits from 1.5.10: + + several translation updates (de, id, nl, pl, ru). + + a patch by Daniel Jacobowitz to synchronise message flags before moving + messages. (Closes: #163616) + + * Also, the header cache patch is now fully integrated upstream, so drop it. + + * Don't set pipe_default in debian/patches/080_Md.Muttrc, and stick to + upstream's default (unset). (Closes: #300830) + + * Updated the compressed folders patch to version 1.5.9. + + * Updated patch 080_Md.Muttrc to restore the old behaviour of the index. + + -- Adeodato Simó Sun, 03 Apr 2005 20:08:39 +0200 + +mutt (1.5.8-1) unstable; urgency=low + + * New upstream release, with a CVS pull to get all the translation updates + that happen right after a release. New features worth mentioning: + + the PGP auto decode patch by Derek Martin has been accepted upstream, + so inline PGP messages are automatically verified/decrypted now if + $pgp_auto_decode is set. (Closes: #269699) + + IDN decoding can be disabled by unseting $use_idn (set by default). + + new hook 'send2-hook', which gets executed each time there is a change + in a message being composed. This permits, for example, to match against + recipients added manually after writing the mail, which wasn't possible + with 'send-hook' alone. + + Christoph Berg's menu_context patch is also included. Check the + $menu_context and $menu_move_off variables. + + * This version also includes the following fixes: + + message flags are not lost after editing a message. (Closes: #275060) + + IMAP folder paths ending with the delimiter are trimmed so that they + don't fail to open with some servers, e.g. Courier. (Closes: #277665) + + the correct charset is used when signing a forwarded message. + (Closes: #295528) + + correctly forget the S/MIME passphrase. (Closes: #300516) + + * Explicitly pass --enable-inodesort to ./configure, since upstream has + disabled it by default in this version. + + * Updated the compressed folders patch to version 1.5.8. + + * Dropped the adjust_line and adjust_edited_file patches from + extra-patches/mutt-ja-compat, incorporated upstream. Renamed + mutt-ja-compat to assumed-charset, since that's the only patch that + remains. + + * Lots of patches in the Debian package have been applied upstream, drop + them (16 in total). Worth mentioning is the gnutls patch. The + maildir_inode_sort patch has been adopted too, with the static functions + no longer being nested, which closes: #287744 (FTBFS with gcc-4.0). + + * Implemented a conf.d style directory for mutt: other packages or local + admins may now drop configuration snippets in /etc/Muttrc.d/*.rc and have + them sourced at the end of the default Muttrc. (Closes: #285574) + + * Updated the header cache patch to version 28. The size of this patch has + been drastically reduced, since the generic code and the IMAP support has + been incorporated upstream. + + * Updated the compressed folders patch to version 1.5.8. + + * Use mixmaster-filter by default. (Closes: #299060) + + -- Adeodato Simó Fri, 25 Mar 2005 21:55:52 +0100 + +mutt (1.5.6-20040907+3) unstable; urgency=high + + * Upload targeted at sarge to include some must-have fixes. + + * Include small patch to fix imap-related segfaults in ia64, due to a buffer + length being declared as int instead of size_t in the gnutls patch. Thanks + to David Mosberger for spotting the problem. (Closes: #234783, #285001) + [New file: upstream/extra-patches/gnutls.59.size_t-fix] + + * Include (finally!) a patch that really prevents decrypt-save from deleting + the message if the supplied password was wrong. (Closes: #275188) + [New file: upstream/patches/decrypt-save_non-empty-output] + + * Updated the header-cache patch to version 25, which includes a fix to make + it possible for hcache to talk to broken Lotus IMAP servers. (Closes: #282451) + [Modified file: upstream/extra-patches/header-cache] + + * The mutt BTS has been closed due to excessive spam in their debbugs + installation. Included the patch that substitutes flea and flea.1 by a + note that states so. + [New file: upstream/patches/empty-muttbug, + removed file: debian/patches/080_Md.muttbug] + + * Removed /usr/share/bug/mutt/presubj, now useless. + + * Added Domainkey-Signature to the list of ignored headers. + [Modified file: debian/patches/080_Md.Muttrc] + + -- Adeodato Simó Fri, 28 Jan 2005 19:02:58 +0100 + +mutt (1.5.6-20040907+2) unstable; urgency=medium + + * A "Let's procrastinate some important stuff and fix a bunch of mutt bugs + instead" release. + + * Include small patch to fix the Swedish translation, which was making + impossible to turn off pgp signing and/or encrypting. (Closes: #281265) + [New file: upstream/patches/i18n-sv-fix.diff] + + * Make the default Muttrc work out the box for people using gnupg-agent. + Wrote and applied a one-line patch to make the %?p? conditional escape + work correctly, patch forwarded upstream. (Closes: #277646) + [New file: debian/patches/patch.asp.%p-escape-agent-compatible.1] + + * Relocate the definition of the USE_GNUTLS macro, so that it gets passed to + the documentation build process too. Otherwise, options that end up in the + manual wouldn't match those that are really compiled in. (Closes: #278124) + [Modified files: debian/rules, upstream/extra-patches/gnutls.debian] + + * Honour /etc/alternatives/pager in the muttbug script. (Closes: #275448) + [Modified file: debian/patches/080_Md.muttbug] + + * Include patch by Nicolas François to + fix typo in muttrc.5. (Closes: #272579) + [New file: debian/patches/patch.nf.fix-bug-272579.1] + + * Updated the (formerly unmaintained) current-shortcut patch with a new + version by Christoph Berg . Now the actual used Fcc will be + shown instead of '^' when you folder-hook . 'set record="^"'. + [Modified file: upstream/extra-patches/current-shortcut] + + * Updated the header-cache patch to version 24. + + -- Adeodato Simó Wed, 17 Nov 2004 15:17:14 +0100 + +mutt (1.5.6-20040907+1) unstable; urgency=low + + * Updated to CVS snapshot 20040907 (includes updated ja translation). + + * The maildir-mtime patch is now NOT enabled by default, you need to set the + maildir_mtime variable in your ~/.muttrc. This variable has been necessary + since people with large maildirs over NFS experienced a large performance + impact with the mtime patch enabled. (Closes: #253261) + + * Updated the header cache patch to version 21. This fixes a file descriptor + leak which could cause problems for people who keep their mutt open for a + long time. Also includes support for per-folder cache: setting $header_cache + to a directory will enable it, and you should experience some performance + gains. + + * Included the current shortcut patch. It's completely unintrusive and + allows you to specify ^ as a shortcut for the current folder (e.g., in a + Fcc). (Closes: #253104) + + * Updated the autotools stuff. Include in it also stuff from patches, so + that --enable-foo options can be used in debian/rules. Put files directly + in extra/autotools and cp from there in debian/rules instead of using a + patch file (which was too big due to automake1.4/autoconf2.13 => 1.8/2.50 + migration). + + * debian/rules: + + use --enable-compresed --enable-hcache --without-gdbm in configure. + + copy autotools files from extra/autotools when unpacking, and emulate + the 000_Md.config.h.in patch. + + * debian/patches/: + + removed 000_Md.config.h.in, no longer needed since config.h.in is now + overwritten from extra/autotools. + + added patch.asp.fix-bug-266493.1, which makes mutt not wait for a + keypress to handle SIGWINCH in certain situations. (Closes: #123943, + #266493) + + -- Adeodato Simó Tue, 21 Sep 2004 01:39:22 +0200 + +mutt (1.5.6-20040818+1) unstable; urgency=low + + * The post-Sarge era officially begins for mutt. This mostly means + that patch inclusion policy will untighten a bit. + + * Added the maildir/imap header caching patch by Thomas Glanzmann, see: + . For a quick + start, read documentation for the $header_cache variable. + (Closes: #242762, #255475) + + * Added the maildir-mtime patch by Dale Woolridge, see + . This patch should make happy + users that use maildir and have $sort_browser=reverse-date. + (Closes: #253261) + + * Reorganized patches location: + + patches not written by the mutt maintainers are now in the + upstream/extra-patches directory. + + each patch in that directory now contains a preamble listing: + - the patch author + - the patch home page + - last time patch was updated + - exact URL to the patch file + - applied changes, if any + + all preambles are available in the doc/README.Patches file, and + debian/copyright now points to this file too. + + * Other changes in upstream/extra-patches/: + + updated the edit-threads patch. + + updated the compressed-folders patch. + + * Updated to CVS snapshot 20040818: + + various memory leaks spotted and fixed. + + several translations updated: pl, sv, fr, id, nl, de, ca, cs. + The Czech translation addresses a bad chosen shorcut in the crypt menu, + and thus closes: #140639. Updated German translation closes: #265120. + + fix some UI flaws in the new PGP and S/MIME menus which could easily + make the user send in clear mail which was meant to be signed and/or + encrypted (the (e)ncrypt, (s)ign and (b)oth commands were toggles). + Also renamed the (f)orget action to (c)lear for newbie's benefit; accept + the (f) key for long time users' benefit. + + make mutt not hang if STARTTLS fails to complete the SSL handshake. + + try all methods in $imap_authenticators when one of them fails; + previously mutt would give up upon the first of them failing. + + * debian/: + + scripts/vars: add upstream/extra-patches to SRC_PATCH_DIR. + + control: Build-Depend on libdb4.2-dev for the header-cache patch. + + rules: call scripts/patch-preamble to create the README.Patches file. + + copyright: add pointer to README.Patches, where patch authors are listed. + + * debian/patches/: + + updated 000_VERSION to reflect new snapshot date. + + removed obsolete #defines from 000_Md.config.h.in. Added #include + "debian-config.h" there, which is used by upstream/extra-patches/*.debian. + + removed patch.asp.fix-bug-260578.1, included upstream. + + * debian/rules: sort the PATCHES file, which is printed by `mutt -v`. + + -- Adeodato Simó Sat, 21 Aug 2004 20:53:39 +0200 + +mutt (1.5.6-20040803+1) unstable; urgency=low + + * Updated to CVS snapshot 20040803: + + fixes the code that closed #213412. + * debian/control: + + Rebuilt against gnutls11. (Closes: #263067, #263625) + + List myself in Uploaders field. + * debian/patches/: + + updated 000_VERSION to reflect new snapshot date. + + removed patch-1.5.6.tt.compat.1.asp.fix.1, which was not meant to be + included in the last upload. (Closes: #261951) + + update the gnutls patch to include TLS support for POP3 as well. Patch + provided by Alexander Neumann . (Closes: #260638) + + -- Adeodato Simó Thu, 5 Aug 2004 18:13:33 +0200 + +mutt (1.5.6-20040722+1) unstable; urgency=high + + * Updated to CVS snapshot 20040722: + + bugfixes: + - does not segfault when chdir'ing to a directory without read + permission. (Closes: #237426) + - does not segfault when applying check-traditional-pgp to multiple + messages. (Closes: #257277) + - uses the right From address when composing a new message from the + pager and $reverse_name is set. (Closes: #249870) + - initial IMAP header download does not take quadratic time on the + number of messages. (Closes: #213412) + + new functionality: + - support for spam-scoring filters (see §3.24 of the fine manual). + - $include_onlyfirst: controls whether or not Mutt includes only the + first attachment of the message you are replying. + - $hide_thread_subject: when unset, mutt will show the subject for all + messages in a thread. + - uses List-Post header when doing list-reply. (Initial RFC 2369 support, + closes: #49048) + * debian/patches/: + + updated 000_VERSION to reflect new snapshot date. + + updated the following patches to apply cleanly: + - 001_patch-1.5.4.rr.compressed.1 [Makefile.in] + - 002_patch-1.5.5.1.admcd.gnutls.59 [globals.h] + - patch-1.5.3.cd.edit_threads.9.2-1arc [mutt.h] + + updated patch-1.5.6.tt.compat.1 (does not close #259145). + + removed patch-1.5.3.Md.gpg-agent, issue fixed upstream. + + added patch-1.5.6.helmersson.incomplete-mbyte.2 by Anders Helmersson + to avoid passing incomplete multibyte sequences to regexec(), which can + cause segfaults due to libc6 Bug#261135. (Closes: #254314, #260623) + [Yes, this is a sequel, not a dejà-vu.] + + added patch.asp.fix-bug-{210679,254294,258621,260578}.1, which fix + several minor issues unaddressed by upstream for some time. All patches + submitted upstream. (Closes: #210679, #254294, #258621, #260578). + * debian/rules: + + be robust to any locale by exporting LC_ALL=C. (Closes: #253048) + + touch some autotools files to prevent having them to be built again. + * Using "urgency=high" at maintainer's discretion + + -- Adeodato Simó Wed, 21 Jul 2004 19:31:55 +0200 + +mutt (1.5.6-20040523+2) unstable; urgency=low + + * Renamed patch-1.5.5.1.tt.compat-fix to patch-1.5.5.1.tt.compat.2-fix. + (Closes: #253048) + + -- Marco d'Itri Mon, 7 Jun 2004 00:45:40 +0200 + +mutt (1.5.6-20040523+1) unstable; urgency=low + + * This release is based on the work of Adeodato Simó . + * Updated to CVS snapshot 20040523: + + now mutt includes better support for inline/traditional signing and + encrypting. See http://www.woolridge.ca/mutt/pgp-menu-traditional.html + for details. (Closes: #190204) + + sourcing output of a command works again. (Closes: #247007) + + corrected .PP usage in flea.1 and mbox.5. (Closes: #237827) + + do not eat chars on rfc822-valid From:address lines (i.e., when there + is no space between the colon and address; fixes the already archived + #226759). + * debian/patches/: + + added 000_VERSION: reflect CVS snapshot date. + + removed 081_nbrown.auth_imap_plain: included upstream. + + added patch-1.5.5.1.tt.compat-fix: introduces a fix for the compat + patch which prevents mutt from segfaulting when there is binary junk + in headers. (Closes: #233315, #247366, #249588) + + removed patch-1.5.4.Md.gpg_by_keyid-1arc: no longer needed. + (Closes: #250108, #248994) + + added 004_ranty.fix-compressed: written some time ago by Manuel Estrada + to prevent mutt from deleting a message if saving to a compressed folder + fails. In memoriam. (Closes: #210429) + + added patch-1.5.6.asp.pgp_getkeys: set pgp_getkeys_command in Muttrc. + Currently commented out because of #172960. (Closes: #237691) + + 080_Md.Muttrc: make colors respect terminal scheme. (Closes: #86393) + * debian/rules: pass --enable-debug to configure. (Closes: #198073) + + -- Marco d'Itri Sun, 6 Jun 2004 01:17:14 +0200 + +mutt (1.5.6-1) unstable; urgency=low + + * New upstream release. Old configuration files may become incompatible, + see NEWS.Debian.gz for details. + * Added debian/NEWS. + * debian/patches/: + - updated patch-1.5.4.Md.gpg_by_keyid-1arc - pgp_export_command uses %r + instead %k. (Closes: #223960) + - updated 002_patch-1.5.5.1.admcd.gnutls.59 - mutt can save server's + certificate. (Closes: #228607, #234623, #236886) + - removed 000_VERSION (not needed in this release). + - removed 004_patch-1.5.5.1.Md.libgnutls10 - included in + 002_patch-1.5.5.1.admcd.gnutls.59. + - added 081_nbrown.auth_imap_plain - mutt can authenthicate itself to imap + server via sasl2 using PLAIN method, thanks to Neil Brown. + (Closes: #206078, #214758) + - removed patch-1.5.4.helmersson.incomplete_multibyte because it's broken. + (Closes: #244549) + - removed 003_patch-1.4.admcd.gnutlsdlopen.53, now the mutt binary will + be linked with libgnutls. (Closes: #228279, #228323, #230287) + - updated patch-1.3.27.bse.xtitles.1 with patch-1.5.5.1.nt.xtitles.3.ab.1. + * Update the default MTA: Depend on exim4 | mail-transport-agent. + (Closes: #228560) + * This release is the work of Artur R. Czechowski. + + -- Marco d'Itri Sun, 2 May 2004 18:02:10 +0200 + +mutt (1.5.5.1-20040112+1) unstable; urgency=medium + + * Build-Depend on libidn11-dev instead of libidn9-dev + and libgnutls10-dev instead of libgnutls7-dev. (Closes: #226910, #227426) + * Updated to CVS snapshot 20040112: + + fixed manual (Closes: #226936) + + fixed pgp_retainable_sigs (Closes: #226424) + * New patch patch-1.4.1.tt.compat.1-ter, a part of mutt-ja which allows + configuring a default character set to be used for non-MIME messages. + (Closes: #222191) + * Added a note about temporary files to README.Debian. + (Closes: #141143, #222125) + * New patch 100_arc.smime_descripitive_messages which adds some + error messages to smime_keys.pl. (Closes: #226696) + * Conflicts/Replaces mutt-utf8. + * New patch 004_patch-1.5.5.1.Md.libgnutls10. + * This release is the work of Artur R. Czechowski. + + -- Marco d'Itri Sat, 17 Jan 2004 17:50:16 +0100 + +mutt (1.5.5.1-20040105+1) unstable; urgency=low + + * New upstream release: + + fixed infinite loop during attachment saving. (Closes: #219314, #224654) + * Updated to CVS snapshot 20040105: + + fixed a lot of crashes/coredumps. + (Closes: #141214, #141468, #192341, #197322, #219499, #223663) + + honor Reply-To while generating Mail-Followup-To headers. + (Closes: #182526) + + improved colouring of thread tree. (Closes: #219594) + + fixed retrieving mail via preauth imap over ssh. (Closes: #209025) + * debian/rules: added extra-clean target to delete *.orig and *.rej files + when debian/sys-build.mk make-diff is called. + * Modified patches to apply without conflicts: + + 001_patch-1.5.4.rr.compressed.1 + + 003_patch-1.4.admcd.gnutlsbuild.53 + * Suggests libgnutls7 instead libgnutls5 (Closes: #217716), updated + README.Debian. + * Added README.SMIME. (Closes: #222903) + * smime_keys moved to /usr/bin. (Closes: #222905) + * Suggests ca-certificates and openssl. + * Killed mutt-utf8. + * This release is the work of Artur R. Czechowski. + + -- Marco d'Itri Tue, 6 Jan 2004 15:38:58 +0100 + +mutt (1.5.4+20031024-1) unstable; urgency=medium + + * New CVS snapshot. (Closes: #133021, #207242, #208430, #213007, #213917) + * Fix FTBFS bug in debian/control. (Closes: #216508) + * Compiled with libgnutls7. (Closes: #209722) + * New patch patch-1.5.4.fw.maildir_inode_sort. (Closes: #212664) + * New patch patch-1.5.4.helmersson.incomplete_multibyte. + (Closes: #187991, #188605) + * New patch patch-1.5.4.Md.gpg_by_keyid. (Closes: #210668) + * Removed README.NFS, as it talks about 2.0 and 2.2 kernels. + * Removed reference to $AGENT_SOCKET from README.Debian. (Closes: #215412) + + -- Marco d'Itri Fri, 24 Oct 2003 15:06:01 +0200 + +mutt (1.5.4+20030913-1) unstable; urgency=medium + + * New CVS snapshot. (Closes: #210354, #210423) + * Added patch-1.5.3.vk.pgp_verbose_mime. (Closes: #201306) + + -- Marco d'Itri Sat, 13 Sep 2003 15:59:49 +0200 + +mutt (1.5.4+20030817-1) unstable; urgency=medium + + * New CVS snapshot, packaged with the great help of arturcz@hell.pl + (co-maintainer). (Closes: #138966) + * Switched to libsasl2. (Closes: #201210) + * Removed hcache patch. + (Closes: #189999, #194843, #196832, #196978, #197182, #199052) + * Updated gnutls patch to 002_patch-1.5.4.admcd.gnutls.56. (Closes: #196117) + * Removed libdb4.0-dev from Build-Depends (Closes: #204015) + * /etc/Muttrc: call gpg without a path. (Closes: #193756) + * locales upgraded to Recommended status. + * Added an icon. (Closes: #188726) + * Make pgp_import_command nonverbose. (Closes: #195310) + + -- Marco d'Itri Sun, 17 Aug 2003 15:56:55 +0200 + +mutt (1.5.4-1) unstable; urgency=high + + * New upstream release. (Closes: #142266, #148858, #169740, #178563) + * Fixes remotely exploitable buffer overflow in the IMAP code. + (Core Security Technologies Advisory CORE-2003-03-04-02.) + * Removed again BUFFY_SIZE support, too many people complained. + Added a note to README.Debian. + * Provides: imap-client. (Closes: #183351) + * Always include the whole certificates chain in S/MIME mail to comply + with RFC 2315 spirit. (Closes: #182477) + * Applied ME's headers caching patch (provided by Nicolas Bougues). + * Fixed pgpewrap core dump. (Closes: #170666) + + -- Marco d'Itri Thu, 20 Mar 2003 15:06:13 +0100 + +mutt (1.5.3-3) unstable; urgency=medium + + * Recompiled to fix missing dependencies information. (Closes: #181167) + + -- Marco d'Itri Sun, 16 Feb 2003 11:46:46 +0100 + +mutt (1.5.3-2) unstable; urgency=medium + + * Compiled with BUFFY_SIZE. (Closes: #179970) + * Stop generating escape codes in the manual. (Closes: #167006) + * Set the default editor as specified by policy. (Closes: #177245) + + -- Marco d'Itri Fri, 14 Feb 2003 19:13:15 +0100 + +mutt (1.5.3-1) unstable; urgency=low + + * New upstream release (Closes: #112865, #165397, #168907, #169018). + * Suggests ispell | aspell (Closes: #175324). + * Add & and = to the URL coloring regex (Closes: #169646). + * Removed message-hook for clearsigned PGP messages (Closes: #168275). + * Removed obsolete patch-1.4.0.dw.pgp-traditional.2. + * By popular (?) demand, use /etc/mailname and only if it fails fall + back to gethostbyname(3) and then to uname(2) (Closes: #167549). + + -- Marco d'Itri Tue, 14 Jan 2003 18:31:01 +0100 + +mutt (1.4.0-5) unstable; urgency=medium + + * Try a different strategy to find the FQDN. Stop using /etc/mailname. + (Closes: #166060). + * Suggests: mixmaster (Closes: #166360). + * Updated copyright file (Closes: #163783). + * *Really* enable --enable-imap-edit-threads (Closes: #162352). + * Ignore Microsoft Thread-* header (Closes: #161473). + * Do not ask the password if gpg-agent or quintuple-agent are active + (Closes: #161508). + * Applied patch-1.5-me_editor.1 (Closes: #72318). + * Applied patch-1.5.1.tlr.mailboxes-overflow.1 (Closes: #153751). + * Applied patch-1.4-me.regex_doc.1 (Closes: #162550). + * Removed patch-1.3.15.sw.pgp-outlook.1 in favour of + patch-1.4.0.dw.pgp-traditional.2. All "traditional" PGP messages now + use text/plain. + + -- Marco d'Itri Tue, 29 Oct 2002 14:38:52 +0100 + +mutt (1.4.0-4) unstable; urgency=medium + + * Recompile with newer libgnutls5 (Closes: #160114). + * Updated contrib/colors.angdraug. + * Updated 010_patch-1.4.admcd.gnutls.55. + + -- Marco d'Itri Tue, 17 Sep 2002 16:07:50 +0200 + +mutt (1.4.0-3) unstable; urgency=medium + + * *Really* compile mutt with --enable-imap-edit-threads (Closes: #154864). + * *Really* merge the Maildirs new messages patch (Closes: #151582). + * Recompile with libgnutls5 (Closes: #152787, #157120). + + -- Marco d'Itri Sun, 18 Aug 2002 16:59:06 +0200 + +mutt (1.4.0-2) unstable; urgency=low + + * Update GNUTLS patch and link against gnutls4. (Closes: #152141). + * Link mutt-utf8 against libncursesw5 instead of slang1a-utf8. + * set pipe_decode=yes in /etc/Muttrc (Closes: #151460). + * Compile mutt with --enable-imap-edit-threads (Closes: #150274). + * Make debian/scripts/lib work even if $CDPATH is set (Closes: #152678). + * Merged patch to fix spurious new message notifications with Maildirs + (Closes: #151582). + + -- Marco d'Itri Fri, 12 Jul 2002 03:34:48 +0200 + +mutt (1.4.0-1) unstable; urgency=medium + + * New upstream release (Closes: #146889, #149348, #148558). + * Updated patch edit_threads.9.2 (Closes: #146451). + * Priority of mutt-utf8 changed from optional to extra. + + -- Marco d'Itri Mon, 10 Jun 2002 21:26:08 +0200 + +mutt (1.3.28-2) unstable; urgency=medium + + * Moved into main. + * Suggests: libgcrypt1, gnutls3 (Closes: #140970). + * Added patch from CVS to fix crash with UTF-8 locales (Closes: #126336). + + -- Marco d'Itri Sat, 6 Apr 2002 18:35:01 +0200 + +mutt (1.3.28-1) unstable; urgency=medium + + * New upstream release (Closes: #138200). + * Updated GNUTLS patch. + * Make flea(1) work even if bug(1) is not installed (Closes: #138273). + * Added /usr/share/bug/mutt/presubj file (Closes: #138274). + + -- Marco d'Itri Tue, 19 Mar 2002 14:42:39 +0100 + +mutt (1.3.27-5) unstable; urgency=medium + + * Added build dependancy on linuxdoc-tools-text (Closes: #137890). + * Use sensible-pager instead of zless to read the manual (Closes: #136206). + * Added example colors scheme contributed by Dmitry Borodaenko. + + -- Marco d'Itri Mon, 11 Mar 2002 19:40:20 +0100 + +mutt (1.3.27-4) unstable; urgency=high + + * Recompiled against new slang packages (Closes: #133255, #134115). + * Added patch-1.3.27.me.aliasdups.1 (Closes: #133559). + * Updated GNUTLS patch. + * Added missing flea(1) symlink (Closes: #133646). + + -- Marco d'Itri Sun, 17 Feb 2002 03:27:50 +0100 + +mutt (1.3.27-3) unstable; urgency=high + + * Recompiled against new slang and packages (Closes: #132644). + * Title bar is changed on more xterm variants (Closes: #131178). + * Removed obsolete advice about shred from README.Debian (Closes: #132786). + + -- Marco d'Itri Sun, 10 Feb 2002 13:26:20 +0100 + +mutt (1.3.27-2) unstable; urgency=high + + * Updated GNUTLS patch (Closes: #131386, #131424). + * Added patch-1.3.27.me.listfrom_doc.1 (Closes: #45706). + * Added missing -fPIC (Closes: #131209). + * Added missing commas in charset.c (Closes: #130481). + + -- Marco d'Itri Thu, 31 Jan 2002 15:23:34 +0100 + +mutt (1.3.27-1) unstable; urgency=medium + + * New upstream release. + * Small fix to pt_BR translation (Closes: #130416). + * Hide gpg status messages (Closes: #127519). + + -- Marco d'Itri Tue, 22 Jan 2002 20:18:21 +0100 + +mutt (1.3.26-1) unstable; urgency=medium + + * New upstream release. + * Removed patch-1.3.25.chip.fast-limited-threads because the patched + code has changed. + + -- Marco d'Itri Sat, 19 Jan 2002 19:30:13 +0100 + +mutt (1.3.25-5) unstable; urgency=high + + * Added build dependancy on groff (Closes: #129605, #129698). + + -- Marco d'Itri Thu, 17 Jan 2002 19:03:29 +0100 + +mutt (1.3.25-4) unstable; urgency=high + + * Forced build dependancy on newer gnutls-dev (Closes: #129283). + * Updated GNUTLS patch (Closes: #129291). + + -- Marco d'Itri Wed, 16 Jan 2002 19:47:45 +0100 + +mutt (1.3.25-3) unstable; urgency=medium + + * Force documentation rebuilding (Closes: #128758, #129045). + * TLS patch update from Andrew McDonald (Closes: #125924, #128718, #129039). + * Suggests gnutls0. + * Fixed typo in manual (Closes: #128836). + * Added patch-1.3.25.chip.fast-limited-threads, which is supposed to + speed up limited threaded display (Closes: #128174). + * Added patch-1.3.25.tlr.attach_overwrite.1 (Closes: #126122). + + -- Marco d'Itri Sun, 13 Jan 2002 17:18:21 +0100 + +mutt (1.3.25-2) unstable; urgency=low + + * Force dependancy on slang1-utf8 (Closes: #127938). + * Enable again optimization (Closes: #127653, #127682). + * Enable {open,close,append}-hook by default again (Closes: #127894). + + -- Marco d'Itri Sun, 6 Jan 2002 19:35:57 +0100 + +mutt (1.3.25-1) unstable; urgency=high + + * New upstream release, fixes remotely exploitable buffer overflow. + * Fixed mutt_dotlock permissions + (Closes: #127264, #127265, #127278, #127308, #127312, #127357). + + -- Marco d'Itri Wed, 2 Jan 2002 18:49:54 +0100 + +mutt (1.3.24-3) unstable; urgency=medium + + * A new mutt-utf8 package is generated (Closes: #99898). + * Added patch-1.3.24.de.new_threads.3 to fix segfaults while sorting + thread (Closes: #123658). + * Added --status-fd option to gpg command line and working $pgp_good_sign + variable to default /etc/Muttrc (see #110414 and #123273 for details). + * Updated thread editing patch to patch-1.3.24.cd.edit_threads.8. + * Added patch-1.3.24.appoct.2 to lookup application/octet-stream files + extensions in mime.types. + * Fixed coredump processing in flea(1) (Closes: #123081). + * Removed obsolete contrib/pgp-macros. + + -- Marco d'Itri Thu, 27 Dec 2001 03:32:16 +0100 + +mutt (1.3.24-2) unstable; urgency=medium + + * Added better GNUTLS code from Andrew McDonald. + * Added again threads editing patch. + * Enable {open,close,append}-hook by default again (Closes: #115473). + * Removed default $pgp_good_sign from Muttrc (related to #110414). + + -- Marco d'Itri Wed, 5 Dec 2001 02:26:13 +0100 + +mutt (1.3.24-1) unstable; urgency=high + + * New upstream release (Closes: #74484, #98630, #114938). + * Added conflict with gnutls < 0.2.9 (Closes: #121645). + * Fixed mailspell script (Closes: #120446). + * Removed 000_patch-1.3.22.1.cd.edit_threads-5.1. + * Added 000_patch-1.3.23.1.ametzler.pgp_good_sign (Closes: #110414). + + -- Marco d'Itri Fri, 30 Nov 2001 22:52:42 +0100 + +mutt (1.3.23-4) unstable; urgency=high + + * Added Build Dependandcies on libgcrypt-dev and zlib1g-dev + (Closes: #119309). + * Added a comment to README.Debian about stunnel (Closes: #115421). + * Removed safefilter script (Closes: #118630). + * Added the broken-outlook-pgp-clearsigning patch (Closes: #120090). + + -- Marco d'Itri Fri, 30 Nov 2001 20:49:02 +0100 + +mutt (1.3.23-3) unstable; urgency=high + + * Moved to non-US (Closes: #118294). + + -- Marco d'Itri Mon, 5 Nov 2001 12:06:43 +0100 + +mutt (1.3.23-2) unstable; urgency=medium + + * Added SSL support using GNUTLS. WARNING: requires the CVS library! + * Added unpack target to debian/rules (Closes: #115765). + * Fixed account-hook (Closes: #117125). + * Added default compression hooks to /etc/Muttrc (Closes: #115473). + + -- Marco d'Itri Sun, 4 Nov 2001 13:59:25 +0100 + +mutt (1.3.23-1) unstable; urgency=medium + + * New upstream release (Closes: #106864, #106229, #110414) + (Closes: #69135, #89195, #92651, #97319, #98627). + * Added README.NFS note from the liblockfile maintainer (Closes: #96788). + * Fixed gpg operations (Closes: #113458, #114163, #114938). + * Fixed compressed folder patch (Closes: #114199). + * Highlight https URLs too (Closes: #113791). + + -- Marco d'Itri Wed, 10 Oct 2001 02:30:15 +0200 + +mutt (1.3.22-2) unstable; urgency=medium + + * Renamed dotlock.1 (Closes: #112545). + * Fixed the threads editing patch (Closes: #112554). + + -- Marco d'Itri Wed, 19 Sep 2001 12:18:47 +0200 + +mutt (1.3.22-1) unstable; urgency=low + + * New upstream release (Closes: ). + * Old bugs fixed in the last NMU (Closes: #29884, #101075, #101484) + (Closes: #101890, #101890, #102439, #106863, #104469, #105391) + (Closes: #110262). + * Fixed bashism in vars.build (Closes: #104137). + * Updated libssl package name in README.Debian (Closes: #96564). + * Added a note about temporary files in README.Debian (Closes: #89277). + * Added a note about locales in README.Debian (Closes: #105545). + * Included threads editing patch (Closes: #111291). + * Fixed paths in mutt.man (Closes: #110462). + + -- Marco d'Itri Sat, 15 Sep 2001 17:33:51 +0200 + +mutt (1.3.19-1) unstable; urgency=low + + * New upstream release (Closes: #81155, #93830, #95426, #100298, #101075). + (Closes: #101451). + * Suggests locales instead of i18ndata (Closes: #98814). + + -- Marco d'Itri Tue, 22 May 2001 13:42:34 +0200 + +mutt (1.3.18-1) unstable; urgency=low + + * New upstream release (Closes: #81155, #92234, #90400, #92860, #95426) + (Closes: #88358, #92846, #92847, #91979, #97658, #98014). + + -- Marco d'Itri Tue, 22 May 2001 13:42:34 +0200 + +mutt (1.3.17-1) unstable; urgency=high + + * New upstream release (Closes: #89011, #82372, #86228, #83187). + + -- Marco d'Itri Sun, 1 Apr 2001 22:09:27 +0200 + +mutt (1.3.15-2) unstable; urgency=high + + * Built again without linking libiconv. + + -- Marco d'Itri Wed, 14 Feb 2001 23:02:23 +0100 + +mutt (1.3.15-1) unstable; urgency=low + + * New upstream release (Closes: #81873, #81155, #81640, #76922). + * Added more headers to the ignore list. + * Removed dh_suidregister (Closes: #84826). + * Removed US-ASCII charset-hook (Closes: #81240). + * Commented all "color header" lines in the default /etc/Muttrc. + * Fixed default colors on white background xterm. + + -- Marco d'Itri Mon, 12 Feb 2001 23:34:41 +0100 + +mutt (1.3.12-2) unstable; urgency=low + + * Fixed typo in muttbug (Closes: #79230). + * Added menu hints (Closes: #80067). + * Compiled with libsasl (Closes: #78746). + + -- Marco d'Itri Sun, 24 Dec 2000 12:18:23 +0100 + +mutt (1.3.12-1) experimental; urgency=low + + * Packaged the development tree (Closes: #60459, #73050, #75885, #77856). + * Documented the fact that pgp_encryptself is gone and will not be back + (Closes: #47833, #69221). + + -- Marco d'Itri Tue, 28 Nov 2000 02:25:50 +0100 + +mutt (1.2.5-5) unstable; urgency=low + + * Added support for libc6 2.2 compressed charmaps + (Closes: #74975). + * Updated README.Debian about SSL support (Closes: #75895). + * Added the compressed folder patch (Closes: #76224). + * Removed some colorization (Closes: #77976). + + -- Marco d'Itri Mon, 27 Nov 2000 18:46:25 +0100 + +mutt (1.2.5-4) stable unstable; urgency=high + + * Typo in debian-ldap-query prevented it from running (#74575). + + -- Marco d'Itri Sun, 29 Oct 2000 13:09:42 +0100 + +mutt (1.2.5-3) stable unstable; urgency=high + + * ====> Removed non GPL-compatible SHA code (patch-1.3.9.tlr.sha.1). <==== + * ====> Disabled linking with the GPL-incompatible openssl library. <==== + * Update debian-ldap-query for new libnet-ldap-perl package (Closes: #74575). + + -- Marco d'Itri Thu, 12 Oct 2000 10:28:10 +0200 + +mutt (1.2.5-2) unstable; urgency=low + + * Disallow suspend by default if mutt is the session leader (Closes: #64169). + * Fixed the check for optional crypto libraries (Closes: #68518). + * Added build dependency to debhelper (Closes: #68401). + * Added some info to README.NFS (Closes: #71163). + * Added ispell wrapper. + + -- Marco d'Itri Thu, 21 Sep 2000 19:43:57 +0200 + +mutt (1.2.5-1) unstable; urgency=low + + * New upstream release (Closes: #67885, #65999, #67420, #65638, #62580). + (Closes: #67420). + * Fixed charmaps handling for autobuilders (Closes: #67609).\ + * Added debian-ldap-query script. + * mutt_imap_*_.so and pgp* moved to /usr/lib/mutt/. + * Added safefilter contributed script. + + -- Marco d'Itri Tue, 1 Aug 2000 18:22:58 +0200 + +mutt (1.2-1) unstable; urgency=low + + * New upstream release. + * Fixed manual.txt.gz path in F1 macro (Closes: #63384). + + -- Marco d'Itri Sun, 7 May 2000 19:51:09 +0200 + +mutt (1.1.12-1) unstable; urgency=low + + * New upstream release. + * Removed duplicated install-docs commands (Closes: #60788). + + -- Marco d'Itri Mon, 20 Mar 2000 22:14:53 +0100 + +mutt (1.1.9-1) unstable; urgency=low + + * New upstream release (Closes: #60139, #57965, #60139). + * pgp_sign_micalg=pgp-sha1 added to the default Muttrc (Closes: #59765). + + -- Marco d'Itri Wed, 15 Mar 2000 10:57:49 +0100 + +mutt (1.1.5-1) unstable; urgency=low + + * New upstream release (Closes: #56011, #58703). + + -- Marco d'Itri Sat, 26 Feb 2000 15:13:09 +0100 + +mutt (1.1.4-1) unstable; urgency=low + + * New upstream release. + + -- Marco d'Itri Wed, 16 Feb 2000 01:14:31 +0100 + +mutt (1.1.3-1) unstable; urgency=low + + * New upstream release (Closes: #57373, #57155, #57533, #56970). + * Fixed Pine.rc (Closes: #57647). + + -- Marco d'Itri Wed, 16 Feb 2000 01:14:20 +0100 + +mutt (1.1.2-2) unstable; urgency=low + + * README.UPDATE installed in the documentation directory (Closes: 56970). + * Patched for run time loading of SSL and Kerberos libraries. + + -- Marco d'Itri Thu, 10 Feb 2000 23:56:21 +0100 + +mutt (1.1.2-1) unstable; urgency=low + + * New upstream release (Closes: #30639, #28727). + * Fixed color problems in xterms. + + -- Marco d'Itri Tue, 1 Feb 2000 12:31:26 +0100 + +mutt (1.1.1-1) experimental; urgency=low + + * My christmas present: packaged the development tree. + + -- Marco d'Itri Sun, 19 Dec 1999 12:08:53 +0100 + diff --git a/debian/compat b/debian/compat new file mode 100644 index 0000000..7ed6ff8 --- /dev/null +++ b/debian/compat @@ -0,0 +1 @@ +5 diff --git a/debian/control b/debian/control new file mode 100644 index 0000000..b76863b --- /dev/null +++ b/debian/control @@ -0,0 +1,57 @@ +Source: mutt +Section: mail +Priority: standard +Maintainer: Christoph Berg +Uploaders: Adeodato Simó , Antonio Radici +Build-Depends: debhelper (>> 5), quilt, automake, gawk, gettext, xsltproc, + docbook-xml, docbook-xsl, links, libncurses5-dev, libsasl2-dev, libgnutls-dev, + libidn11-dev, zlib1g-dev, libncursesw5-dev, libgdbm-dev, libkrb5-dev +Standards-Version: 3.8.0 +XS-Vcs-Git: git://git.debian.org/git/pkg-mutt/mutt.git +XS-Vcs-Browser: http://git.debian.org/?p=pkg-mutt/mutt.git +Homepage: http://www.mutt.org/ + +Package: mutt +Architecture: any +Priority: standard +Depends: ${shlibs:Depends}, ${misc:Depends} +Recommends: exim4 | mail-transport-agent, locales, mime-support, libsasl2-modules +Suggests: urlview, aspell | ispell, gnupg, mixmaster, openssl, ca-certificates +Provides: mail-reader, imap-client +Conflicts: mutt-utf8 +Replaces: mutt-utf8 +Description: text-based mailreader supporting MIME, GPG, PGP and threading + Mutt is a sophisticated text-based Mail User Agent. Some highlights: + . + * MIME support (including RFC1522 encoding/decoding of 8-bit message + headers and UTF-8 support). + * PGP/MIME support (RFC 2015). + * Advanced IMAP client supporting SSL encryption and SASL authentication. + * POP3 support. + * ESMTP support. + * Message threading (both strict and non-strict). + * Keybindings are configurable, default keybindings are much like ELM; + Mush and PINE-like ones are provided as examples. + * Handles MMDF, MH and Maildir in addition to regular mbox format. + * Messages may be (indefinitely) postponed. + * Colour support. + * Highly configurable through easy but powerful rc file. + +Package: mutt-patched +Architecture: any +Priority: extra +Depends: ${shlibs:Depends}, mutt (= ${binary:Version}) +Description: the Mutt Mail User Agent with extra patches + Mutt is a sophisticated text-based Mail User Agent. + . + This package adds the "sidebar" patch that lists mailboxes with new mail + in a separate column on screen. + +Package: mutt-dbg +Architecture: any +Priority: extra +Depends: ${shlibs:Depends}, mutt (= ${binary:Version}) +Description: debugging symbols for mutt + Mutt is a sophisticated text-based Mail User Agent. + . + This package contains the debugging symbols for mutt and mutt-patched. diff --git a/debian/copyright b/debian/copyright new file mode 100644 index 0000000..2feccaf --- /dev/null +++ b/debian/copyright @@ -0,0 +1,89 @@ +This is Debian's prepackaged version of Mutt, a powerful text-mode mail +user agent. + +The current maintainers for this package are: + Adeodato Simó + Christoph Berg + +Previous maintainers were: + Stephen Pitts + J.H.M. Dassen + Marco d'Itri + +Original source has been downloaded from ftp://ftp.mutt.org/mutt/: + + URL: + +The following copyright notices apply to most of the program. Some +modules are under different licenses, or in the public domain. + +Please note that this is by no means an exhaustive list of all the +persons who have been contributing to this program. Please see the +manual for a (probably still non complete) list of the persons who +have been helpful with the development of this program. + +Copyright (C) 1996-2007 Michael R. Elkins +Copyright (C) 1996-2002 Brandon Long +Copyright (C) 1997-2008 Thomas Roessler +Copyright (C) 1998-2005 Werner Koch +Copyright (C) 1999-2009 Brendan Cully +Copyright (C) 1999-2002 Tommi Komulainen +Copyright (C) 2000-2004 Edmund Grimley Evans +Copyright (C) 2006-2008 Rocco Rutte + + 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. + +Contributors: + Copyright (C) 2001 Marco d'Itri + Copyright (C) 2001-2002 Oliver Ehli + Copyright (C) 2004 Brian Fundakowski Feldman + Copyright (C) 2004 g10 Code GmbH + Copyright (C) 2004 Thomas Glanzmann + Copyright (C) 2003 Bjoern Jacke + Copyright (C) 2000 Manoj Kasichainula + Copyright (C) 2001-2004 Andrew McDonald + Copyright (C) 2001 Mike Schiraldi + Copyright (C) 2000-2003 Vsevolod Volkov + Copyright (C) 2004 Tobias Werth + Copyright (C) 2005 Andreas Krennmair + Copyright (C) 2005 Peter J. Holzer + +intl subdirectory: + Copyright (C) 1995-2001 Free Software Foundation, Inc. + Contributed by Ulrich Drepper, 1995. + +On Debian systems, the complete text of the GNU General Public License +can be found in `/usr/share/common-licenses/GPL'. + +md5c.c: + Copyright (C) 1991-2, RSA Data Security, Inc. Created 1991. All + rights reserved. + License to copy and use this software is granted provided that it + is identified as the "RSA Data Security, Inc. MD5 Message-Digest + Algorithm" in all material mentioning or referencing this software + or this function. + License is also granted to make and use derivative works provided + that such works are identified as "derived from the RSA Data + Security, Inc. MD5 Message-Digest Algorithm" in all material + mentioning or referencing the derived work. + RSA Data Security, Inc. makes no representations concerning either + the merchantability of this software or the suitability of this + software for any particular purpose. It is provided "as is" + without express or implied warranty of any kind. + These notices must be retained in any copies of any part of this + documentation and/or software. + +The list of authors of the applied patches to this version of mutt can +be found in `/usr/share/doc/mutt/README.Patches'. diff --git a/debian/extra/README.SMIME b/debian/extra/README.SMIME new file mode 100644 index 0000000..6bd4aa2 --- /dev/null +++ b/debian/extra/README.SMIME @@ -0,0 +1,56 @@ +This file describes how to configure mutt to use S/MIME. + +This file is almost the same as smime-notes.txt available in mutt upstream +sources, but it contains a few modifications about Debian-specific issues. + +Mutt needs some user interaction to get it ready for S/MIME. + +1. Make sure, that openssl (must be) and ca-certificates (recommended) + are installed. If not, ask your administrator to do it. + +2. Run 'smime_keys init'. + +3. If ca-certificates is installed, make a symlink: + ln -s /etc/ssl/certs ~/.smime/ca-bundle.crt + If not, there are some other packages which contain Root CA certificates, + for example: kdelibs-data, libcurl2. + This makes you trust anything that was ultimately signed by one of CA + included in symlinked crt file. + +4. Get yourself a certificate. (You can get one for free from www.thawte.com, + or pay for one from VeriSign or one of its competitors). The way the + process generally works: the certificate will be installed "into" your web + browser. If you are asked what application you wish to use the + certificate with, select Netscape. Strangely enough, "mutt" is usually not + an option. + +5. Assuming you are using Mozilla, follow the instructions at + www.verisignlabs.com/Projects/smime_docs/linux.html to export the + certificate into a file called cert.p12. If you don't use Mozilla, you're on + your own. + +6. Run 'smime_keys add_p12 cert.p12'. + * When the script asks for the "Import password", enter the one you + provided when you exported the certificate + * When it asks for a "PEM pass phrase", make up a new password. Every + time you sign or decrypt a message, mutt will ask for the PEM passphrase + * Finally, when the script asks for a label, enter an easy-to-remember + name for the certificate, such as "me". The script output will include + a line like: + added private key: /home/raldi/.smime/keys/12345678.0 for raldi@verisignlabs.com + The number (including the ".0" at the end) is your keyid. You will + need this number in the next step. + +7. Edit your .muttrc file and add a lines: + set smime_default_key=keyid + set smime_sign_as=keyid + Probably you also want to change default values for smime_timeout + and smime_encrypt_with originally set in global /etc/Muttrc + +8. Optionally, you can add following line to your ~/.mailcap to view certificate + from mutt: + application/x-pkcs7-signature;openssl pkcs7 -in %s -inform der -noout -print_certs -text | pager; needsterminal + +Last updated: Tue, 23 Dec 2003 22:35:40 +0100 +Artur R. Czechowski + diff --git a/debian/extra/lib/debian-ldap-query b/debian/extra/lib/debian-ldap-query new file mode 100755 index 0000000..f4e3ae4 --- /dev/null +++ b/debian/extra/lib/debian-ldap-query @@ -0,0 +1,48 @@ +#!/usr/bin/perl -w +# by Ben Collins , butchered by Marco d'Itri +# to use, add to ~/.muttrc: +# set query_command="/usr/lib/mutt/debian-ldap-query %s" + +use strict; + +my @attrs = qw(sn mn cn ircnick uid); +my $base = 'ou=users, dc=debian, dc=org'; +my $server = 'db.debian.org'; +my $port = 389; + +die "Usage: $0 [...]\n" if not $ARGV[0]; + +eval 'require Net::LDAP;'; +if ($@) { + $@ =~ s/ in \@INC.*/./; + die "Could not load Net::LDAP: $@\n" . + "(Warning: this script depends on the libnet-ldap-perl (>=0.22-1) package.)\n" +} + +my $ldap = Net::LDAP->new($server, port => $port) or + die "Could not contact LDAP server $server:$port"; +$ldap->bind or die 'Could not bind'; + +my @results; + +foreach my $search (@ARGV) { + my $query = join '', map { "($_=*$search*)" } @attrs; + my $mesg = $ldap->search( + base => $base, filter => "(|$query)", attrs => [ @attrs ] + ) or die 'Failed search'; + foreach my $entry ($mesg->entries) { + my $uid = $entry->get_value('uid') || next; + my $fname = $entry->get_value('cn') || ''; + my $mname = $entry->get_value('mn') || ''; + $mname .= ' ' if $mname; + my $lname = $entry->get_value('sn') || ''; + my $nick = $entry->get_value('ircnick')|| ''; + push @results, "<$uid\@debian.org>\t$fname $mname$lname\t($nick)\n"; + } +} + +$ldap->unbind; + +print 'Debian Developer query: found ', scalar @results, "\n", @results; +exit 1 if not @results; +exit 0; diff --git a/debian/extra/lib/mailspell b/debian/extra/lib/mailspell new file mode 100755 index 0000000..79e0e03 --- /dev/null +++ b/debian/extra/lib/mailspell @@ -0,0 +1,77 @@ +#!/usr/bin/perl +# +# Wrapper to call ispell on mail messages, ignoring quoted portions +# and signatures. +# By Brendan O'Dea , public domain. +# Usage: set ispell = /usr/lib/mutt/mailspell +# + +use IO::File; +use POSIX 'tmpnam'; +use File::Copy 'move'; + +$0 =~ s#.*/##; + +my $ISPELL = 'ispell'; +my $DIFF = 'diff'; +my $ED = 'ed'; + +# make sure that we don't inherit SIGCHLD +$SIG{CHLD} = 'DEFAULT'; + +# ignore -x ispell option +shift if $ARGV[0] eq '-x'; +die "Usage: $0 [-x] FILE\n" unless @ARGV == 1; + +my $msg = $ARGV[0]; + +# create temporary files +my (%orig, %ed); + +END { + unlink $ed{path} if $ed{path}; + unlink $orig{path} if $orig{path}; +} + +foreach (\%orig, \%ed) { + $_->{path} = tmpnam; + $_->{fd} = IO::File->new($_->{path}, O_RDWR|O_CREAT|O_EXCL, 0600) + or die "$0: can't create $_->{path} ($!)"; +} + +while (<>) { + # stop at sigdashes + last if /^-- \n/; + + # drop quoted text and attribution + $orig{fd}->print($_) unless /^>/ or /^On \w{3}, \w{3} \d{2}, \d{4} at \d/; +} + +$orig{fd}->close; + +my $pid = fork; +die "$0: can't fork ($!)\n" unless defined $pid; +unless ($pid) { + open STDOUT, '>&=' . $ed{fd}->fileno + or die "$0: can't dup stdout to ed script ($!)\n"; + $ed{fd}->close; + exec $DIFF, '-e', $orig{path}, $msg; + die "$0: can't exec $DIFF ($!)\n"; +} + +die "$0: can't reap child ($!)\n" unless wait == $pid; +system $ISPELL, '-x', $orig{path} + and die "$0: problem with $ISPELL ($?)\n"; + +$ed{fd}->seek(0, SEEK_END); +$ed{fd}->print("w\nq\n"); +$ed{fd}->seek(0, SEEK_SET); + +open STDIN, '<&=' . $ed{fd}->fileno + or die "$0: can't dup stdin from ed script ($!)\n"; + +system $ED, '-s', $orig{path} and die "$0: problem with $ED ($?)\n"; +move $orig{path}, $msg or die "$0: can't replace $msg ($!)\n"; +delete $orig{path}; + +1; diff --git a/debian/extra/lib/source-muttrc.d b/debian/extra/lib/source-muttrc.d new file mode 100755 index 0000000..ee177b9 --- /dev/null +++ b/debian/extra/lib/source-muttrc.d @@ -0,0 +1,7 @@ +#!/bin/sh -e + +for rc in /etc/Muttrc.d/*.rc; do + test -r "$rc" && echo "source \"$rc\"" +done + +# vi: ft=sh diff --git a/debian/extra/mutt-patched.rc/sidebar.rc b/debian/extra/mutt-patched.rc/sidebar.rc new file mode 100644 index 0000000..b8ae716 --- /dev/null +++ b/debian/extra/mutt-patched.rc/sidebar.rc @@ -0,0 +1,5 @@ +# Configuration for the sidebar patch. +# See /usr/share/doc/mutt/README.Patches for documentation. + +ifdef sidebar_visible set sidebar_visible sidebar_width=20 + diff --git a/debian/extra/mutt.xpm b/debian/extra/mutt.xpm new file mode 100644 index 0000000..ff7bd9d --- /dev/null +++ b/debian/extra/mutt.xpm @@ -0,0 +1,49 @@ +/* XPM */ +static char * mutt_xpm[] = { +"32 32 14 1", +" c None", +". c #CCCCCC", +"+ c #000000", +"@ c #7F7F7F", +"# c #B2B2B2", +"$ c #666667", +"% c #FF0000", +"& c #7F0000", +"* c #999999", +"= c #333333", +"- c #FF00FF", +"; c #FFFFFF", +"> c #7F007F", +", c #7F7F00", +" ", +" == ", +" ++ ", +" +..@@ ", +" +.,.+ ", +" + +.,.+ +++ ", +" + @+.,.+ +@@ ", +" @+ +....+++.@ ", +" +.@ @+.......+ ", +" +.+ +@....+.+ ", +" +.+ @+.....+.+ ", +" +.+@ +@........++++ ", +" +.@+ @+.........+;;> ", +" +..+++++++%@$#.......+.-- ", +" @@.@+&%&+@%%@@.......+>-> ", +" +..@+++@.@%%@$@......+++ ", +" +.........@%%+@$$....+ ", +" @@$.........@%%++@$..$+ ", +" +@@..........*%%++@@$+ ", +" +@@...........@%%++++ ", +" +@$............@+ ", +" +@@...#.......@+ ", +" @+@.#$+@@@...$++ ", +" +..$+@*@+..$+@+ ", +" @@.@++++++$.+@*+ ", +" @+..+*@@+=+@.+@.+ ", +" +@..+++@+++@..++@@+@ ", +" +@.....+@@+@.....+@.@ ", +" +$.....+@*+$.....+@.+ ", +" +@@.$..+@@+@@.$..+@.+ ", +" @++++++@++@++++++@++@ ", +" "}; diff --git a/debian/extra/rc/Muttrc.foot b/debian/extra/rc/Muttrc.foot new file mode 100644 index 0000000..0c0b8d7 --- /dev/null +++ b/debian/extra/rc/Muttrc.foot @@ -0,0 +1,2 @@ +# See /usr/share/doc/mutt/README.Debian for details. +source /usr/lib/mutt/source-muttrc.d| diff --git a/debian/extra/rc/charset.rc b/debian/extra/rc/charset.rc new file mode 100644 index 0000000..ebbeb3e --- /dev/null +++ b/debian/extra/rc/charset.rc @@ -0,0 +1,9 @@ +# Some GB18030 traditional Chinese mails are wrongly labelled GB2312. +# The first charset is a superset of the second. Let's alias it, so +# that Mutt displays such mails as if they were correctly labelled. +charset-hook ^gb2312$ gb18030 + +# Some mailers send EUC-JP-MS Japanese mails wrongly labelled EUC-JP. +# The first charset is a superset of the second. Let's also alias it. +charset-hook ^euc-jp$ euc-jp-ms + diff --git a/debian/extra/rc/colors.rc b/debian/extra/rc/colors.rc new file mode 100644 index 0000000..5eae80a --- /dev/null +++ b/debian/extra/rc/colors.rc @@ -0,0 +1,19 @@ +# colors +color normal white black +color attachment brightyellow black +color hdrdefault cyan black +color indicator black cyan +color markers brightred black +color quoted green black +color signature cyan black +color status brightgreen blue +color tilde blue black +color tree red black +#color header brightgreen black ^From: +#color header brightcyan black ^To: +#color header brightcyan black ^Reply-To: +#color header brightcyan black ^Cc: +#color header brightblue black ^Subject: +#color body brightred black [\-\.+_a-zA-Z0-9]+@[\-\.a-zA-Z0-9]+ +#color body brightblue black (https?|ftp)://[\-\.,/%~_:?&=\#a-zA-Z0-9]+ + diff --git a/debian/extra/rc/compressed-folders.rc b/debian/extra/rc/compressed-folders.rc new file mode 100644 index 0000000..d21b725 --- /dev/null +++ b/debian/extra/rc/compressed-folders.rc @@ -0,0 +1,8 @@ +# Use folders which match on \\.gz$ or \\.bz2$ as [gb]zipped folders: +open-hook \\.gz$ "gzip -cd '%f' > '%t'" +close-hook \\.gz$ "gzip -c '%t' > '%f'" +append-hook \\.gz$ "gzip -c '%t' >> '%f'" +open-hook \\.bz2$ "bzip2 -cd '%f' > '%t'" +close-hook \\.bz2$ "bzip2 -c '%t' > '%f'" +append-hook \\.bz2$ "bzip2 -c '%t' >> '%f'" + diff --git a/debian/extra/samples/colors.angdraug b/debian/extra/samples/colors.angdraug new file mode 100644 index 0000000..efba1cb --- /dev/null +++ b/debian/extra/samples/colors.angdraug @@ -0,0 +1,91 @@ +# This color scheme aims to highlight as much useful information as +# possible without spoiling user's visual experience by irritating +# contrasts. Optimized for dark or transparent background. +# --Dmitry Borodaenko + +# override defaults, make transparency work +color normal white default +color attachment green default # +color hdrdefault cyan default +color indicator black cyan +color markers brightred default +color quoted green default +color signature brightblue default # +color status brightgreen blue +color tilde brightblue default # +color tree red default + +# paint different quote levels +color quoted green default +color quoted1 cyan default +color quoted2 yellow default +color quoted3 red default + +color body brightred default "[\-\.+_a-zA-Z0-9]+@[\-\.a-zA-Z0-9]+" # email +color body brightblue default "(http|ftp)://[\-\.\,/+=&%~_:?\#a-zA-Z0-9]+" # URL +color body brightgreen default "(^| |[-.[:alnum:]]+:+)~?\(/[-_.'[:alnum:]]+\)+/?" # Unix file path +color body brightgreen default "(^| +)[[:alpha:]]:[-_.[:alnum:]\]+" # DOS file path +color body brightmagenta default "(^|[ '\"]+)\\$[[:alpha:]][-_[:alpha:]]+" # variable +color body brightred default "(^| )[*_]+[-&[:alnum:]]+[*_]( |$)" # bold/underline +color body yellow default "(^| )[;:8ö][-^o]?[)>(|/\\]+" # smiley +color body red default "[!?]{3,}" # exclamation +color body green default "^ *[-+*o] +" # list item + +# date formats +color body cyan default "[0-9]{1,2}:[0-9]{2}(:[0-9]{2})?( ?(AM|PM|am|pm))?( +[+-][0-9]{4})?" +color body cyan default "(\(19|20\)?[0-9]{2}/[01]?[0-9]/[0123]?[0-9]|[0123]?[0-9][/.][01]?[0-9][/.]\(19|20\)?[0-9]{2})(( at)? +[0-9]{1,2}:[0-9]{2}(:[0-9]{2})?( ?(AM|PM|am|pm))?( +[+-][0-9]{4})?)?" +color body cyan default "((Sun(day)?|Mon(day)?|Tue(sday)?|Wed(nesday)?|Thu(sday)?|Fri(day)?|Sat(urday)?),? +)?(Jan(uary)?|Feb(ruary)?|Mar(ch)?|Apr(il)?|May|June?|July?|Aug(ust)?|Sep(ember)?|Oct(ober)?|Nov(ember)?|Dec(ember)?)[ .]+[0-9]{1,2}(st|nd|rd|th)?,?( +(19|20)[0-9]{2}(,?( at)? [0-9]{1,2}:[0-9]{2}(:[0-9]{2})?( ?(AM|PM|am|pm))?( +[+-][0-9]{4})?)?)?" +color body cyan default "((Sun(day)?|Mon(day)?|Tue(sday)?|Wed(nesday)?|Thu(sday)?|Fri(day)?|Sat(urday)?),? +)?[0-9]{1,2}(st|nd|rd|th)?[ .]+(Jan(uary)?|Feb(ruary)?|Mar(ch)?|Apr(il)?|May|June?|July?|Aug(ust)?|Sep(ember)?|Oct(ober)?|Nov(ember)?|Dec(ember)?),?( +(19|20)?[0-9]{2})?(( at)? [0-9]{1,2}:[0-9]{2}(:[0-9]{2})?( ?(AM|PM|am|pm))?( +[+-][0-9]{4})?)?" + +color header brightgreen default ^From: +color header brightcyan default ^To: +color header brightcyan default ^Reply-To: +color header brightcyan default ^Cc: +color header brightblue default ^Subject: + +color header brightcyan default "^newsgroups: " +color header yellow default "^Delivered-To: " +color header green default "^sender: " +color header green default "^organi[sz]ation: " +color header green default "x-editor: " +color header green default "(x-mailer|user-agent): " +color header green default "X-Operating-System: " +color header green default "X-MimeOLE: " +color header green default "X-Accept-Language: " +color header red default "^message-id:" +color header red default "^in-reply-to: " +color header red default "^references: " +color header cyan default "^followup-to: " +color header cyan default "^mail-followup-to: " +color header cyan default "^reply-to: " +color header magenta default "MIME-Version: " +color header magenta default "Content-Type: " +color header magenta default "Content-Transfer-Encoding: " +color header magenta default "Content-Disposition: " +color header magenta default "Content-Encoding: " +color header magenta default "Content-Language: " + +color status brightwhite blue + +color index brightblue default '~P' # from me +color index cyan default '~p' # personal +color index brightcyan default '~G' # PGP +color index brightred default '~F' # flagged +color index green default '~Q' # replied +color index brightwhite default '~N' # new +color index red default '~D' # deleted + +# threads +#color index brightyellow default "~h 'References: +<.+>'" +#color index yellow default "~h 'References: +<.+> +<.+>'" +#color index brightred default "~h 'References: +<.+> +<.+> +<.+>'" +#color index red default "~h 'References: +<.+> +<.+> +<.+> +<.+>'" +#color index blue default "~h 'References: +<.+> +<.+> +<.+> +<.+> +<.+>'" +#color index green default "~h 'References: +<.+> +<.+> +<.+> +<.+> +<.+> +<.+>'" + +# spam +color index magenta default "\(Resent-\)?Message-Id: <>" +color index magenta default "\(Resent-\)?Message-Id: '<.* .*>'" +color index magenta default "\(Resent-\)?Message-Id: localhost" +color index magenta default "! \(Resent-\)?Message-Id: @" +color index magenta default '~C Undisclosed.*Recipients' diff --git a/debian/extra/samples/ray.muttrc b/debian/extra/samples/ray.muttrc new file mode 100644 index 0000000..e05c22e --- /dev/null +++ b/debian/extra/samples/ray.muttrc @@ -0,0 +1,48 @@ +# This configuration file contains the default settings used by old debian +# packages (< 0.94). + +set quote_regexp="^[ \t]*[a-zA-Z\.]*>" # Default: "^([ \t]*[>|#:}])+" + +# +# More header weeding +# +ignore Resent- Precedence In-Reply-To Return-Receipt-To Mailer X400 +ignore Originator X-Loop X-Mailing-List X-Listprocessor X-Face +ignore X-Received X-Mailer X-Envelope-To X-Sender X-Attribution +# Usenet headers can occur for Cc-ed messages; they can still be +# recognized by the Newsgroups header. +ignore Path Lines NNTP-Posting-Host X-Newsreader X-Submitted-Via + +# +# Key bindings +# + +bind editor delete-char + +# Color / video attribute definitions. Not too flashy. +# + +color hdrdefault green black +color header brightyellow black "^from:" +mono header bold "^from:" +color header brightyellow black "^subject:" +mono header bold "^subject:" +color quoted green black +color signature brightred black +color indicator brightyellow red +color error brightred black +mono error bold +color status brightwhite blue +color tree brightmagenta black +color tilde brightmagenta black +# URL highlighting with the same regexp as urlview. +color body brightyellow black (((ht|f)tps?)|mailto):(//)?[^\ "\t]*|www\.[-a-z0-9.]+)[^\ .,;\t>">] +mono body bold (((ht|f)tps?)|mailto):(//)?[^\ "\t]*|www\.[-a-z0-9.]+)[^\ .,;\t>">] +color body brightmagenta black "[-a-z_0-9.]+@[-a-z_0-9.]+" +mono body bold "[-a-z_0-9.]+@[-a-z_0-9.]+" +color body brightyellow black "^Good signature" +mono body bold "^Good signature" +color body brightwhite red "^Bad signature from.*" +mono body bold "^Bad signature from.*" + + diff --git a/debian/extra/samples/sidebar.muttrc b/debian/extra/samples/sidebar.muttrc new file mode 100644 index 0000000..8bb1574 --- /dev/null +++ b/debian/extra/samples/sidebar.muttrc @@ -0,0 +1,74 @@ +# shamelessly copied from +# http://www.lunar-linux.org/index.php?option=com_content&task=view&id=44 + +# set up the sidebar, default not visible +set sidebar_width=12 +set sidebar_visible=no +set sidebar_delim='|' + +# which mailboxes to list in the sidebar +mailboxes =inbox =ml + +# color of folders with new mail +color sidebar_new yellow default + +# ctrl-n, ctrl-p to select next, prev folder +# ctrl-o to open selected folder +bind index \CP sidebar-prev +bind index \CN sidebar-next +bind index \CO sidebar-open +bind pager \CP sidebar-prev +bind pager \CN sidebar-next +bind pager \CO sidebar-open + +# I don't need these. just for documentation purposes. See below. +# sidebar-scroll-up +# sidebar-scroll-down + +# b toggles sidebar visibility +macro index b 'toggle sidebar_visible' +macro pager b 'toggle sidebar_visible' + +# Remap bounce-message function to "B" +bind index B bounce-message + +# +# Mario Holbe suggests: +# macro index b 'toggle sidebar_visible' +# macro pager b 'toggle sidebar_visible' +# + + +# Documentation +# ============= +# +# sidebar_width (number) +# Width of the sidebar. +# +# sidebar_visible (boolean) +# Whether or not the sidebar is visible. +# +# sidebar_delim (string) +# Specifies the delimiter between the sidebar and other screens +# +# color sidebar_new [fg] [bg] +# The foreground (fg) and background (bg) color of folders that contain new +# mail. +# +# sidebar-prev +# Mutt's name for the operation that selects the previous folder. +# +# sidebar-next +# Mutt's name for the operation that selects the next folder. +# +# sidebar-open +# Mutt's name for the operation that opens the currently selected folder. +# +# sidebar-scroll-up +# Only useful if you have more folders than lines in your terminal: scrolls one +# page up through the list of folders. +# +# sidebar-scroll-down +# Only useful if you have more folders than lines in your terminal: scrolls one +# page down through the list of folders. +# diff --git a/debian/fix-PATCHES.pl b/debian/fix-PATCHES.pl new file mode 100755 index 0000000..fafd7b9 --- /dev/null +++ b/debian/fix-PATCHES.pl @@ -0,0 +1,30 @@ +#!/usr/bin/perl -wi + +use strict; + +my ($PATCHES, @patches); +while (<>) { + if (/^(---|Index:|diff) .*PATCHES/) { + $PATCHES = 1; + } elsif (/^(-|Index|diff)/) { # next patch + $PATCHES = 0; + print; + } elsif ($PATCHES) { + next if /^(===|\+\+\+|@@)/; # patch header + next if /^ /; # context + push @patches, $_; + } else { + print; + } + if (eof) { + if (@patches) { + print "--- a/PATCHES\n"; + print "+++ b/PATCHES\n"; + print "@@ -0,0 +" . scalar (@patches) . " @@\n"; + print @patches; + } + @patches = (); + $PATCHES = 0; + } +} + diff --git a/debian/header.awk b/debian/header.awk new file mode 100755 index 0000000..82cf656 --- /dev/null +++ b/debian/header.awk @@ -0,0 +1,23 @@ +#! /usr/bin/gawk -f + +BEGIN { + sep = "=============================================================================" +} + +FILENAME ~ /debian$/ { + nextfile +} + +/^== END PATCH$/ { + print "" + nextfile +} + +FNR == 1 { + print FILENAME "\n" substr(sep, 0, length(FILENAME)) "\n" + next +} + +{ + print +} diff --git a/debian/mutt-dbg.links b/debian/mutt-dbg.links new file mode 100644 index 0000000..c803d03 --- /dev/null +++ b/debian/mutt-dbg.links @@ -0,0 +1 @@ +usr/share/doc/mutt usr/share/doc/mutt-dbg diff --git a/debian/mutt-patched.install b/debian/mutt-patched.install new file mode 100644 index 0000000..00d4950 --- /dev/null +++ b/debian/mutt-patched.install @@ -0,0 +1 @@ +debian/extra/mutt-patched.rc/*.rc etc/Muttrc.d diff --git a/debian/mutt-patched.links b/debian/mutt-patched.links new file mode 100644 index 0000000..d15e658 --- /dev/null +++ b/debian/mutt-patched.links @@ -0,0 +1 @@ +usr/share/doc/mutt usr/share/doc/mutt-patched diff --git a/debian/mutt-patched.postrm b/debian/mutt-patched.postrm new file mode 100644 index 0000000..39a1eec --- /dev/null +++ b/debian/mutt-patched.postrm @@ -0,0 +1,10 @@ +#!/bin/sh -e + +if [ "$1" = remove ] ; then + dpkg-divert --remove --package mutt-patched --rename \ + --divert /usr/bin/mutt.org /usr/bin/mutt +fi + +#DEBHELPER# + +exit 0 diff --git a/debian/mutt-patched.preinst b/debian/mutt-patched.preinst new file mode 100644 index 0000000..86fce1b --- /dev/null +++ b/debian/mutt-patched.preinst @@ -0,0 +1,14 @@ +#!/bin/sh -e + +# Divert mutt to mutt.org so the binary from mutt-patched can replace it. +# We do not need to divert the debugging symbols in the mutt-dbg package +# as the debugging link in there points to the correct file in any case. + +if [ "$1" = install ] || [ "$1" = upgrade ] ; then + dpkg-divert --add --package mutt-patched --rename \ + --divert /usr/bin/mutt.org /usr/bin/mutt +fi + +#DEBHELPER# + +exit 0 diff --git a/debian/mutt.dirs b/debian/mutt.dirs new file mode 100644 index 0000000..60d4e9a --- /dev/null +++ b/debian/mutt.dirs @@ -0,0 +1,2 @@ +etc/Muttrc.d +usr/share/bug/mutt diff --git a/debian/mutt.doc-base b/debian/mutt.doc-base new file mode 100644 index 0000000..76036a2 --- /dev/null +++ b/debian/mutt.doc-base @@ -0,0 +1,14 @@ +Document: mutt +Title: The Mutt E-Mail Client Manual +Author: Various +Abstract: The documentation for Mutt, a sophisticated text oriented mail + user agent ("mail reader"). +Section: Network/Communication + +Format: text +Files: /usr/share/doc/mutt/manual.txt.gz + +Format: HTML +Index: /usr/share/doc/mutt/html/manual.html +Files: /usr/share/doc/mutt/html/* + diff --git a/debian/mutt.docs b/debian/mutt.docs new file mode 100644 index 0000000..670b635 --- /dev/null +++ b/debian/mutt.docs @@ -0,0 +1,10 @@ +debian/extra/README.SMIME +debian/tmp/README.Patches +debian/tmp/usr/share/doc/NEWS +debian/tmp/usr/share/doc/NEWS.old +debian/tmp/usr/share/doc/TODO +debian/tmp/usr/share/doc/README +debian/tmp/usr/share/doc/README.SSL +debian/tmp/usr/share/doc/README.SECURITY +debian/tmp/usr/share/doc/PGP-Notes.txt +debian/tmp/usr/share/doc/manual.txt diff --git a/debian/mutt.examples b/debian/mutt.examples new file mode 100644 index 0000000..b20617c --- /dev/null +++ b/debian/mutt.examples @@ -0,0 +1,3 @@ +debian/extra/samples/* +debian/tmp/etc/Muttrc +debian/tmp/usr/share/doc/samples/* diff --git a/debian/mutt.install b/debian/mutt.install new file mode 100644 index 0000000..9f1c8e3 --- /dev/null +++ b/debian/mutt.install @@ -0,0 +1,17 @@ +debian/tmp/usr/bin/mutt +debian/tmp/usr/bin/smime_keys +debian/tmp/usr/bin/mutt_dotlock +debian/tmp/usr/share/locale/* + +debian/extra/lib/mailspell usr/lib/mutt +debian/tmp/usr/bin/pgpring usr/lib/mutt +debian/tmp/usr/bin/pgpewrap usr/lib/mutt +debian/extra/lib/source-muttrc.d usr/lib/mutt +debian/extra/lib/debian-ldap-query usr/lib/mutt + +debian/tmp/Muttrc etc +debian/tmp/gpg.rc etc/Muttrc.d +contrib/smime.rc etc/Muttrc.d +debian/extra/rc/*.rc etc/Muttrc.d +debian/extra/mutt.xpm usr/share/pixmaps +debian/tmp/usr/share/doc/*.html usr/share/doc/mutt/html diff --git a/debian/mutt.lintian-overrides b/debian/mutt.lintian-overrides new file mode 100644 index 0000000..8c256d9 --- /dev/null +++ b/debian/mutt.lintian-overrides @@ -0,0 +1 @@ +mutt: setgid-binary usr/bin/mutt_dotlock 2755 root/mail diff --git a/debian/mutt.manpages b/debian/mutt.manpages new file mode 100644 index 0000000..6b6053e --- /dev/null +++ b/debian/mutt.manpages @@ -0,0 +1,5 @@ +debian/tmp/usr/share/man/man1/mutt.1 +debian/tmp/usr/share/man/man1/mutt_dotlock.1 +debian/tmp/usr/share/man/man5/muttrc.5 +debian/tmp/usr/share/man/man5/mbox.5 +debian/tmp/usr/share/man/man5/mmdf.5 diff --git a/debian/mutt.menu b/debian/mutt.menu new file mode 100644 index 0000000..a82236f --- /dev/null +++ b/debian/mutt.menu @@ -0,0 +1,5 @@ +?package(mutt): title="Mutt" \ + section="Applications/Network/Communication" hints="Mail" \ + needs="text" \ + icon="/usr/share/pixmaps/mutt.xpm" \ + command="/usr/bin/mutt" diff --git a/debian/mutt.mime b/debian/mutt.mime new file mode 100644 index 0000000..79f40a4 --- /dev/null +++ b/debian/mutt.mime @@ -0,0 +1 @@ +message/rfc822; mutt -Rf '%s'; edit=mutt -f '%s'; needsterminal diff --git a/debian/mutt.preinst b/debian/mutt.preinst new file mode 100644 index 0000000..fd2ecf8 --- /dev/null +++ b/debian/mutt.preinst @@ -0,0 +1,15 @@ +#!/bin/sh + +if [ "$1" = "upgrade" ] && dpkg --compare-versions "$2" lt "1.5.19-2" ; then + MD5SUM=$(md5sum /etc/Muttrc.d/smime-paths.rc | cut -d ' ' -f 1) + if [ "$MD5SUM" = "185414b78b332a662500719a179778c5" ] ; then + echo "Removing obsolete config file /etc/Muttrc.d/smime-paths.rc" + rm /etc/Muttrc.d/smime-paths.rc + else + echo "Not removing modified obsolete config file /etc/Muttrc.d/smime-paths.rc" + fi +fi + +#DEBHELPER# + +exit 0 diff --git a/debian/patches/debian-specific/Md.etc_mailname_gethostbyname.diff b/debian/patches/debian-specific/Md.etc_mailname_gethostbyname.diff new file mode 100644 index 0000000..f7a94b0 --- /dev/null +++ b/debian/patches/debian-specific/Md.etc_mailname_gethostbyname.diff @@ -0,0 +1,68 @@ +--- a/init.c ++++ b/init.c +@@ -46,6 +46,7 @@ + #include + #include + #include ++#include + #include + #include + +@@ -2911,6 +2912,31 @@ static int mutt_execute_commands (LIST * + return 0; + } + ++int getmailname(char *s, size_t l) ++{ ++ FILE *f; ++ char tmp[512]; ++ char *p = tmp; ++ ++ if ((f = fopen ("/etc/mailname", "r")) == NULL) ++ return (-1); ++ ++ if (fgets (tmp, 510, f) != NULL) { ++ while (*p && !ISSPACE(*p) && l > 0) { ++ *s++ = *p++; ++ l--; ++ } ++ if (*(s-1) == '.') ++ s--; ++ *s = 0; ++ ++ fclose (f); ++ return 0; ++ } ++ fclose (f); ++ return (-1); ++} ++ + void mutt_init (int skip_sys_rc, LIST *commands) + { + struct passwd *pw; +@@ -2982,10 +3008,25 @@ void mutt_init (int skip_sys_rc, LIST *c + Hostname = mutt_substrdup (utsname.nodename, p); + p++; + strfcpy (buffer, p, sizeof (buffer)); /* save the domain for below */ ++ Fqdn = safe_strdup (utsname.nodename); + } + else + Hostname = safe_strdup (utsname.nodename); + ++ /* if /etc/mailname exists use it and ignore everything else */ ++ if (getmailname(buffer, sizeof (buffer)) != -1) ++ Fqdn = safe_strdup(buffer); ++ ++ /* try gethostbyname(3) if /etc/mailname does not exists */ ++ if (!Fqdn) { ++ struct hostent *hp; ++ ++ if ((hp = gethostbyname(Hostname))) ++ Fqdn = safe_strdup(hp->h_name); ++ } ++ ++ if (Fqdn) { ++ } else + #ifndef DOMAIN + #define DOMAIN buffer + if (!p && getdnsdomainname (buffer, sizeof (buffer)) == -1) diff --git a/debian/patches/debian-specific/Muttrc b/debian/patches/debian-specific/Muttrc new file mode 100644 index 0000000..bc8db21 --- /dev/null +++ b/debian/patches/debian-specific/Muttrc @@ -0,0 +1,68 @@ +# vim:ft=diff + + * 2009-01-15 myon: refreshed for mutt-1.5.19; drop our list of ignored headers + in favor of upstream's new unignore list + +--- a/doc/Muttrc.head ++++ b/doc/Muttrc.head +@@ -12,6 +12,32 @@ unignore from: subject to cc date x-mail + # Display the fields in this order + hdr_order date from to cc subject + ++# emacs-like bindings ++bind editor "\e" kill-word ++bind editor "\e" kill-word ++ ++# map delete-char to a sane value ++bind editor delete-char ++ ++# some people actually like these settings ++#set pager_stop ++#bind pager previous-line ++#bind pager next-line ++ ++# Specifies how to sort messages in the index menu. ++set sort=threads ++ ++# Uncomment if your MTA does not strip Bcc: headers. ++# (exim4 and postfix strip them, exim(3) does not.) ++#unset write_bcc ++# Postfix and qmail use Delivered-To for detecting loops ++unset bounce_delivered ++ ++set mixmaster="mixmaster-filter" ++ ++# System-wide CA file managed by the ca-certificates package ++set ssl_ca_certificates_file="/etc/ssl/certs/ca-certificates.crt" ++ + # imitate the old search-body function + macro index \eb "~b " "search in message bodies" + +@@ -23,7 +49,7 @@ macro index,pager,attach,compose \cb "\ + "call urlview to extract URLs out of a message" + + # Show documentation when pressing F1 +-macro generic,pager " less @docdir@/manual.txt" "show Mutt documentation" ++macro generic,pager " zcat @docdir@/mutt/manual.txt.gz | sensible-pager" "show Mutt documentation" + + # show the incoming mailboxes list (just like "mutt -y") and back when pressing "y" + macro index,pager y "?" "show incoming mailboxes list" +@@ -35,7 +61,7 @@ bind browser y exit + # 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. ++# set the default here. (better: fix /etc/mailname) + # + # set hostname=cs.hmc.edu + +@@ -101,6 +127,9 @@ attachments +I text/plain + attachments -A message/external-body + attachments -I message/external-body + ++# enable mime lookup by extension ++mime_lookup application/octet-stream ++ + ## + ## More settings + ## diff --git a/debian/patches/debian-specific/assumed_charset-compat b/debian/patches/debian-specific/assumed_charset-compat new file mode 100644 index 0000000..3a6c763 --- /dev/null +++ b/debian/patches/debian-specific/assumed_charset-compat @@ -0,0 +1,17 @@ +On upstream inclusion of the assumed_charset patch (past 1.5.14), file_charset +got renamed to attach_charset. We add it back for compatibility. + +Index: mutt/init.h +=================================================================== +--- mutt.orig/init.h 2007-03-12 19:11:53.000000000 +0100 ++++ mutt/init.h 2007-03-12 19:13:56.000000000 +0100 +@@ -248,6 +248,9 @@ struct option_t MuttVars[] = { + ** Note: "iso-2022-*" must be put at the head of the value as shown above + ** if included. + */ ++ { "file_charset", DT_SYN, R_NONE, UL "attach_charset", 0 }, ++ /* ++ */ + { "attach_format", DT_STR, R_NONE, UL &AttachFormat, UL "%u%D%I %t%4n %T%.40d%> [%.7m/%.10M, %.6e%?C?, %C?, %s] " }, + /* + ** .pp diff --git a/debian/patches/debian-specific/build_doc_adjustments.diff b/debian/patches/debian-specific/build_doc_adjustments.diff new file mode 100644 index 0000000..6a5159f --- /dev/null +++ b/debian/patches/debian-specific/build_doc_adjustments.diff @@ -0,0 +1,25 @@ +--- a/doc/Makefile.am ++++ b/doc/Makefile.am +@@ -98,7 +98,8 @@ uninstall-local: + + check: + manual.txt: manual.html +- -LC_ALL=C lynx -dump -nolist -with_backspaces manual.html > $@ || \ ++ links.main -dump $< > $@ || links -dump $< > $@ || \ ++ LC_ALL=C lynx -dump -nolist -with_backspaces manual.html > $@ || \ + LC_ALL=C w3m -dump manual.html > $@ || \ + LC_ALL=C elinks -dump -no-numbering -no-references manual.html | sed -e 's,\\001, ,g' > $@ + +@@ -112,10 +113,10 @@ stamp-doc-rc: $(top_srcdir)/init.h maked + touch stamp-doc-rc + + manual.html: $(srcdir)/html.xsl $(srcdir)/mutt.xsl stamp-doc-xml $(srcdir)/mutt.css +- -xsltproc --nonet -o $@ $(srcdir)/html.xsl manual.xml ++ xsltproc --nonet -o $@ $(srcdir)/html.xsl manual.xml + + stamp-doc-chunked: $(srcdir)/chunk.xsl $(srcdir)/mutt.xsl stamp-doc-xml $(srcdir)/mutt.css +- -xsltproc --nonet $(srcdir)/chunk.xsl manual.xml ++ xsltproc --nonet $(srcdir)/chunk.xsl manual.xml + touch stamp-doc-chunked + + $(HTML_DOCFILES): stamp-doc-chunked diff --git a/debian/patches/debian-specific/correct_docdir_in_man_page.diff b/debian/patches/debian-specific/correct_docdir_in_man_page.diff new file mode 100644 index 0000000..dcfdd4f --- /dev/null +++ b/debian/patches/debian-specific/correct_docdir_in_man_page.diff @@ -0,0 +1,11 @@ +--- a/doc/mutt.man ++++ b/doc/mutt.man +@@ -167,7 +167,7 @@ User's personal mapping between MIME typ + System mapping between MIME types and file extensions. + .IP "@bindir@/mutt_dotlock" + The privileged dotlocking program. +-.IP "@docdir@/manual.txt" ++.IP "/usr/share/doc/mutt/manual.txt.gz" + The Mutt manual. + .SH BUGS + .PP diff --git a/debian/patches/debian-specific/document_debian_defaults b/debian/patches/debian-specific/document_debian_defaults new file mode 100644 index 0000000..a2efe86 --- /dev/null +++ b/debian/patches/debian-specific/document_debian_defaults @@ -0,0 +1,73 @@ +--- a/init.h ++++ b/init.h +@@ -304,6 +304,9 @@ struct option_t MuttVars[] = { + ** .pp + ** When this variable is \fIset\fP, mutt will include Delivered-To headers when + ** bouncing messages. Postfix users may wish to \fIunset\fP this variable. ++ ** .pp ++ ** \fBNote:\fP On Debian systems, this option is unset by default in ++ ** /etc/Muttrc. + */ + { "braille_friendly", DT_BOOL, R_NONE, OPTBRAILLEFRIENDLY, 0 }, + /* +@@ -866,6 +869,9 @@ struct option_t MuttVars[] = { + ** one is not used. + ** .pp + ** Also see $$use_domain and $$hidden_host. ++ ** .pp ++ ** \fBNote:\fP On Debian systems, the default for this variable is obtained ++ ** from /etc/mailname when Mutt starts. + */ + { "ignore_linear_white_space", DT_BOOL, R_NONE, OPTIGNORELWS, 0 }, + /* +@@ -1399,6 +1405,9 @@ struct option_t MuttVars[] = { + ** system. It is used with various sets of parameters to gather the + ** list of known remailers, and to finally send a message through the + ** mixmaster chain. ++ ** .pp ++ ** \fBNote:\fP On Debian systems, this option is set by default to ++ ** ``mixmaster-filter'' in /etc/Muttrc. + */ + #endif + { "move", DT_QUAD, R_NONE, OPT_MOVE, M_NO }, +@@ -1999,6 +2008,10 @@ struct option_t MuttVars[] = { + ** This variable contains the name of either a directory, or a file which + ** contains trusted certificates for use with OpenSSL. + ** (S/MIME only) ++ ** .pp ++ ** \fBNote:\fP On Debian systems, this defaults to the first existing file in ++ ** the following list: ~/.smime/ca-certificates.crt ~/.smime/ca-bundle.crt ++ ** /etc/ssl/certs/ca-certificates.crt. + */ + { "smime_certificates", DT_PATH, R_NONE, UL &SmimeCertificates, 0 }, + /* +@@ -2237,6 +2250,9 @@ struct option_t MuttVars[] = { + ** .ts + ** set ssl_ca_certificates_file=/etc/ssl/certs/ca-certificates.crt + ** .te ++ ** .pp ++ ** \fBNote:\fP On Debian systems, this variable defaults to the example ++ ** mentioned. This file is managed by the ``ca-certificates'' package. + */ + # endif /* USE_SSL_GNUTLS */ + #endif /* defined(USE_SSL) */ +@@ -2873,6 +2889,9 @@ struct option_t MuttVars[] = { + ** .pp + ** You may optionally use the ``reverse-'' prefix to specify reverse sorting + ** order (example: ``\fCset sort=reverse-date-sent\fP''). ++ ** .pp ++ ** \fBNote:\fP On Debian systems, this option is set by default to ++ ** ``threads'' in /etc/Muttrc. + */ + { "sort_alias", DT_SORT|DT_SORT_ALIAS, R_NONE, UL &SortAlias, SORT_ALIAS }, + /* +@@ -3306,6 +3325,9 @@ struct option_t MuttVars[] = { + ** is set to deliver directly via SMTP (see $$smtp_url), this + ** option does nothing: mutt will never write out the ``Bcc:'' header + ** in this case. ++ ** .pp ++ ** \fBNote:\fP On Debian systems, exim4 and postfix strip BCC headers by ++ ** default. The above warning applies to exim3 users, see /etc/Muttrc. + */ + {"xterm_icon", DT_STR, R_BOTH, UL &XtermIcon, UL "M%?n?AIL&ail?"}, + /* diff --git a/debian/patches/debian-specific/dont_document_not_present_features.diff b/debian/patches/debian-specific/dont_document_not_present_features.diff new file mode 100644 index 0000000..59844ee --- /dev/null +++ b/debian/patches/debian-specific/dont_document_not_present_features.diff @@ -0,0 +1,22 @@ +--- a/init.h ++++ b/init.h +@@ -19,7 +19,7 @@ + + #ifdef _MAKEDOC + # include "config.h" +-# include "doc/makedoc-defs.h" ++/* # include "makedoc-defs.h" include only documented options for Debian */ + #else + # include "sort.h" + #endif +--- a/functions.h ++++ b/functions.h +@@ -35,7 +35,7 @@ + + #ifdef _MAKEDOC + # include "config.h" +-# include "doc/makedoc-defs.h" ++/* # include "doc/makedoc-defs.h" include only documented options for Debian */ + #endif + + struct binding_t OpGeneric[] = { /* map: generic */ diff --git a/debian/patches/debian-specific/sort-patchlist b/debian/patches/debian-specific/sort-patchlist new file mode 100644 index 0000000..a2fd47f --- /dev/null +++ b/debian/patches/debian-specific/sort-patchlist @@ -0,0 +1,12 @@ +Index: trunk/patchlist.sh +=================================================================== +--- trunk.orig/patchlist.sh 2007-03-15 15:50:14.000000000 +0100 ++++ trunk/patchlist.sh 2007-03-15 15:50:41.000000000 +0100 +@@ -15,6 +15,6 @@ EOF + + while read patch ; do + echo " puts (\"${patch}\");" +-done ++done | LC_COLLATE=C sort + + echo "}" diff --git a/debian/patches/debian-specific/use_usr_bin_editor.diff b/debian/patches/debian-specific/use_usr_bin_editor.diff new file mode 100644 index 0000000..13baea5 --- /dev/null +++ b/debian/patches/debian-specific/use_usr_bin_editor.diff @@ -0,0 +1,22 @@ +--- a/init.c ++++ b/init.c +@@ -3114,7 +3114,7 @@ void mutt_init (int skip_sys_rc, LIST *c + { + p = getenv ("EDITOR"); + if (!p) +- p = "vi"; ++ p = "/usr/bin/editor"; + } + Editor = safe_strdup (p); + Visual = safe_strdup (p); +--- a/init.h ++++ b/init.h +@@ -589,7 +589,7 @@ struct option_t MuttVars[] = { + ** .pp + ** This variable specifies which editor is used by mutt. + ** It defaults to the value of the \fC$$$VISUAL\fP, or \fC$$$EDITOR\fP, environment +- ** variable, or to the string ``vi'' if neither of those are set. ++ ** variable, or to the string ``/usr/bin/editor'' if neither of those are set. + */ + { "encode_from", DT_BOOL, R_NONE, OPTENCODEFROM, 0 }, + /* diff --git a/debian/patches/features-old/patch-1.5.4.vk.pgp_verbose_mime b/debian/patches/features-old/patch-1.5.4.vk.pgp_verbose_mime new file mode 100644 index 0000000..0ea9b73 --- /dev/null +++ b/debian/patches/features-old/patch-1.5.4.vk.pgp_verbose_mime @@ -0,0 +1,50 @@ +diff -ruN mutt.orig/globals.h mutt/globals.h +--- mutt.orig/globals.h 2003-09-13 16:23:24.000000000 +0200 ++++ mutt/globals.h 2003-09-13 16:23:18.000000000 +0200 +@@ -195,6 +195,8 @@ + WHERE char *PgpListSecringCommand; + WHERE char *PgpListPubringCommand; + WHERE char *PgpGetkeysCommand; ++WHERE char *PgpMimeSignatureFilename; ++WHERE char *PgpMimeSignatureDescription; + + /*-- formerly in smime.h --*/ + WHERE char *SmimeDefaultKey; +diff -ruN mutt.orig/init.h mutt/init.h +--- mutt.orig/init.h 2003-09-13 16:23:24.000000000 +0200 ++++ mutt/init.h 2003-09-13 16:21:53.000000000 +0200 +@@ -1458,6 +1458,18 @@ + ** This option overrides ``$$pgp_create_traditional'' + ** (PGP only) + */ ++ { "pgp_mime_signature_filename", DT_STR, R_NONE, UL &PgpMimeSignatureFilename, UL "signature.asc"}, ++ /* ++ ** .pp ++ ** This option sets the filename used for signature parts in PGP/MIME ++ ** signed messages. ++ */ ++ { "pgp_mime_signature_description", DT_STR, R_NONE, UL &PgpMimeSignatureDescription, UL "Digital signature"}, ++ /* ++ ** .pp ++ ** This option sets the Content-Description used for signature parts in ++ ** PGP/MIME signed messages. ++ */ + + /* XXX Default values! */ + +diff -ruN mutt.orig/pgp.c mutt/pgp.c +--- mutt.orig/pgp.c 2003-09-13 16:23:24.000000000 +0200 ++++ mutt/pgp.c 2003-09-13 16:21:53.000000000 +0200 +@@ -998,6 +998,8 @@ + t->disposition = DISPINLINE; + t->encoding = ENC7BIT; + t->unlink = 1; /* ok to remove this file after sending. */ ++ mutt_set_parameter ("name", PgpMimeSignatureFilename, &t->parameter); ++ t->description = safe_strdup (PgpMimeSignatureDescription); + + return (a); + } +--- a/PATCHES ++++ b/PATCHES +@@ -0,0 +1 @@ ++patch-1.5.4.vk.pgp_verbose_mime diff --git a/debian/patches/features/compressed-folders b/debian/patches/features/compressed-folders new file mode 100644 index 0000000..b1abd8c --- /dev/null +++ b/debian/patches/features/compressed-folders @@ -0,0 +1,1189 @@ +# vi: ft=diff +This is the compressed folders patch by Roland Rosenfeld +. + +The home page for this patch is: + + http://www.spinnaker.de/mutt/compressed/ + +* Patch last synced with upstream: + - Date: 2008-05-20 + - File: http://www.spinnaker.de/mutt/compressed/patch-1.5.18.rr.compressed.1.gz + +* Changes made: + - 2008-05-20 myon: refreshed to remove hunks in auto* files + - 2009-09-15 myon: refreshed for mutt-1.5.19 + status.c:103: add sizeof (tmp) to mutt_pretty_mailbox + - 2009-09-15 scotton: removed doc/Muttrc for mutt-1.5.19 (only patch doc/Muttrc.head) + +== END PATCH +--- /dev/null ++++ b/compress.c +@@ -0,0 +1,499 @@ ++/* ++ * Copyright (C) 1997 Alain Penders ++ * ++ * 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., 675 Mass Ave, Cambridge, MA 02139, USA. ++ */ ++ ++#if HAVE_CONFIG_H ++# include "config.h" ++#endif ++ ++#include "mutt.h" ++ ++#ifdef USE_COMPRESSED ++ ++#include "mx.h" ++#include "mailbox.h" ++#include "mutt_curses.h" ++ ++#include ++#include ++#include ++#include ++ ++typedef struct ++{ ++ const char *close; /* close-hook command */ ++ const char *open; /* open-hook command */ ++ const char *append; /* append-hook command */ ++ off_t size; /* size of real folder */ ++} COMPRESS_INFO; ++ ++ ++/* ++ * ctx - context to lock ++ * excl - exclusive lock? ++ * retry - should retry if unable to lock? ++ */ ++int mbox_lock_compressed (CONTEXT *ctx, FILE *fp, int excl, int retry) ++{ ++ int r; ++ ++ if ((r = mx_lock_file (ctx->realpath, fileno (fp), excl, 1, retry)) == 0) ++ ctx->locked = 1; ++ else if (retry && !excl) ++ { ++ ctx->readonly = 1; ++ return 0; ++ } ++ ++ return (r); ++} ++ ++void mbox_unlock_compressed (CONTEXT *ctx, FILE *fp) ++{ ++ if (ctx->locked) ++ { ++ fflush (fp); ++ ++ mx_unlock_file (ctx->realpath, fileno (fp), 1); ++ ctx->locked = 0; ++ } ++} ++ ++static int is_new (const char *path) ++{ ++ return (access (path, W_OK) != 0 && errno == ENOENT) ? 1 : 0; ++} ++ ++static const char* find_compress_hook (int type, const char *path) ++{ ++ const char* c = mutt_find_hook (type, path); ++ return (!c || !*c) ? NULL : c; ++} ++ ++int mutt_can_read_compressed (const char *path) ++{ ++ return find_compress_hook (M_OPENHOOK, path) ? 1 : 0; ++} ++ ++/* ++ * if the file is new, we really do not append, but create, and so use ++ * close-hook, and not append-hook ++ */ ++static const char* get_append_command (const char *path, const CONTEXT* ctx) ++{ ++ COMPRESS_INFO *ci = (COMPRESS_INFO *) ctx->compressinfo; ++ return (is_new (path)) ? ci->close : ci->append; ++} ++ ++int mutt_can_append_compressed (const char *path) ++{ ++ int magic; ++ ++ if (is_new (path)) ++ { ++ char *dir_path = safe_strdup(path); ++ char *aux = strrchr(dir_path, '/'); ++ int dir_valid = 1; ++ if (aux) ++ { ++ *aux='\0'; ++ if (access(dir_path, W_OK|X_OK)) ++ dir_valid = 0; ++ } ++ safe_free((void**)&dir_path); ++ return dir_valid && (find_compress_hook (M_CLOSEHOOK, path) ? 1 : 0); ++ } ++ ++ magic = mx_get_magic (path); ++ ++ if (magic != 0 && magic != M_COMPRESSED) ++ return 0; ++ ++ return (find_compress_hook (M_APPENDHOOK, path) ++ || (find_compress_hook (M_OPENHOOK, path) ++ && find_compress_hook (M_CLOSEHOOK, path))) ? 1 : 0; ++} ++ ++/* open a compressed mailbox */ ++static COMPRESS_INFO *set_compress_info (CONTEXT *ctx) ++{ ++ COMPRESS_INFO *ci; ++ ++ /* Now lets uncompress this thing */ ++ ci = safe_malloc (sizeof (COMPRESS_INFO)); ++ ctx->compressinfo = (void*) ci; ++ ci->append = find_compress_hook (M_APPENDHOOK, ctx->path); ++ ci->open = find_compress_hook (M_OPENHOOK, ctx->path); ++ ci->close = find_compress_hook (M_CLOSEHOOK, ctx->path); ++ return ci; ++} ++ ++static void set_path (CONTEXT* ctx) ++{ ++ char tmppath[_POSIX_PATH_MAX]; ++ ++ /* Setup the right paths */ ++ ctx->realpath = ctx->path; ++ ++ /* Uncompress to /tmp */ ++ mutt_mktemp (tmppath); ++ ctx->path = safe_malloc (strlen (tmppath) + 1); ++ strcpy (ctx->path, tmppath); ++} ++ ++static int get_size (const char* path) ++{ ++ struct stat sb; ++ if (stat (path, &sb) != 0) ++ return 0; ++ return (sb.st_size); ++} ++ ++static void store_size (CONTEXT* ctx) ++{ ++ COMPRESS_INFO *ci = (COMPRESS_INFO *) ctx->compressinfo; ++ ci->size = get_size (ctx->realpath); ++} ++ ++static const char * ++compresshook_format_str (char *dest, size_t destlen, size_t col, char op, ++ const char *src, const char *fmt, ++ const char *ifstring, const char *elsestring, ++ unsigned long data, format_flag flags) ++{ ++ char tmp[SHORT_STRING]; ++ ++ CONTEXT *ctx = (CONTEXT *) data; ++ switch (op) ++ { ++ case 'f': ++ snprintf (tmp, sizeof (tmp), "%%%ss", fmt); ++ snprintf (dest, destlen, tmp, ctx->realpath); ++ break; ++ case 't': ++ snprintf (tmp, sizeof (tmp), "%%%ss", fmt); ++ snprintf (dest, destlen, tmp, ctx->path); ++ break; ++ } ++ return (src); ++} ++ ++/* ++ * check that the command has both %f and %t ++ * 0 means OK, -1 means error ++ */ ++int mutt_test_compress_command (const char* cmd) ++{ ++ return (strstr (cmd, "%f") && strstr (cmd, "%t")) ? 0 : -1; ++} ++ ++static char *get_compression_cmd (const char* cmd, const CONTEXT* ctx) ++{ ++ char expanded[_POSIX_PATH_MAX]; ++ mutt_FormatString (expanded, sizeof (expanded), 0, cmd, ++ compresshook_format_str, (unsigned long) ctx, 0); ++ return safe_strdup (expanded); ++} ++ ++int mutt_check_mailbox_compressed (CONTEXT* ctx) ++{ ++ COMPRESS_INFO *ci = (COMPRESS_INFO *) ctx->compressinfo; ++ if (ci->size != get_size (ctx->realpath)) ++ { ++ FREE (&ctx->compressinfo); ++ FREE (&ctx->realpath); ++ mutt_error _("Mailbox was corrupted!"); ++ return (-1); ++ } ++ return (0); ++} ++ ++int mutt_open_read_compressed (CONTEXT *ctx) ++{ ++ char *cmd; ++ FILE *fp; ++ int rc; ++ ++ COMPRESS_INFO *ci = set_compress_info (ctx); ++ if (!ci->open) { ++ ctx->magic = 0; ++ FREE (&ctx->compressinfo); ++ return (-1); ++ } ++ if (!ci->close || access (ctx->path, W_OK) != 0) ++ ctx->readonly = 1; ++ ++ set_path (ctx); ++ store_size (ctx); ++ ++ if (!ctx->quiet) ++ mutt_message (_("Decompressing %s..."), ctx->realpath); ++ ++ cmd = get_compression_cmd (ci->open, ctx); ++ if (cmd == NULL) ++ return (-1); ++ dprint (2, (debugfile, "DecompressCmd: '%s'\n", cmd)); ++ ++ if ((fp = fopen (ctx->realpath, "r")) == NULL) ++ { ++ mutt_perror (ctx->realpath); ++ FREE (&cmd); ++ return (-1); ++ } ++ mutt_block_signals (); ++ if (mbox_lock_compressed (ctx, fp, 0, 1) == -1) ++ { ++ fclose (fp); ++ mutt_unblock_signals (); ++ mutt_error _("Unable to lock mailbox!"); ++ FREE (&cmd); ++ return (-1); ++ } ++ ++ endwin (); ++ fflush (stdout); ++ fprintf (stderr, _("Decompressing %s...\n"),ctx->realpath); ++ rc = mutt_system (cmd); ++ mbox_unlock_compressed (ctx, fp); ++ mutt_unblock_signals (); ++ fclose (fp); ++ ++ if (rc) ++ { ++ mutt_any_key_to_continue (NULL); ++ ctx->magic = 0; ++ FREE (&ctx->compressinfo); ++ mutt_error (_("Error executing: %s : unable to open the mailbox!\n"), cmd); ++ } ++ FREE (&cmd); ++ if (rc) ++ return (-1); ++ ++ if (mutt_check_mailbox_compressed (ctx)) ++ return (-1); ++ ++ ctx->magic = mx_get_magic (ctx->path); ++ ++ return (0); ++} ++ ++void restore_path (CONTEXT* ctx) ++{ ++ FREE (&ctx->path); ++ ctx->path = ctx->realpath; ++} ++ ++/* remove the temporary mailbox */ ++void remove_file (CONTEXT* ctx) ++{ ++ if (ctx->magic == M_MBOX || ctx->magic == M_MMDF) ++ remove (ctx->path); ++} ++ ++int mutt_open_append_compressed (CONTEXT *ctx) ++{ ++ FILE *fh; ++ COMPRESS_INFO *ci = set_compress_info (ctx); ++ ++ if (!get_append_command (ctx->path, ctx)) ++ { ++ if (ci->open && ci->close) ++ return (mutt_open_read_compressed (ctx)); ++ ++ ctx->magic = 0; ++ FREE (&ctx->compressinfo); ++ return (-1); ++ } ++ ++ set_path (ctx); ++ ++ ctx->magic = DefaultMagic; ++ ++ if (!is_new (ctx->realpath)) ++ if (ctx->magic == M_MBOX || ctx->magic == M_MMDF) ++ if ((fh = fopen (ctx->path, "w"))) ++ fclose (fh); ++ /* No error checking - the parent function will catch it */ ++ ++ return (0); ++} ++ ++/* close a compressed mailbox */ ++void mutt_fast_close_compressed (CONTEXT *ctx) ++{ ++ dprint (2, (debugfile, "mutt_fast_close_compressed called on '%s'\n", ++ ctx->path)); ++ ++ if (ctx->compressinfo) ++ { ++ if (ctx->fp) ++ fclose (ctx->fp); ++ ctx->fp = NULL; ++ /* if the folder was removed, remove the gzipped folder too */ ++ if ((ctx->magic > 0) ++ && (access (ctx->path, F_OK) != 0) ++ && ! option (OPTSAVEEMPTY)) ++ remove (ctx->realpath); ++ else ++ remove_file (ctx); ++ ++ restore_path (ctx); ++ FREE (&ctx->compressinfo); ++ } ++} ++ ++/* return 0 on success, -1 on failure */ ++int mutt_sync_compressed (CONTEXT* ctx) ++{ ++ char *cmd; ++ int rc = 0; ++ FILE *fp; ++ COMPRESS_INFO *ci = (COMPRESS_INFO *) ctx->compressinfo; ++ ++ if (!ctx->quiet) ++ mutt_message (_("Compressing %s..."), ctx->realpath); ++ ++ cmd = get_compression_cmd (ci->close, ctx); ++ if (cmd == NULL) ++ return (-1); ++ ++ if ((fp = fopen (ctx->realpath, "a")) == NULL) ++ { ++ mutt_perror (ctx->realpath); ++ FREE (&cmd); ++ return (-1); ++ } ++ mutt_block_signals (); ++ if (mbox_lock_compressed (ctx, fp, 1, 1) == -1) ++ { ++ fclose (fp); ++ mutt_unblock_signals (); ++ mutt_error _("Unable to lock mailbox!"); ++ store_size (ctx); ++ FREE (&cmd); ++ return (-1); ++ } ++ ++ dprint (2, (debugfile, "CompressCommand: '%s'\n", cmd)); ++ ++ endwin (); ++ fflush (stdout); ++ fprintf (stderr, _("Compressing %s...\n"), ctx->realpath); ++ if (mutt_system (cmd)) ++ { ++ mutt_any_key_to_continue (NULL); ++ mutt_error (_("%s: Error compressing mailbox! Original mailbox deleted, uncompressed one kept!\n"), ctx->path); ++ rc = -1; ++ } ++ ++ mbox_unlock_compressed (ctx, fp); ++ mutt_unblock_signals (); ++ fclose (fp); ++ ++ FREE (&cmd); ++ ++ store_size (ctx); ++ ++ return (rc); ++} ++ ++int mutt_slow_close_compressed (CONTEXT *ctx) ++{ ++ FILE *fp; ++ const char *append; ++ char *cmd; ++ COMPRESS_INFO *ci = (COMPRESS_INFO *) ctx->compressinfo; ++ ++ dprint (2, (debugfile, "mutt_slow_close_compressed called on '%s'\n", ++ ctx->path)); ++ ++ if (! (ctx->append ++ && ((append = get_append_command (ctx->realpath, ctx)) ++ || (append = ci->close)))) ++ { ++ /* if we can not or should not append, we only have to remove the */ ++ /* compressed info, because sync was already called */ ++ mutt_fast_close_compressed (ctx); ++ return (0); ++ } ++ ++ if (ctx->fp) ++ fclose (ctx->fp); ++ ctx->fp = NULL; ++ ++ if (!ctx->quiet) ++ { ++ if (append == ci->close) ++ mutt_message (_("Compressing %s..."), ctx->realpath); ++ else ++ mutt_message (_("Compressed-appending to %s..."), ctx->realpath); ++ } ++ ++ cmd = get_compression_cmd (append, ctx); ++ if (cmd == NULL) ++ return (-1); ++ ++ if ((fp = fopen (ctx->realpath, "a")) == NULL) ++ { ++ mutt_perror (ctx->realpath); ++ FREE (&cmd); ++ return (-1); ++ } ++ mutt_block_signals (); ++ if (mbox_lock_compressed (ctx, fp, 1, 1) == -1) ++ { ++ fclose (fp); ++ mutt_unblock_signals (); ++ mutt_error _("Unable to lock mailbox!"); ++ FREE (&cmd); ++ return (-1); ++ } ++ ++ dprint (2, (debugfile, "CompressCmd: '%s'\n", cmd)); ++ ++ endwin (); ++ fflush (stdout); ++ ++ if (append == ci->close) ++ fprintf (stderr, _("Compressing %s...\n"), ctx->realpath); ++ else ++ fprintf (stderr, _("Compressed-appending to %s...\n"), ctx->realpath); ++ ++ if (mutt_system (cmd)) ++ { ++ mutt_any_key_to_continue (NULL); ++ mutt_error (_(" %s: Error compressing mailbox! Uncompressed one kept!\n"), ++ ctx->path); ++ FREE (&cmd); ++ mbox_unlock_compressed (ctx, fp); ++ mutt_unblock_signals (); ++ fclose (fp); ++ return (-1); ++ } ++ ++ mbox_unlock_compressed (ctx, fp); ++ mutt_unblock_signals (); ++ fclose (fp); ++ remove_file (ctx); ++ restore_path (ctx); ++ FREE (&cmd); ++ FREE (&ctx->compressinfo); ++ ++ return (0); ++} ++ ++#endif /* USE_COMPRESSED */ +--- /dev/null ++++ b/compress.h +@@ -0,0 +1,27 @@ ++/* ++ * Copyright (C) 1997 Alain Penders ++ * ++ * 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., 675 Mass Ave, Cambridge, MA 02139, USA. ++ */ ++ ++int mutt_can_read_compressed (const char *); ++int mutt_can_append_compressed (const char *); ++int mutt_open_read_compressed (CONTEXT *); ++int mutt_open_append_compressed (CONTEXT *); ++int mutt_slow_close_compressed (CONTEXT *); ++int mutt_sync_compressed (CONTEXT *); ++int mutt_test_compress_command (const char *); ++int mutt_check_mailbox_compressed (CONTEXT *); ++void mutt_fast_close_compressed (CONTEXT *); +--- a/configure.ac ++++ b/configure.ac +@@ -795,6 +795,11 @@ AC_ARG_ENABLE(locales-fix, AC_HELP_STRIN + AC_DEFINE(LOCALES_HACK,1,[ Define if the result of isprint() is unreliable. ]) + fi]) + ++AC_ARG_ENABLE(compressed, AC_HELP_STRING([--enable-compressed], [Enable compressed folders support]), ++ [if test x$enableval = xyes; then ++ AC_DEFINE(USE_COMPRESSED,1, [ Define to support compressed folders. ]) ++ fi]) ++ + AC_ARG_WITH(exec-shell, AC_HELP_STRING([--with-exec-shell=SHELL], [Specify alternate shell (ONLY if /bin/sh is broken)]), + [if test $withval != yes; then + AC_DEFINE_UNQUOTED(EXECSHELL, "$withval", +--- a/curs_main.c ++++ b/curs_main.c +@@ -1128,6 +1128,11 @@ int mutt_index_menu (void) + { + int check; + ++#ifdef USE_COMPRESSED ++ if (Context->compressinfo && Context->realpath) ++ mutt_str_replace (&LastFolder, Context->realpath); ++ else ++#endif + mutt_str_replace (&LastFolder, Context->path); + oldcount = Context ? Context->msgcount : 0; + +--- a/doc/manual.xml.head ++++ b/doc/manual.xml.head +@@ -5160,6 +5160,205 @@ macro pager \cb |urlview\n + + + ++ ++Compressed folders Support (OPTIONAL) ++ ++ ++If Mutt was compiled with compressed folders support (by running the ++configure script with the ++--enable-compressed flag), Mutt can open folders ++stored in an arbitrary format, provided that the user has a script to ++convert from/to this format to one of the accepted. ++ ++The most common use is to open compressed archived folders e.g. with ++gzip. ++ ++In addition, the user can provide a script that gets a folder in an ++accepted format and appends its context to the folder in the ++user-defined format, which may be faster than converting the entire ++folder to the accepted format, appending to it and converting back to ++the user-defined format. ++ ++There are three hooks defined (open-hook, close-hook and append-hook) which define commands to ++uncompress and compress a folder and to append messages to an existing ++compressed folder respectively. ++ ++For example: ++ ++ ++open-hook \\.gz$ "gzip -cd %f > %t" ++close-hook \\.gz$ "gzip -c %t > %f" ++append-hook \\.gz$ "gzip -c %t >> %f" ++ ++ ++You do not have to specify all of the commands. If you omit append-hook, the folder will be open and ++closed again each time you will add to it. If you omit close-hook (or give empty command) , the ++folder will be open in the mode. If you specify append-hook though you'll be able to ++append to the folder. ++ ++Note that Mutt will only try to use hooks if the file is not in one of ++the accepted formats. In particular, if the file is empty, mutt ++supposes it is not compressed. This is important because it allows the ++use of programs that do not have well defined extensions. Just use ++"." as a regexp. But this may be surprising if your ++compressing script produces empty files. In this situation, unset ++$save_empty, so that ++the compressed file will be removed if you delete all of the messages. ++ ++ ++ ++Open a compressed mailbox for reading ++ ++ ++Usage: open-hook regexp "command" ++ ++The command is the command that can be used for ++opening the folders whose names match regexp. ++ ++The command string is the printf-like format ++string, and it should accept two parameters: %f, which is ++replaced with the (compressed) folder name, and %t which is ++replaced with the name of the temporary folder to which to write. ++ ++%f and %t can be repeated any number of times in the ++command string, and all of the entries are replaced with the ++appropriate folder name. In addition, %% is replaced by ++%, as in printf, and any other %anything is left as is. ++ ++The command should not remove the original compressed file. The ++command should return non-zero exit status if it ++fails, so mutt knows something's wrong. ++ ++Example: ++ ++ ++open-hook \\.gz$ "gzip -cd %f > %t" ++ ++ ++If the command is empty, this operation is ++disabled for this file type. ++ ++ ++ ++ ++Write a compressed mailbox ++ ++ ++Usage: close-hook regexp "command" ++ ++This is used to close the folder that was open with the open-hook command after some changes were ++made to it. ++ ++The command string is the command that can be ++used for closing the folders whose names match ++regexp. It has the same format as in the open-hook command. Temporary folder in this ++case is the folder previously produced by the open-hook command. ++ ++The command should not remove the decompressed file. The ++command should return non-zero exit status if it ++fails, so mutt knows something's wrong. ++ ++Example: ++ ++ ++close-hook \\.gz$ "gzip -c %t > %f" ++ ++ ++If the command is empty, this operation is ++disabled for this file type, and the file can only be open in the ++read-only mode. ++ ++close-hook is not called when you ++exit from the folder if the folder was not changed. ++ ++ ++ ++ ++Append a message to a compressed mailbox ++ ++ ++Usage: append-hook regexp "command" ++ ++This command is used for saving to an existing compressed folder. The ++command is the command that can be used for ++appending to the folders whose names match ++regexp. It has the same format as in the open-hook command. The temporary folder in ++this case contains the messages that are being appended. ++ ++The command should not remove the decompressed file. The ++command should return non-zero exit status if it ++fails, so mutt knows something's wrong. ++ ++Example: ++ ++ ++append-hook \\.gz$ "gzip -c %t >> %f" ++ ++ ++When append-hook is used, the folder ++is not opened, which saves time, but this means that we can not find ++out what the folder type is. Thus the default ($mbox_type) type is always ++supposed (i.e. this is the format used for the temporary folder). ++ ++If the file does not exist when you save to it, close-hook is called, and not append-hook. append-hook is only for appending to ++existing folders. ++ ++If the command is empty, this operation is ++disabled for this file type. In this case, the folder will be open and ++closed again (using open-hook and ++close-hookrespectively) each time you ++will add to it. ++ ++ ++ ++ ++Encrypted folders ++ ++ ++The compressed folders support can also be used to handle encrypted ++folders. If you want to encrypt a folder with PGP, you may want to use ++the following hooks: ++ ++ ++open-hook \\.pgp$ "pgp -f < %f > %t" ++close-hook \\.pgp$ "pgp -fe YourPgpUserIdOrKeyId < %t > %f" ++ ++ ++Please note, that PGP does not support appending to an encrypted ++folder, so there is no append-hook defined. ++ ++If you are using GnuPG instead of PGP, you may use the following hooks ++instead: ++ ++ ++open-hook \\.gpg$ "gpg --decrypt < %f > %t" ++close-hook \\.gpg$ "gpg --encrypt --recipient YourGpgUserIdOrKeyId < %t > %f" ++ ++ ++Note: the folder is temporary stored ++decrypted in the /tmp directory, where it can be read by your system ++administrator. So think about the security aspects of this. ++ ++ ++ ++ + + Mutt's MIME Support + +--- a/doc/Muttrc.head ++++ b/doc/Muttrc.head +@@ -29,6 +29,11 @@ macro generic,pager " + macro index,pager y "?" "show incoming mailboxes list" + bind browser y exit + ++# Use folders which match on \\.gz$ as gzipped folders: ++# 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. + # +--- a/doc/muttrc.man.head ++++ b/doc/muttrc.man.head +@@ -345,6 +345,24 @@ specify the ID of the public key to be u + to a certain recipient. The meaning of "key ID" is to be taken + broadly: This can be a different e-mail address, a numerical key ID, + or even just an arbitrary search string. ++.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. +--- a/hook.c ++++ b/hook.c +@@ -24,6 +24,10 @@ + #include "mailbox.h" + #include "mutt_crypt.h" + ++#ifdef USE_COMPRESSED ++#include "compress.h" ++#endif ++ + #include + #include + #include +@@ -92,6 +96,16 @@ int mutt_parse_hook (BUFFER *buf, BUFFER + memset (&pattern, 0, sizeof (pattern)); + pattern.data = safe_strdup (path); + } ++#ifdef USE_COMPRESSED ++ else if (data & (M_APPENDHOOK | M_OPENHOOK | M_CLOSEHOOK)) ++ { ++ if (mutt_test_compress_command (command.data)) ++ { ++ strfcpy (err->data, _("badly formatted command string"), err->dsize); ++ return (-1); ++ } ++ } ++#endif + else if (DefaultHook && !(data & (M_CHARSETHOOK | M_ICONVHOOK | M_ACCOUNTHOOK)) + && (!WithCrypto || !(data & M_CRYPTHOOK)) + ) +--- a/init.h ++++ b/init.h +@@ -3452,6 +3452,11 @@ struct command_t Commands[] = { + { "fcc-hook", mutt_parse_hook, M_FCCHOOK }, + { "fcc-save-hook", mutt_parse_hook, M_FCCHOOK | M_SAVEHOOK }, + { "folder-hook", mutt_parse_hook, M_FOLDERHOOK }, ++#ifdef USE_COMPRESSED ++ { "open-hook", mutt_parse_hook, M_OPENHOOK }, ++ { "close-hook", mutt_parse_hook, M_CLOSEHOOK }, ++ { "append-hook", mutt_parse_hook, M_APPENDHOOK }, ++#endif + { "group", parse_group, 0 }, + { "ungroup", parse_ungroup, 0 }, + { "hdr_order", parse_list, UL &HeaderOrderList }, +--- a/main.c ++++ b/main.c +@@ -402,6 +402,12 @@ static void show_version (void) + #else + "-LOCALES_HACK " + #endif ++ ++#ifdef USE_COMPRESSED ++ "+COMPRESSED " ++#else ++ "-COMPRESSED " ++#endif + + #ifdef HAVE_WC_FUNCS + "+HAVE_WC_FUNCS " +--- a/Makefile.am ++++ b/Makefile.am +@@ -18,7 +18,7 @@ BUILT_SOURCES = keymap_defs.h patchlist. + bin_PROGRAMS = mutt @DOTLOCK_TARGET@ @PGPAUX_TARGET@ + mutt_SOURCES = \ + addrbook.c alias.c attach.c base64.c browser.c buffy.c color.c \ +- crypt.c cryptglue.c \ ++ crypt.c cryptglue.c compress.c \ + commands.c complete.c compose.c copy.c curs_lib.c curs_main.c date.c \ + edit.c enter.c flags.c init.c filter.c from.c \ + getdomain.c group.c \ +@@ -57,7 +57,7 @@ EXTRA_mutt_SOURCES = account.c bcache.c + bcache.h browser.h hcache.h mbyte.h mutt_idna.h remailer.h url.h + + EXTRA_DIST = COPYRIGHT GPL OPS OPS.PGP OPS.CRYPT OPS.SMIME TODO UPDATING \ +- configure account.h \ ++ configure account.h compress.h \ + attach.h buffy.h charset.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 \ +--- a/mbox.c ++++ b/mbox.c +@@ -29,6 +29,10 @@ + #include "copy.h" + #include "mutt_curses.h" + ++#ifdef USE_COMPRESSED ++#include "compress.h" ++#endif ++ + #include + #include + #include +@@ -1038,6 +1042,12 @@ bail: /* Come here in case of disaster + int mbox_close_mailbox (CONTEXT *ctx) + { + mx_unlock_file (ctx->path, fileno (ctx->fp), 1); ++ ++#ifdef USE_COMPRESSED ++ if (ctx->compressinfo) ++ mutt_slow_close_compressed (ctx); ++#endif ++ + mutt_unblock_signals (); + mx_fastclose_mailbox (ctx); + return 0; +--- a/mutt.h ++++ b/mutt.h +@@ -140,6 +140,11 @@ typedef enum + #define M_ACCOUNTHOOK (1<<9) + #define M_REPLYHOOK (1<<10) + #define M_SEND2HOOK (1<<11) ++#ifdef USE_COMPRESSED ++#define M_OPENHOOK (1<<12) ++#define M_APPENDHOOK (1<<13) ++#define M_CLOSEHOOK (1<<14) ++#endif + + /* tree characters for linearize_tree and print_enriched_string */ + #define M_TREE_LLCORNER 1 +@@ -872,6 +877,11 @@ typedef struct _context + int flagged; /* how many flagged messages */ + int msgnotreadyet; /* which msg "new" in pager, -1 if none */ + ++#ifdef USE_COMPRESSED ++ void *compressinfo; /* compressed mbox module private data */ ++ char *realpath; /* path to compressed mailbox */ ++#endif /* USE_COMPRESSED */ ++ + short magic; /* mailbox type */ + + unsigned char rights[(RIGHTSMAX + 7)/8]; /* ACL bits */ +--- a/mx.c ++++ b/mx.c +@@ -30,6 +30,10 @@ + #include "keymap.h" + #include "url.h" + ++#ifdef USE_COMPRESSED ++#include "compress.h" ++#endif ++ + #ifdef USE_IMAP + #include "imap.h" + #endif +@@ -445,6 +449,10 @@ int mx_get_magic (const char *path) + return (-1); + } + ++#ifdef USE_COMPRESSED ++ if (magic == 0 && mutt_can_read_compressed (path)) ++ return M_COMPRESSED; ++#endif + return (magic); + } + +@@ -484,6 +492,13 @@ static int mx_open_mailbox_append (CONTE + { + struct stat sb; + ++#ifdef USE_COMPRESSED ++ /* special case for appending to compressed folders - ++ * even if we can not open them for reading */ ++ if (mutt_can_append_compressed (ctx->path)) ++ mutt_open_append_compressed (ctx); ++#endif ++ + ctx->append = 1; + + #ifdef USE_IMAP +@@ -647,7 +662,12 @@ CONTEXT *mx_open_mailbox (const char *pa + } + + ctx->magic = mx_get_magic (path); +- ++ ++#ifdef USE_COMPRESSED ++ if (ctx->magic == M_COMPRESSED) ++ mutt_open_read_compressed (ctx); ++#endif ++ + if(ctx->magic == 0) + mutt_error (_("%s is not a mailbox."), path); + +@@ -748,6 +768,10 @@ void mx_fastclose_mailbox (CONTEXT *ctx) + mutt_free_header (&ctx->hdrs[i]); + FREE (&ctx->hdrs); + FREE (&ctx->v2r); ++#ifdef USE_COMPRESSED ++ if (ctx->compressinfo) ++ mutt_fast_close_compressed (ctx); ++#endif + FREE (&ctx->path); + FREE (&ctx->pattern); + if (ctx->limit_pattern) +@@ -800,6 +824,12 @@ static int sync_mailbox (CONTEXT *ctx, i + + if (tmp && tmp->new == 0) + mutt_update_mailbox (tmp); ++ ++#ifdef USE_COMPRESSED ++ if (rc == 0 && ctx->compressinfo) ++ return mutt_sync_compressed (ctx); ++#endif ++ + return rc; + } + +@@ -1058,6 +1088,11 @@ int mx_close_mailbox (CONTEXT *ctx, int + !mutt_is_spool(ctx->path) && !option (OPTSAVEEMPTY)) + mx_unlink_empty (ctx->path); + ++#ifdef USE_COMPRESSED ++ if (ctx->compressinfo && mutt_slow_close_compressed (ctx)) ++ return (-1); ++#endif ++ + mx_fastclose_mailbox (ctx); + + return 0; +@@ -1373,6 +1408,11 @@ int mx_check_mailbox (CONTEXT *ctx, int + { + int rc; + ++#ifdef USE_COMPRESSED ++ if (ctx->compressinfo) ++ return mutt_check_mailbox_compressed (ctx); ++#endif ++ + if (ctx) + { + if (ctx->locked) lock = 0; +--- a/mx.h ++++ b/mx.h +@@ -40,6 +40,9 @@ enum + #ifdef USE_POP + , M_POP + #endif ++#ifdef USE_COMPRESSED ++ , M_COMPRESSED ++#endif + }; + + WHERE short DefaultMagic INITVAL (M_MBOX); +--- a/po/de.po ++++ b/po/de.po +@@ -3,7 +3,7 @@ msgstr "" + "Project-Id-Version: 1.5.18\n" + "Report-Msgid-Bugs-To: \n" + "POT-Creation-Date: 2009-01-05 16:36-0800\n" +-"PO-Revision-Date: 2008-05-18 10:28+0200\n" ++"PO-Revision-Date: 2009-01-15 23:09+0100\n" + "Last-Translator: Roland Rosenfeld \n" + "Language-Team: German \n" + "MIME-Version: 1.0\n" +@@ -1975,6 +1975,10 @@ msgstr "Hilfe für %s" + msgid "Bad history file format (line %d)" + msgstr "Falsches Format der Datei früherer Eingaben (Zeile %d)" + ++#: hook.c:96 ++msgid "badly formatted command string" ++msgstr "Hook enthält nicht die Muster %f und %t" ++ + #: hook.c:251 + #, c-format + msgid "unhook: Can't do unhook * from within a hook." +@@ -2718,18 +2722,10 @@ msgstr "Lese %s..." + msgid "Mailbox is corrupt!" + msgstr "Mailbox fehlerhaft!" + +-#: mbox.c:678 +-msgid "Mailbox was corrupted!" +-msgstr "Mailbox wurde zerstört!" +- + #: mbox.c:719 mbox.c:976 + msgid "Fatal error! Could not reopen mailbox!" + msgstr "Fataler Fehler, konnte Mailbox nicht erneut öffnen!" + +-#: mbox.c:728 +-msgid "Unable to lock mailbox!" +-msgstr "Kann Mailbox nicht für exklusiven Zugriff sperren!" +- + #. this means ctx->changed or ctx->deleted was set, but no + #. * messages were found to be changed or deleted. This should + #. * never happen, is we presume it is a bug in mutt. +@@ -5298,3 +5294,45 @@ msgstr "Zeige S/MIME Optionen" + + #~ msgid "Authentication method is unknown." + #~ msgstr "Authentifizierungsmethode unbekannt." ++ ++#: compress.c:203 mbox.c:661 ++msgid "Mailbox was corrupted!" ++msgstr "Mailbox wurde zerstört!" ++ ++#: compress.c:228 compress.c:253 ++#, c-format ++msgid "Decompressing %s...\n" ++msgstr "Entpacke %s...\n" ++ ++#: compress.c:246 compress.c:367 compress.c:443 mbox.c:706 ++msgid "Unable to lock mailbox!" ++msgstr "Kann Mailbox nicht für exklusiven Zugriff sperren!" ++ ++#: compress.c:264 ++#, c-format ++msgid "Error executing: %s : unable to open the mailbox!\n" ++msgstr "Fehler beim Ausführen von %s : Kann die Mailbox nicht öffnen!\n" ++ ++#: compress.c:350 compress.c:377 compress.c:423 compress.c:454 ++#, c-format ++msgid "Compressing %s...\n" ++msgstr "Komprimiere %s...\n" ++ ++#: compress.c:381 ++#, c-format ++msgid "" ++"%s: Error compressing mailbox! Original mailbox deleted, uncompressed one " ++"kept!\n" ++msgstr "" ++"%s: Fehler beim Komprimieren der Mailbox! Ursprüngliche Mailbox gelöscht, " ++"entpackte gespeichert!\n" ++ ++#: compress.c:425 compress.c:456 ++#, c-format ++msgid "Compressed-appending to %s...\n" ++msgstr "Hänge komprimiert an %s... an\n" ++ ++#: 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" +--- a/po/POTFILES.in ++++ b/po/POTFILES.in +@@ -8,6 +8,7 @@ charset.c + color.c + commands.c + compose.c ++compress.c + crypt-gpgme.c + crypt.c + cryptglue.c +--- a/status.c ++++ b/status.c +@@ -96,6 +96,14 @@ status_format_str (char *buf, size_t buf + + case 'f': + snprintf (fmt, sizeof(fmt), "%%%ss", prefix); ++#ifdef USE_COMPRESSED ++ if (Context && Context->compressinfo && 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)); +--- a/PATCHES ++++ b/PATCHES +@@ -0,0 +1 @@ ++patch-1.5.18.rr.compressed.1 diff --git a/debian/patches/features/compressed-folders.debian b/debian/patches/features/compressed-folders.debian new file mode 100644 index 0000000..c077697 --- /dev/null +++ b/debian/patches/features/compressed-folders.debian @@ -0,0 +1,7 @@ +--- a/config-debian.h ++++ b/config-debian.h +@@ -0,0 +1,4 @@ ++#ifndef USE_COMPRESSED ++#error "You forgot to update debian/patches/autotools-update." ++#error "Run sh debian/update-autotools.sh" ++#endif diff --git a/debian/patches/features/ifdef b/debian/patches/features/ifdef new file mode 100644 index 0000000..661bb2f --- /dev/null +++ b/debian/patches/features/ifdef @@ -0,0 +1,155 @@ +# vim:ft=diff: +This is the ifdef patch by Cedric Duval . + +This command allows to test if a feature has been compiled in before actually +attempting to configure / use it. + +Syntax: + +ifdef + +where can be the name of a variable, function, or command. + +Examples: + +ifdef imap-fetch-mail 'source ~/.mutt/imap_setup' +ifdef trash set trash=~/Mail/trash + +* Patch last synced with upstream: + - Date: 2007-02-15 + - File: + http://cedricduval.free.fr/mutt/patches/download/patch-1.5.4.cd.ifdef.1 + +* Changes made: + - Updated to 1.5.13 + - Also look for commands + - Use mutt_strcmp in favor of ascii_strncasecmp to compare strings. + +== END PATCH +Index: mutt/init.c +=================================================================== +--- mutt.orig/init.c 2006-12-12 14:15:03.000000000 +0100 ++++ mutt/init.c 2007-02-15 23:38:45.597907432 +0100 +@@ -624,6 +624,65 @@ static int remove_from_rx_list (RX_LIST + return (rv); + } + ++static int parse_ifdef (BUFFER *tmp, BUFFER *s, unsigned long data, BUFFER *err) ++{ ++ int i, j, res = 0; ++ BUFFER token; ++ ++ memset (&token, 0, sizeof (token)); ++ mutt_extract_token (tmp, s, 0); ++ ++ /* is the item defined as a variable? */ ++ res = (mutt_option_index (tmp->data) != -1); ++ ++ /* a function? */ ++ if (!res) ++ for (i = 0; !res && i < MENU_MAX; i++) ++ { ++ struct binding_t *b = km_get_table (Menus[i].value); ++ ++ if (!b) ++ continue; ++ ++ for (j = 0; b[j].name; j++) ++ if (!mutt_strcmp (tmp->data, b[j].name)) ++ { ++ res = 1; ++ break; ++ } ++ } ++ ++ /* a command? */ ++ if (!res) ++ for (i = 0; Commands[i].name; i++) ++ { ++ if (!mutt_strcmp (tmp->data, Commands[i].name)) ++ { ++ res = 1; ++ break; ++ } ++ } ++ ++ if (!MoreArgs (s)) ++ { ++ snprintf (err->data, err->dsize, _("ifdef: too few arguments")); ++ return (-1); ++ } ++ mutt_extract_token (tmp, s, M_TOKEN_SPACE); ++ ++ if (res) ++ { ++ if (mutt_parse_rc_line (tmp->data, &token, err) == -1) ++ { ++ mutt_error ("Erreur: %s", err->data); ++ FREE (&token.data); ++ return (-1); ++ } ++ FREE (&token.data); ++ } ++ return 0; ++} ++ + static int parse_unignore (BUFFER *buf, BUFFER *s, unsigned long data, BUFFER *err) + { + do +Index: mutt/init.h +=================================================================== +--- mutt.orig/init.h 2006-12-12 14:15:03.000000000 +0100 ++++ mutt/init.h 2007-02-15 23:26:21.160079184 +0100 +@@ -3017,6 +3017,7 @@ static int parse_lists (BUFFER *, BUFFER + static int parse_unlists (BUFFER *, BUFFER *, unsigned long, BUFFER *); + static int parse_alias (BUFFER *, BUFFER *, unsigned long, BUFFER *); + static int parse_unalias (BUFFER *, BUFFER *, unsigned long, BUFFER *); ++static int parse_ifdef (BUFFER *, BUFFER *, unsigned long, BUFFER *); + static int parse_ignore (BUFFER *, BUFFER *, unsigned long, BUFFER *); + static int parse_unignore (BUFFER *, BUFFER *, unsigned long, BUFFER *); + static int parse_source (BUFFER *, BUFFER *, unsigned long, BUFFER *); +@@ -3068,6 +3069,7 @@ struct command_t Commands[] = { + { "group", parse_group, 0 }, + { "ungroup", parse_ungroup, 0 }, + { "hdr_order", parse_list, UL &HeaderOrderList }, ++ { "ifdef", parse_ifdef, 0 }, + #ifdef HAVE_ICONV + { "iconv-hook", mutt_parse_hook, M_ICONVHOOK }, + #endif +Index: mutt/doc/manual.xml.head +=================================================================== +--- mutt.orig/doc/manual.xml.head 2007-02-15 21:53:09.312169280 +0100 ++++ mutt/doc/manual.xml.head 2007-02-15 23:42:23.875724160 +0100 +@@ -3091,6 +3091,28 @@ considered to be an executable program f + + + ++ ++ ++Configuring features conditionnaly ++ ++ ++Usage: ifdef item command ++ ++ ++ ++This command allows to test if a feature has been compiled in, before ++actually executing the command. Item can be either the name of a ++function, variable, or command. Example: ++ ++ ++ ++ ++ifdef imap_keepalive 'source ~/.mutt/imap_setup' ++ ++ ++ ++ ++ + + Removing hooks + +--- a/PATCHES ++++ b/PATCHES +@@ -0,0 +1 @@ ++patch-1.5.13.cd.ifdef.2 diff --git a/debian/patches/features/maildir-mtime b/debian/patches/features/maildir-mtime new file mode 100644 index 0000000..92c2909 --- /dev/null +++ b/debian/patches/features/maildir-mtime @@ -0,0 +1,180 @@ +# vi: ft=diff +This is the maildir mtime patch by Dale Woolridge. + +The home page for this patch is: + + http://www.mutt.ca/maildir-mtime.html + +* Patch last synced with upstream: + - Date: 2004-08-10 + - File: http://www.mutt.ca/patches/patch-1.5.6.dw.maildir-mtime.1 + +* Changes made: + - removed a spurious const in add_folder() definition. + - added a $maildir_mtime option to allow this patch to be disabled at + runtime (see Bug#253261, comments from Zephaniah E. Hull). + - 2007-04-03 myon: resolved conflict in browser.c + +== END PATCH +--- a/buffy.c ++++ b/buffy.c +@@ -226,6 +226,7 @@ int mutt_parse_mailboxes (BUFFER *path, + (*tmp)->new = 0; + (*tmp)->notified = 1; + (*tmp)->newly_created = 0; ++ (*tmp)->mtime = 0; + + /* for check_mbox_size, it is important that if the folder is new (tested by + * reading it), the size is set to 0 so that later when we check we see +@@ -254,6 +255,7 @@ int mutt_buffy_check (int force) + { + BUFFY *tmp; + struct stat sb; ++ struct stat smd; + struct dirent *de; + DIR *dirp; + char path[_POSIX_PATH_MAX]; +@@ -298,6 +300,7 @@ int mutt_buffy_check (int force) + if (tmp->magic != M_IMAP) + #endif + tmp->new = 0; ++ tmp->mtime = 0; + + #ifdef USE_IMAP + if (tmp->magic != M_IMAP) +@@ -380,10 +383,20 @@ int mutt_buffy_check (int force) + if (*de->d_name != '.' && + (!(p = strstr (de->d_name, ":2,")) || !strchr (p + 3, 'T'))) + { +- /* one new and undeleted message is enough */ +- BuffyCount++; +- tmp->new = 1; +- break; ++ if (!tmp->new) ++ { ++ /* one new and undeleted message is enough */ ++ BuffyCount++; ++ tmp->new = 1; ++ ++ if (! option (OPTMAILDIRMTIME)) /* prevent stat calls */ ++ break; ++ } ++ snprintf (path, sizeof (path), "%s/new/%s", tmp->path, de->d_name); ++ if (!stat (path, &smd) && smd.st_mtime > tmp->mtime) ++ { ++ tmp->mtime = smd.st_mtime; ++ } + } + } + closedir (dirp); +--- a/init.h ++++ b/init.h +@@ -1086,6 +1086,16 @@ struct option_t MuttVars[] = { + ** \fBDON'T CHANGE THIS SETTING UNLESS YOU ARE REALLY SURE WHAT YOU ARE + ** DOING!\fP + */ ++ { "maildir_mtime", DT_BOOL, R_NONE, OPTMAILDIRMTIME, 0 }, ++ /* ++ ** .pp ++ ** If set, the sort-by-date option in the browser will sort maildirs ++ ** smartly, not using the mtime of the maildir itself but that of the ++ ** newest message in the new subdirectory, making the sorting by ++ ** reverse date much more useful. People with maildirs over NFS may ++ ** wish to leave this option unset. ++ ** ++ */ + #ifdef USE_HCACHE + { "header_cache", DT_PATH, R_NONE, UL &HeaderCache, 0 }, + /* +--- a/mutt.h ++++ b/mutt.h +@@ -395,6 +395,7 @@ enum + OPTINCLUDEONLYFIRST, + OPTKEEPFLAGGED, + OPTMAILCAPSANITIZE, ++ OPTMAILDIRMTIME, + OPTMAILDIRTRASH, + OPTMARKERS, + OPTMARKOLD, +--- a/browser.c ++++ b/browser.c +@@ -32,6 +32,7 @@ + #ifdef USE_IMAP + #include "imap.h" + #endif ++#include "mx.h" + + #include + #include +@@ -307,8 +308,10 @@ folder_format_str (char *dest, size_t de + } + + static void add_folder (MUTTMENU *m, struct browser_state *state, +- const char *name, const struct stat *s, int new) ++ const char *name, /*DEB const IAN*/ struct stat *s, BUFFY *mbuf) + { ++ int new = (mbuf) ? mbuf->new : 0; ++ + if (state->entrylen == state->entrymax) + { + /* need to allocate more space */ +@@ -320,6 +323,9 @@ static void add_folder (MUTTMENU *m, str + m->data = state->entry; + } + ++ if (mbuf && mbuf->magic == M_MAILDIR && mbuf->mtime) ++ s->st_mtime = mbuf->mtime; ++ + if (s != NULL) + { + (state->entry)[state->entrylen].mode = s->st_mode; +@@ -414,7 +420,7 @@ static int examine_directory (MUTTMENU * + tmp = Incoming; + while (tmp && mutt_strcmp (buffer, tmp->path)) + tmp = tmp->next; +- add_folder (menu, state, de->d_name, &s, (tmp) ? tmp->new : 0); ++ add_folder (menu, state, de->d_name, &s, tmp); + } + closedir (dp); + browser_sort (state); +@@ -438,14 +444,15 @@ static int examine_mailboxes (MUTTMENU * + if (mx_is_imap (tmp->path)) + { + imap_mailbox_state (tmp->path, &mbox); +- add_folder (menu, state, tmp->path, NULL, mbox.new); ++ tmp->new = mbox.new; ++ add_folder (menu, state, tmp->path, NULL, tmp); + continue; + } + #endif + #ifdef USE_POP + if (mx_is_pop (tmp->path)) + { +- add_folder (menu, state, tmp->path, NULL, tmp->new); ++ add_folder (menu, state, tmp->path, NULL, tmp); + continue; + } + #endif +@@ -459,7 +466,7 @@ static int examine_mailboxes (MUTTMENU * + strfcpy (buffer, NONULL(tmp->path), sizeof (buffer)); + mutt_pretty_mailbox (buffer); + +- add_folder (menu, state, buffer, &s, tmp->new); ++ add_folder (menu, state, buffer, &s, tmp); + } + while ((tmp = tmp->next)); + browser_sort (state); +--- a/buffy.h ++++ b/buffy.h +@@ -25,6 +25,7 @@ typedef struct buffy_t + char *path; + long size; + struct buffy_t *next; ++ time_t mtime; /* for maildirs...time of newest entry */ + short new; /* mailbox has new mail */ + short notified; /* user has been notified */ + short magic; /* mailbox type */ +--- a/PATCHES ++++ b/PATCHES +@@ -0,0 +1 @@ ++patch-1.5.6.dw.maildir-mtime.1 diff --git a/debian/patches/features/purge-message b/debian/patches/features/purge-message new file mode 100644 index 0000000..69851f2 --- /dev/null +++ b/debian/patches/features/purge-message @@ -0,0 +1,231 @@ +# vim:ft=diff: +This is the purge message patch by Cedric Duval . + +(requires trash folder patch) + +This patch adds the purge-message function, which, unlike delete-message, will +bypass the trash folder and really delete the mail. + +You can bind this function to D, for instance, by adding the following +lines to your muttrc: + +bind index \eD purge-message +bind pager \eD purge-message + +Please be very careful with this function, and try to use it as less as +possible. The risk resides in getting into the habit of always using +purge-message instead of delete-message, which would really defeat the purpose +of having a trash folder feature. + +* Patch last synced with upstream: + - Date: 2007-02-15 + - File: http://cedricduval.free.fr/mutt/patches/download/patch-1.5.5.1.cd.purge_message.3.4 + +* Changes made: + - Updated to 1.5.13 + - Fixed indentation of "purged" in mutt.h. + +== END PATCH +Index: trash/OPS +=================================================================== +--- trash.orig/OPS 2006-12-12 14:15:02.000000000 +0100 ++++ trash/OPS 2007-02-15 19:39:57.479112576 +0100 +@@ -140,6 +140,7 @@ OP_PREV_ENTRY "move to the previous entr + OP_PREV_LINE "scroll up one line" + OP_PREV_PAGE "move to the previous page" + OP_PRINT "print the current entry" ++OP_PURGE_MESSAGE "really delete the current entry, bypassing the trash folder" + OP_QUERY "query external program for addresses" + OP_QUERY_APPEND "append new query results to current results" + OP_QUIT "save changes to mailbox and quit" +Index: trash/curs_main.c +=================================================================== +--- trash.orig/curs_main.c 2006-12-12 14:15:02.000000000 +0100 ++++ trash/curs_main.c 2007-02-15 19:39:57.480112424 +0100 +@@ -1778,6 +1778,7 @@ int mutt_index_menu (void) + MAYBE_REDRAW (menu->redraw); + break; + ++ case OP_PURGE_MESSAGE: + case OP_DELETE: + + CHECK_MSGCOUNT; +@@ -1788,6 +1789,7 @@ int mutt_index_menu (void) + if (tag) + { + mutt_tag_set_flag (M_DELETE, 1); ++ mutt_tag_set_flag (M_PURGED, (op != OP_PURGE_MESSAGE) ? 0 : 1); + if (option (OPTDELETEUNTAG)) + mutt_tag_set_flag (M_TAG, 0); + menu->redraw = REDRAW_INDEX; +@@ -1795,6 +1797,8 @@ int mutt_index_menu (void) + else + { + mutt_set_flag (Context, CURHDR, M_DELETE, 1); ++ mutt_set_flag (Context, CURHDR, M_PURGED, ++ (op != OP_PURGE_MESSAGE) ? 0 : 1); + if (option (OPTDELETEUNTAG)) + mutt_set_flag (Context, CURHDR, M_TAG, 0); + if (option (OPTRESOLVE)) +@@ -2088,11 +2092,13 @@ int mutt_index_menu (void) + if (tag) + { + mutt_tag_set_flag (M_DELETE, 0); ++ mutt_tag_set_flag (M_PURGED, 0); + menu->redraw = REDRAW_INDEX; + } + else + { + mutt_set_flag (Context, CURHDR, M_DELETE, 0); ++ mutt_set_flag (Context, CURHDR, M_PURGED, 0); + if (option (OPTRESOLVE) && menu->current < Context->vcount - 1) + { + menu->current++; +@@ -2113,9 +2119,11 @@ int mutt_index_menu (void) + CHECK_ACL(M_ACL_DELETE, _("undelete message(s)")); + + rc = mutt_thread_set_flag (CURHDR, M_DELETE, 0, +- op == OP_UNDELETE_THREAD ? 0 : 1); ++ op == OP_UNDELETE_THREAD ? 0 : 1) ++ + mutt_thread_set_flag (CURHDR, M_PURGED, 0, ++ op == OP_UNDELETE_THREAD ? 0 : 1); + +- if (rc != -1) ++ if (rc > -1) + { + if (option (OPTRESOLVE)) + { +Index: trash/flags.c +=================================================================== +--- trash.orig/flags.c 2007-02-15 19:38:00.433906152 +0100 ++++ trash/flags.c 2007-02-15 19:39:57.480112424 +0100 +@@ -105,6 +105,16 @@ void _mutt_set_flag (CONTEXT *ctx, HEADE + } + break; + ++ case M_PURGED: ++ if (bf) ++ { ++ if (!h->purged) ++ h->purged = 1; ++ } ++ else if (h->purged) ++ h->purged = 0; ++ break; ++ + case M_NEW: + + if (!mutt_bit_isset(ctx->rights,M_ACL_SEEN)) +Index: trash/functions.h +=================================================================== +--- trash.orig/functions.h 2005-09-18 13:16:40.000000000 +0200 ++++ trash/functions.h 2007-02-15 19:39:57.481112272 +0100 +@@ -103,6 +103,7 @@ struct binding_t OpMain[] = { + { "toggle-write", OP_TOGGLE_WRITE, "%" }, + { "next-thread", OP_MAIN_NEXT_THREAD, "\016" }, + { "next-subthread", OP_MAIN_NEXT_SUBTHREAD, "\033n" }, ++ { "purge-message", OP_PURGE_MESSAGE, NULL }, + { "query", OP_QUERY, "Q" }, + { "quit", OP_QUIT, "q" }, + { "reply", OP_REPLY, "r" }, +@@ -189,6 +190,7 @@ struct binding_t OpPager[] = { + { "print-message", OP_PRINT, "p" }, + { "previous-thread", OP_MAIN_PREV_THREAD, "\020" }, + { "previous-subthread",OP_MAIN_PREV_SUBTHREAD, "\033p" }, ++ { "purge-message", OP_PURGE_MESSAGE, NULL }, + { "quit", OP_QUIT, "Q" }, + { "exit", OP_EXIT, "q" }, + { "reply", OP_REPLY, "r" }, +Index: trash/mutt.h +=================================================================== +--- trash.orig/mutt.h 2007-02-15 19:38:00.435905848 +0100 ++++ trash/mutt.h 2007-02-15 19:40:38.768835584 +0100 +@@ -201,6 +201,7 @@ enum + M_UNDELETE, + M_DELETED, + M_APPENDED, ++ M_PURGED, + M_FLAG, + M_TAG, + M_UNTAG, +@@ -705,6 +706,7 @@ typedef struct header + unsigned int flagged : 1; /* marked important? */ + unsigned int tagged : 1; + unsigned int appended : 1; /* has been saved */ ++ unsigned int purged : 1; /* bypassing the trash folder */ + unsigned int deleted : 1; + unsigned int changed : 1; + unsigned int attach_del : 1; /* has an attachment marked for deletion */ +Index: trash/mx.c +=================================================================== +--- trash.orig/mx.c 2007-02-15 19:38:00.436905696 +0100 ++++ trash/mx.c 2007-02-15 19:39:57.482112120 +0100 +@@ -852,6 +852,7 @@ static int trash_append (CONTEXT *ctx) + { + for (i = 0 ; i < ctx->msgcount ; i++) + if (ctx->hdrs[i]->deleted && !ctx->hdrs[i]->appended ++ && !ctx->hdrs[i]->purged + && mutt_append_message (ctx_trash, ctx, ctx->hdrs[i], 0, 0) == -1) + { + mx_close_mailbox (ctx_trash, NULL); +Index: trash/pager.c +=================================================================== +--- trash.orig/pager.c 2006-12-12 14:15:03.000000000 +0100 ++++ trash/pager.c 2007-02-15 19:39:57.482112120 +0100 +@@ -2254,12 +2254,15 @@ search_next: + MAYBE_REDRAW (redraw); + break; + ++ case OP_PURGE_MESSAGE: + case OP_DELETE: + CHECK_MODE(IsHeader (extra)); + CHECK_READONLY; + CHECK_ACL(M_ACL_DELETE, _("delete message")); + + mutt_set_flag (Context, extra->hdr, M_DELETE, 1); ++ mutt_set_flag (Context, extra->hdr, M_PURGED, ++ ch != OP_PURGE_MESSAGE ? 0 : 1); + if (option (OPTDELETEUNTAG)) + mutt_set_flag (Context, extra->hdr, M_TAG, 0); + redraw = REDRAW_STATUS | REDRAW_INDEX; +@@ -2572,6 +2575,7 @@ search_next: + CHECK_ACL(M_ACL_DELETE, _("undelete message")); + + mutt_set_flag (Context, extra->hdr, M_DELETE, 0); ++ mutt_set_flag (Context, extra->hdr, M_PURGED, 0); + redraw = REDRAW_STATUS | REDRAW_INDEX; + if (option (OPTRESOLVE)) + { +@@ -2587,9 +2591,11 @@ search_next: + CHECK_ACL(M_ACL_DELETE, _("undelete message(s)")); + + r = mutt_thread_set_flag (extra->hdr, M_DELETE, 0, ++ ch == OP_UNDELETE_THREAD ? 0 : 1) ++ + mutt_thread_set_flag (extra->hdr, M_PURGED, 0, + ch == OP_UNDELETE_THREAD ? 0 : 1); + +- if (r != -1) ++ if (r > -1) + { + if (option (OPTRESOLVE)) + { +Index: trash/pattern.c +=================================================================== +--- trash.orig/pattern.c 2007-01-25 21:44:41.000000000 +0100 ++++ trash/pattern.c 2007-02-15 19:39:57.483111968 +0100 +@@ -1338,8 +1338,10 @@ int mutt_pattern_func (int op, char *pro + { + switch (op) + { +- case M_DELETE: + case M_UNDELETE: ++ mutt_set_flag (Context, Context->hdrs[Context->v2r[i]], M_PURGED, ++ 0); ++ case M_DELETE: + mutt_set_flag (Context, Context->hdrs[Context->v2r[i]], M_DELETE, + (op == M_DELETE)); + break; +--- a/PATCHES ++++ b/PATCHES +@@ -0,0 +1 @@ ++patch-1.5.13.cd.purge_message.3.4 diff --git a/debian/patches/features/sensible_browser_position b/debian/patches/features/sensible_browser_position new file mode 100644 index 0000000..3ee8ce2 --- /dev/null +++ b/debian/patches/features/sensible_browser_position @@ -0,0 +1,100 @@ +# vi: ft=diff +This is the sensible browser position patch by Haakon Riiser. + + * Found in: <20050309162127.GA5656@s> + http://lists.df7cb.de/mutt/message/20050309.162127.a244a894.en.html + * myon 2009-01-15: refreshed for mutt-1.5.19 + +== END PATCH +--- a/menu.c ++++ b/menu.c +@@ -859,8 +859,12 @@ int menu_redraw (MUTTMENU *menu) + + int mutt_menuLoop (MUTTMENU *menu) + { ++ static int last_position = -1; + int i = OP_NULL; + ++ if (menu->is_mailbox_list && last_position >= 0) ++ menu->current = last_position; ++ + FOREVER + { + if (option (OPTMENUCALLER)) +@@ -1088,6 +1092,8 @@ int mutt_menuLoop (MUTTMENU *menu) + break; + + default: ++ if (menu->is_mailbox_list) ++ last_position = menu->current; + return (i); + } + } +--- a/browser.c ++++ b/browser.c +@@ -56,6 +56,7 @@ typedef struct folder_t + int num; + } FOLDER; + ++static char OldLastDir[_POSIX_PATH_MAX] = ""; + static char LastDir[_POSIX_PATH_MAX] = ""; + static char LastDirBackup[_POSIX_PATH_MAX] = ""; + +@@ -511,9 +512,13 @@ static void init_menu (struct browser_st + menu->tagged = 0; + + if (buffy) ++ { ++ menu->is_mailbox_list = 1; + snprintf (title, titlelen, _("Mailboxes [%d]"), mutt_buffy_check (0)); ++ } + else + { ++ menu->is_mailbox_list = 0; + strfcpy (path, LastDir, sizeof (path)); + mutt_pretty_mailbox (path, sizeof (path)); + #ifdef USE_IMAP +@@ -522,8 +527,23 @@ static void init_menu (struct browser_st + path, NONULL (Mask.pattern)); + else + #endif +- snprintf (title, titlelen, _("Directory [%s], File mask: %s"), +- path, NONULL(Mask.pattern)); ++ { ++ char *p = strrchr (OldLastDir, '/'); ++ if (p && p - OldLastDir == mutt_strlen (LastDir) && ++ mutt_strncmp (LastDir, OldLastDir, p - OldLastDir) == 0) ++ { ++ /* If we get here, it means that LastDir is the parent directory of ++ * OldLastDir. I.e., we're returning from a subdirectory, and we want ++ * to position the cursor on the directory we're returning from. */ ++ int i; ++ for (i = 0; i < state->entrymax; i++) ++ if (mutt_strcmp (state->entry[i].name, p + 1) == 0) ++ menu->current = i; ++ } ++ snprintf (title, titlelen, _("Directory [%s], File mask: %s"), ++ path, NONULL(Mask.pattern)); ++ } ++ + } + menu->redraw = REDRAW_FULL; + } +@@ -706,7 +726,6 @@ void _mutt_select_file (char *f, size_t + #endif + ) + { +- char OldLastDir[_POSIX_PATH_MAX]; + + /* save the old directory */ + strfcpy (OldLastDir, LastDir, sizeof (OldLastDir)); +--- a/mutt_menu.h ++++ b/mutt_menu.h +@@ -49,6 +49,7 @@ typedef struct menu_t + int offset; /* which screen row to start the index */ + int pagelen; /* number of entries per screen */ + int tagprefix; ++ int is_mailbox_list; + + /* Setting dialog != NULL overrides normal menu behaviour. + * In dialog mode menubar is hidden and prompt keys are checked before diff --git a/debian/patches/features/trash-folder b/debian/patches/features/trash-folder new file mode 100644 index 0000000..718c082 --- /dev/null +++ b/debian/patches/features/trash-folder @@ -0,0 +1,283 @@ +# vim:ft=diff: +This is the trash folder patch by Cedric Duval . + +With this patch, if the trash variable is set to a path (unset by default), the +deleted mails will be moved to a trash folder instead of being irremediably +purged when syncing the mailbox. + +For instance, set trash="~/Mail/trash" will cause every deleted mail to go to +this folder. + +Note that the append to the trash folder doesn't occur until the resync is +done. This allows you to change your mind and undo deletes, and thus the moves +to the trash folder are unnecessary. + +Notes + + * You might also want to have a look at the purge message feature below + which is related to this patch. + * IMAP is now supported. To retain the previous behavior, add this to your + muttrc: + folder-hook ^imap:// 'unset trash' + +FAQ + +Every once in a while, someone asks what are the advantages of this patch over +a macro based solution. Here's an attempt to answer this question: + + * The folder history doesn't clutter up with unwanted trash entries. + * Delayed move to the trash allows to change one's mind. + * No need to treat the case of "normal folders" and trash folders + separately with folder-hooks, and to create two sets of macros (one for + the index, one for the pager). + * Works not only with delete-message, but also with every deletion + functions like delete-pattern, delete-thread or delete-subthread. + +To sum up, it's more integrated and transparent to the user. + +* Patch last synced with upstream: + - Date: 2007-02-15 + - File: http://cedricduval.free.fr/mutt/patches/download/patch-1.5.5.1.cd.trash_folder.3.4 + +* Changes made: + - Updated to 1.5.13: + - structure of _mutt_save_message changed (commands.c) + - context of option (OPTCONFIRMAPPEND) changed (muttlib.c) + - Fixed indentation of "appended" in mutt.h. + +== END PATCH +--- a/commands.c ++++ b/commands.c +@@ -688,6 +688,7 @@ int _mutt_save_message (HEADER *h, CONTE + if (option (OPTDELETEUNTAG)) + mutt_set_flag (Context, h, M_TAG, 0); + } ++ mutt_set_flag (Context, h, M_APPENDED, 1); + + return 0; + } +--- a/flags.c ++++ b/flags.c +@@ -69,7 +69,13 @@ void _mutt_set_flag (CONTEXT *ctx, HEADE + { + h->deleted = 0; + update = 1; +- if (upd_ctx) ctx->deleted--; ++ if (upd_ctx) ++ { ++ ctx->deleted--; ++ if (h->appended) ++ ctx->appended--; ++ } ++ h->appended = 0; /* when undeleting, also reset the appended flag */ + #ifdef USE_IMAP + /* see my comment above */ + if (ctx->magic == M_IMAP) +@@ -91,6 +97,17 @@ void _mutt_set_flag (CONTEXT *ctx, HEADE + } + break; + ++ case M_APPENDED: ++ if (bf) ++ { ++ if (!h->appended) ++ { ++ h->appended = 1; ++ if (upd_ctx) ctx->appended++; ++ } ++ } ++ break; ++ + case M_NEW: + + if (!mutt_bit_isset(ctx->rights,M_ACL_SEEN)) +--- a/globals.h ++++ b/globals.h +@@ -142,6 +142,7 @@ WHERE char *StChars; + WHERE char *Status; + WHERE char *Tempdir; + WHERE char *Tochars; ++WHERE char *TrashPath; + WHERE char *Username; + WHERE char *Visual; + WHERE char *XtermTitle; +--- a/imap/message.c ++++ b/imap/message.c +@@ -816,6 +816,7 @@ int imap_copy_messages (CONTEXT* ctx, HE + if (ctx->hdrs[n]->tagged) + { + mutt_set_flag (ctx, ctx->hdrs[n], M_DELETE, 1); ++ mutt_set_flag (ctx, ctx->hdrs[n], M_APPENDED, 1); + if (option (OPTDELETEUNTAG)) + mutt_set_flag (ctx, ctx->hdrs[n], M_TAG, 0); + } +@@ -823,6 +824,7 @@ int imap_copy_messages (CONTEXT* ctx, HE + else + { + mutt_set_flag (ctx, h, M_DELETE, 1); ++ mutt_set_flag (ctx, h, M_APPENDED, 1); + if (option (OPTDELETEUNTAG)) + mutt_set_flag (ctx, h, M_TAG, 0); + } +--- a/init.h ++++ b/init.h +@@ -2881,6 +2881,16 @@ struct option_t MuttVars[] = { + ** by \fIyou\fP. The sixth character is used to indicate when a mail + ** was sent to a mailing-list you subscribe to (default: L). + */ ++ { "trash", DT_PATH, R_NONE, UL &TrashPath, 0 }, ++ /* ++ ** .pp ++ ** If set, this variable specifies the path of the trash folder where the ++ ** mails marked for deletion will be moved, instead of being irremediably ++ ** purged. ++ ** .pp ++ ** NOTE: When you delete a message in the trash folder, it is really ++ ** deleted, so that you have a way to clean the trash. ++ */ + #ifdef USE_SOCKET + { "tunnel", DT_STR, R_NONE, UL &Tunnel, UL 0 }, + /* +--- a/mutt.h ++++ b/mutt.h +@@ -201,6 +201,7 @@ enum + M_DELETE, + M_UNDELETE, + M_DELETED, ++ M_APPENDED, + M_FLAG, + M_TAG, + M_UNTAG, +@@ -712,6 +713,7 @@ typedef struct header + unsigned int mime : 1; /* has a MIME-Version header? */ + unsigned int flagged : 1; /* marked important? */ + unsigned int tagged : 1; ++ unsigned int appended : 1; /* has been saved */ + unsigned int deleted : 1; + unsigned int changed : 1; + unsigned int attach_del : 1; /* has an attachment marked for deletion */ +@@ -883,6 +885,7 @@ typedef struct _context + int new; /* how many new messages? */ + int unread; /* how many unread messages? */ + int deleted; /* how many deleted messages */ ++ int appended; /* how many saved messages? */ + int flagged; /* how many flagged messages */ + int msgnotreadyet; /* which msg "new" in pager, -1 if none */ + +--- a/muttlib.c ++++ b/muttlib.c +@@ -1430,7 +1430,9 @@ int mutt_save_confirm (const char *s, st + + if (magic > 0 && !mx_access (s, W_OK)) + { +- if (option (OPTCONFIRMAPPEND)) ++ if (option (OPTCONFIRMAPPEND) && ++ (!TrashPath || (mutt_strcmp (s, TrashPath) != 0))) ++ /* if we're appending to the trash, there's no point in asking */ + { + snprintf (tmp, sizeof (tmp), _("Append messages to %s?"), s); + if ((rc = mutt_yesorno (tmp, M_YES)) == M_NO) +--- a/mx.c ++++ b/mx.c +@@ -803,6 +803,53 @@ static int sync_mailbox (CONTEXT *ctx, i + return rc; + } + ++/* move deleted mails to the trash folder */ ++static int trash_append (CONTEXT *ctx) ++{ ++ CONTEXT *ctx_trash; ++ int i = 0; ++ struct stat st, stc; ++ ++ if (!TrashPath || !ctx->deleted || ++ (ctx->magic == M_MAILDIR && option (OPTMAILDIRTRASH))) ++ return 0; ++ ++ for (;i < ctx->msgcount && (!ctx->hdrs[i]->deleted || ++ ctx->hdrs[i]->appended); i++); ++ if (i == ctx->msgcount) ++ return 0; /* nothing to be done */ ++ ++ if (mutt_save_confirm (TrashPath, &st) != 0) ++ { ++ mutt_error _("message(s) not deleted"); ++ return -1; ++ } ++ ++ if (lstat (ctx->path, &stc) == 0 && stc.st_ino == st.st_ino ++ && stc.st_dev == st.st_dev && stc.st_rdev == st.st_rdev) ++ return 0; /* we are in the trash folder: simple sync */ ++ ++ if ((ctx_trash = mx_open_mailbox (TrashPath, M_APPEND, NULL)) != NULL) ++ { ++ for (i = 0 ; i < ctx->msgcount ; i++) ++ if (ctx->hdrs[i]->deleted && !ctx->hdrs[i]->appended ++ && mutt_append_message (ctx_trash, ctx, ctx->hdrs[i], 0, 0) == -1) ++ { ++ mx_close_mailbox (ctx_trash, NULL); ++ return -1; ++ } ++ ++ mx_close_mailbox (ctx_trash, NULL); ++ } ++ else ++ { ++ mutt_error _("Can't open trash folder"); ++ return -1; ++ } ++ ++ return 0; ++} ++ + /* save changes and close mailbox */ + int mx_close_mailbox (CONTEXT *ctx, int *index_hint) + { +@@ -938,6 +985,7 @@ int mx_close_mailbox (CONTEXT *ctx, int + if (mutt_append_message (&f, ctx, ctx->hdrs[i], 0, CH_UPDATE_LEN) == 0) + { + mutt_set_flag (ctx, ctx->hdrs[i], M_DELETE, 1); ++ mutt_set_flag (ctx, ctx->hdrs[i], M_APPENDED, 1); + } + else + { +@@ -959,6 +1007,14 @@ int mx_close_mailbox (CONTEXT *ctx, int + return 0; + } + ++ /* copy mails to the trash before expunging */ ++ if (purge && ctx->deleted) ++ if (trash_append (ctx) != 0) ++ { ++ ctx->closing = 0; ++ return -1; ++ } ++ + #ifdef USE_IMAP + /* allow IMAP to preserve the deleted flag across sessions */ + if (ctx->magic == M_IMAP) +@@ -1154,6 +1210,12 @@ int mx_sync_mailbox (CONTEXT *ctx, int * + msgcount = ctx->msgcount; + deleted = ctx->deleted; + ++ if (purge && ctx->deleted) ++ { ++ if (trash_append (ctx) == -1) ++ return -1; ++ } ++ + #ifdef USE_IMAP + if (ctx->magic == M_IMAP) + rc = imap_sync_mailbox (ctx, purge, index_hint); +--- a/postpone.c ++++ b/postpone.c +@@ -279,6 +279,9 @@ int mutt_get_postponed (CONTEXT *ctx, HE + /* finished with this message, so delete it. */ + mutt_set_flag (PostContext, h, M_DELETE, 1); + ++ /* and consider it saved, so that it won't be moved to the trash folder */ ++ mutt_set_flag (PostContext, h, M_APPENDED, 1); ++ + /* update the count for the status display */ + PostCount = PostContext->msgcount - PostContext->deleted; + diff --git a/debian/patches/features/xtitles b/debian/patches/features/xtitles new file mode 100644 index 0000000..6419282 --- /dev/null +++ b/debian/patches/features/xtitles @@ -0,0 +1,170 @@ +# vi: ft=diff +This is the xterm title patch as found on the mutt mailing lists. + +* Changes made: + - 2007-01-27 myon: using %P caused a segfault, updated status.c to catch + menu==NULL. + - 2007-02-20 myon: make the note about the xterm_set_titles defaults a + comment. + - 2008-08-02 myon: move set_xterm_* prototypes into the proper header file + (cleaner code, no functional change, evades conflict with sidebar patch) + +== END PATCH +--- a/curs_main.c ++++ b/curs_main.c +@@ -112,6 +112,19 @@ static const char *No_visible = N_("No v + + extern size_t UngetCount; + ++#define ASCII_CTRL_G 0x07 ++#define ASCII_CTRL_OPEN_SQUARE_BRAKET 0x1b ++ ++void set_xterm_title_bar(char *title) ++{ ++ fprintf(stderr ,"%c]2;%s%c", ASCII_CTRL_OPEN_SQUARE_BRAKET, title, ASCII_CTRL_G); ++} ++ ++void set_xterm_icon_name(char *name) ++{ ++ fprintf(stderr, "%c]1;%s%c", ASCII_CTRL_OPEN_SQUARE_BRAKET, name, ASCII_CTRL_G); ++} ++ + void index_make_entry (char *s, size_t l, MUTTMENU *menu, int num) + { + format_flag flag = M_FORMAT_MAKEPRINT | M_FORMAT_ARROWCURSOR | M_FORMAT_INDEX; +@@ -574,6 +587,13 @@ int mutt_index_menu (void) + SETCOLOR (MT_COLOR_NORMAL); + BKGDSET (MT_COLOR_NORMAL); + menu->redraw &= ~REDRAW_STATUS; ++ if (option(OPTXTERMSETTITLES)) ++ { ++ menu_status_line (buf, sizeof (buf), menu, NONULL (XtermTitle)); ++ set_xterm_title_bar(buf); ++ menu_status_line (buf, sizeof (buf), menu, NONULL (XtermIcon)); ++ set_xterm_icon_name(buf); ++ } + } + + menu->redraw = 0; +--- a/globals.h ++++ b/globals.h +@@ -145,6 +145,8 @@ WHERE char *Tempdir; + WHERE char *Tochars; + WHERE char *Username; + WHERE char *Visual; ++WHERE char *XtermTitle; ++WHERE char *XtermIcon; + + WHERE char *CurrentFolder; + WHERE char *LastFolder; +--- a/init.c ++++ b/init.c +@@ -1870,6 +1870,26 @@ static int parse_set (BUFFER *tmp, BUFFE + toggle_option (MuttVars[idx].data); + else + set_option (MuttVars[idx].data); ++ ++ /* sanity check for xterm */ ++ if ((mutt_strcmp (MuttVars[idx].option, "xterm_set_titles") == 0) ++ && option (OPTXTERMSETTITLES)) ++ { ++ char *ep = getenv ("TERM"); ++ /* Make sure that the terminal can take the control codes */ ++ if (ep == NULL) unset_option (MuttVars[idx].data); ++ else if (mutt_strncasecmp (ep, "xterm", 5) && ++ mutt_strncasecmp (ep, "color-xterm", 11) && ++ mutt_strncasecmp (ep, "eterm", 5) && ++ mutt_strncasecmp (ep, "kterm", 5) && ++ mutt_strncasecmp (ep, "nxterm", 6) && ++ mutt_strncasecmp (ep, "putty", 5) && ++ mutt_strncasecmp (ep, "screen", 6) && ++ mutt_strncasecmp (ep, "cygwin", 6) && ++ mutt_strncasecmp (ep, "rxvt", 4) ) ++ unset_option (MuttVars[idx]. data); ++ ++ } + } + else if (myvar || DTYPE (MuttVars[idx].type) == DT_STR || + DTYPE (MuttVars[idx].type) == DT_PATH || +--- a/init.h ++++ b/init.h +@@ -3104,6 +3104,27 @@ struct option_t MuttVars[] = { + ** option does nothing: mutt will never write out the BCC header + ** in this case. + */ ++ {"xterm_icon", DT_STR, R_BOTH, UL &XtermIcon, UL "M%?n?AIL&ail?"}, ++ /* ++ ** .pp ++ ** Controls the format of the icon title, as long as xterm_set_titles ++ ** is enabled. This string is identical in formatting to the one used by ++ ** ``$$status_format''. ++ */ ++ {"xterm_set_titles", DT_BOOL, R_BOTH, OPTXTERMSETTITLES, 0}, ++ /* The default must be off to force in the validity checking. */ ++ /* ++ ** .pp ++ ** Controls whether mutt sets the xterm title bar and icon name ++ ** (as long as you are in an appropriate terminal). ++ */ ++ {"xterm_title", DT_STR, R_BOTH, UL &XtermTitle, UL "Mutt with %?m?%m messages&no messages?%?n? [%n NEW]?"}, ++ /* ++ ** .pp ++ ** Controls the format of the title bar of the xterm provided that ++ ** xterm_set_titles has been set. This string is identical in formatting ++ ** to the one used by ``$$status_format''. ++ */ + /*--*/ + { NULL } + }; +--- a/mutt.h ++++ b/mutt.h +@@ -458,6 +458,7 @@ enum + OPTWRAPSEARCH, + OPTWRITEBCC, /* write out a bcc header? */ + OPTXMAILER, ++ OPTXTERMSETTITLES, + + OPTCRYPTUSEGPGME, + OPTCRYPTUSEPKA, +--- a/pager.c ++++ b/pager.c +@@ -1767,6 +1767,13 @@ mutt_pager (const char *banner, const ch + mutt_paddstr (COLS, IsHeader (extra) || IsMsgAttach (extra) ? buffer : banner); + BKGDSET (MT_COLOR_NORMAL); + SETCOLOR (MT_COLOR_NORMAL); ++ if (option(OPTXTERMSETTITLES)) ++ { ++ menu_status_line (buffer, sizeof (buffer), index, NONULL (XtermTitle)); ++ set_xterm_title_bar(buffer); ++ menu_status_line (buffer, sizeof (buffer), index, NONULL (XtermIcon)); ++ set_xterm_icon_name(buffer); ++ } + } + + if ((redraw & REDRAW_INDEX) && index) +--- a/status.c ++++ b/status.c +@@ -195,6 +195,8 @@ status_format_str (char *buf, size_t buf + break; + + case 'P': ++ if (!menu) ++ break; + if (menu->top + menu->pagelen >= menu->max) + cp = menu->top ? "end" : "all"; + else +--- a/mutt_menu.h ++++ b/mutt_menu.h +@@ -103,6 +103,8 @@ void menu_current_middle (MUTTMENU *); + void menu_current_bottom (MUTTMENU *); + void menu_check_recenter (MUTTMENU *); + void menu_status_line (char *, size_t, MUTTMENU *, const char *); ++void set_xterm_title_bar (char *title); ++void set_xterm_icon_name (char *name); + + MUTTMENU *mutt_new_menu (void); + void mutt_menuDestroy (MUTTMENU **); +--- a/PATCHES ++++ b/PATCHES +@@ -0,0 +1 @@ ++patch-1.5.13.nt+ab.xtitles.4 diff --git a/debian/patches/misc/am-maintainer-mode b/debian/patches/misc/am-maintainer-mode new file mode 100644 index 0000000..19b9d83 --- /dev/null +++ b/debian/patches/misc/am-maintainer-mode @@ -0,0 +1,12 @@ +Index: debian-mutt-sidebar/configure.ac +=================================================================== +--- debian-mutt-sidebar.orig/configure.ac 2007-08-11 16:42:36.000000000 +0200 ++++ debian-mutt-sidebar/configure.ac 2007-08-11 16:42:49.000000000 +0200 +@@ -9,6 +9,7 @@ AM_CONFIG_HEADER([config.h]) + + mutt_cv_version=`cat $srcdir/VERSION` + AM_INIT_AUTOMAKE(mutt, $mutt_cv_version) ++AM_MAINTAINER_MODE + AC_SUBST([CONFIG_STATUS_DEPENDENCIES], ['$(top_srcdir)/VERSION']) + + AC_GNU_SOURCE diff --git a/debian/patches/misc/define-pgp_getkeys_command.diff b/debian/patches/misc/define-pgp_getkeys_command.diff new file mode 100644 index 0000000..b26727b --- /dev/null +++ b/debian/patches/misc/define-pgp_getkeys_command.diff @@ -0,0 +1,11 @@ +--- a/contrib/gpg.rc ++++ b/contrib/gpg.rc +@@ -72,6 +72,8 @@ set pgp_list_secring_command="gpg --no-v + + # fetch keys + # set pgp_getkeys_command="pkspxycwrap %r" ++# This will work when #172960 will be fixed upstream ++# set pgp_getkeys_command="gpg --recv-keys %r" + + # pattern for good signature - may need to be adapted to locale! + diff --git a/debian/patches/misc/gpg.rc-paths b/debian/patches/misc/gpg.rc-paths new file mode 100644 index 0000000..a095085 --- /dev/null +++ b/debian/patches/misc/gpg.rc-paths @@ -0,0 +1,18 @@ +Index: debian-mutt/contrib/gpg.rc +=================================================================== +--- debian-mutt.orig/contrib/gpg.rc 2007-03-20 22:20:31.000000000 +0100 ++++ debian-mutt/contrib/gpg.rc 2007-03-20 22:25:55.000000000 +0100 +@@ -49,11 +49,11 @@ set pgp_clearsign_command="gpg --no-verb + + # create a pgp/mime encrypted attachment + # set pgp_encrypt_only_command="pgpewrap gpg-2comp -v --batch --output - --encrypt --textmode --armor --always-trust -- -r %r -- %f" +-set pgp_encrypt_only_command="pgpewrap gpg --batch --quiet --no-verbose --output - --encrypt --textmode --armor --always-trust -- -r %r -- %f" ++set pgp_encrypt_only_command="/usr/lib/mutt/pgpewrap gpg --batch --quiet --no-verbose --output - --encrypt --textmode --armor --always-trust -- -r %r -- %f" + + # create a pgp/mime encrypted and signed attachment + # set pgp_encrypt_sign_command="pgpewrap gpg-2comp %?p?--passphrase-fd 0? -v --batch --output - --encrypt --sign %?a?-u %a? --armor --always-trust -- -r %r -- %f" +-set pgp_encrypt_sign_command="pgpewrap gpg %?p?--passphrase-fd 0? --batch --quiet --no-verbose --textmode --output - --encrypt --sign %?a?-u %a? --armor --always-trust -- -r %r -- %f" ++set pgp_encrypt_sign_command="/usr/lib/mutt/pgpewrap gpg %?p?--passphrase-fd 0? --batch --quiet --no-verbose --textmode --output - --encrypt --sign %?a?-u %a? --armor --always-trust -- -r %r -- %f" + + # import a key into the public key ring + set pgp_import_command="gpg --no-verbose --import %f" diff --git a/debian/patches/misc/smime.rc b/debian/patches/misc/smime.rc new file mode 100644 index 0000000..d7ac791 --- /dev/null +++ b/debian/patches/misc/smime.rc @@ -0,0 +1,46 @@ +--- a/contrib/smime.rc ++++ b/contrib/smime.rc +@@ -4,33 +4,34 @@ + + # If you compiled mutt with support for both PGP and S/MIME, PGP + # will be the default method unless the following option is set +-set smime_is_default ++#set smime_is_default + + # Uncoment this if you don't want to set labels for certificates you add. + # unset smime_ask_cert_label + + # Passphrase expiration +-set smime_timeout=300 ++#set smime_timeout=300 + + # Global crypto options -- these affect PGP operations as well. +-set crypt_autosign = yes +-set crypt_replyencrypt = yes +-set crypt_replysign = yes +-set crypt_replysignencrypted = yes +-set crypt_verify_sig = yes ++#set crypt_autosign = yes ++#set crypt_replyencrypt = yes ++#set crypt_replysign = yes ++#set crypt_replysignencrypted = yes ++#set crypt_verify_sig = yes + + # Section A: Key Management. + + # The (default) keyfile for signing/decrypting. Uncomment the following + # line and replace the keyid with your own. +-set smime_default_key="12345678.0" ++#set smime_default_key="12345678.0" + + # Uncommen to make mutt ask what key to use when trying to decrypt a message. + # It will use the default key above (if that was set) else. + # unset smime_decrypt_use_default_key + + # Path to a file or directory with trusted certificates +-set smime_ca_location="~/.smime/ca-bundle.crt" ++#set smime_ca_location="~/.smime/ca-bundle.crt" ++set smime_ca_location=`for f in $HOME/.smime/ca-certificates.crt $HOME/.smime/ca-bundle.crt /etc/ssl/certs/ca-certificates.crt ; do if [ -e $f ] ; then echo $f ; exit ; fi ; done` + + # Path to where all known certificates go. (must exist!) + set smime_certificates="~/.smime/certificates" diff --git a/debian/patches/mutt-patched/sidebar b/debian/patches/mutt-patched/sidebar new file mode 100644 index 0000000..94de9cf --- /dev/null +++ b/debian/patches/mutt-patched/sidebar @@ -0,0 +1,1375 @@ +# vim:ft=diff: +This is the sidebar patch. + +When enabled, mutt will show a list of mailboxes with (new) message counts in a +separate column on the left side of the screen. + +As this feature is still considered to be unstable, this patch is only applied +in the "mutt-patched" package. + +* Configuration variables: + + sidebar_delim (string, default "|") + + This specifies the delimiter between the sidebar (if visible) and + other screens. + + sidebar_visible (boolean, default no) + + This specifies whether or not to show sidebar (left-side list of folders). + + sidebar_width (integer, default 0) + + The width of the sidebar. + +* Patch source: + - http://www.lunar-linux.org/index.php?page=mutt-sidebar + - http://lunar-linux.org/~tchan/mutt/patch-1.5.18.sidebar.20080611.txt + +* Changes made: + - 2008-08-02 myon: Refreshed patch using quilt push -f to remove hunks we do + not need (Makefile.in). + +== END PATCH +--- a/buffy.c ++++ b/buffy.c +@@ -261,7 +261,7 @@ int mutt_buffy_check (int force) + char path[_POSIX_PATH_MAX]; + struct stat contex_sb; + time_t t; +- ++ CONTEXT *ctx; + #ifdef USE_IMAP + /* update postponed count as well, on force */ + if (force) +@@ -296,6 +296,8 @@ int mutt_buffy_check (int force) + + for (tmp = Incoming; tmp; tmp = tmp->next) + { ++ if ( tmp->new == 1 ) ++ tmp->has_new = 1; + #ifdef USE_IMAP + if (tmp->magic != M_IMAP) + #endif +@@ -353,48 +355,112 @@ int mutt_buffy_check (int force) + case M_MBOX: + case M_MMDF: + +- if (STAT_CHECK) ++ { ++ if (STAT_CHECK || tmp->msgcount == 0) + { +- BuffyCount++; +- tmp->new = 1; ++ BUFFY b = *tmp; ++ int msgcount = 0; ++ int msg_unread = 0; ++ /* parse the mailbox, to see how much mail there is */ ++ ctx = mx_open_mailbox( tmp->path, M_READONLY | M_QUIET | M_NOSORT | M_PEEK, NULL); ++ if(ctx) ++ { ++ msgcount = ctx->msgcount; ++ msg_unread = ctx->unread; ++ mx_close_mailbox(ctx, 0); ++ } ++ *tmp = b; ++ tmp->msgcount = msgcount; ++ tmp->msg_unread = msg_unread; ++ if(STAT_CHECK) { ++ tmp->has_new = tmp->new = 1; ++ BuffyCount++; ++ } + } + else if (option(OPTCHECKMBOXSIZE)) + { + /* some other program has deleted mail from the folder */ + tmp->size = (long) sb.st_size; + } +- if (tmp->newly_created && +- (sb.st_ctime != sb.st_mtime || sb.st_ctime != sb.st_atime)) +- tmp->newly_created = 0; +- +- break; ++ if (tmp->newly_created && ++ (sb.st_ctime != sb.st_mtime || sb.st_ctime != sb.st_atime)) ++ tmp->newly_created = 0; ++ } ++ break; + + case M_MAILDIR: + ++ /* count new message */ + snprintf (path, sizeof (path), "%s/new", tmp->path); + if ((dirp = opendir (path)) == NULL) + { + tmp->magic = 0; + break; + } ++ tmp->msgcount = 0; ++ tmp->msg_unread = 0; ++ tmp->msg_flagged = 0; + while ((de = readdir (dirp)) != NULL) + { + char *p; + if (*de->d_name != '.' && + (!(p = strstr (de->d_name, ":2,")) || !strchr (p + 3, 'T'))) + { +- /* one new and undeleted message is enough */ +- BuffyCount++; +- tmp->new = 1; +- break; ++ tmp->has_new = tmp->new = 1; ++ tmp->msgcount++; ++ tmp->msg_unread++; ++ } ++ } ++ if(tmp->msg_unread) ++ BuffyCount++; ++ ++ closedir (dirp); ++ ++ /* ++ * count read messages (for folderlist (sidebar) we also need to count ++ * messages in cur so that we the total number of messages ++ */ ++ snprintf (path, sizeof (path), "%s/cur", tmp->path); ++ if ((dirp = opendir (path)) == NULL) ++ { ++ tmp->magic = 0; ++ break; ++ } ++ while ((de = readdir (dirp)) != NULL) ++ { ++ char *p; ++ if (*de->d_name != '.' && ++ (!(p = strstr (de->d_name, ":2,")) || !strchr (p + 3, 'T'))) ++ { ++ tmp->msgcount++; ++ if (p && strchr(p + 3, 'F')) { ++ tmp->msg_flagged++; ++ } + } + } + closedir (dirp); + break; + + case M_MH: +- if ((tmp->new = mh_buffy (tmp->path)) > 0) +- BuffyCount++; ++ { ++ DIR *dp; ++ struct dirent *de; ++ if ((tmp->new = mh_buffy (tmp->path)) > 0) ++ BuffyCount++; ++ ++ if ((dp = opendir (path)) == NULL) ++ break; ++ tmp->msgcount = 0; ++ while ((de = readdir (dp))) ++ { ++ if (mh_valid_message (de->d_name)) ++ { ++ tmp->msgcount++; ++ tmp->has_new = tmp->new = 1; ++ } ++ } ++ closedir (dp); ++ } + break; + } + } +--- a/buffy.h ++++ b/buffy.h +@@ -25,7 +25,12 @@ typedef struct buffy_t + char *path; + long size; + struct buffy_t *next; ++ struct buffy_t *prev; + short new; /* mailbox has new mail */ ++ short has_new; /* set it new if new and not read */ ++ int msgcount; /* total number of messages */ ++ int msg_unread; /* number of unread messages */ ++ int msg_flagged; /* number of flagged messages */ + short notified; /* user has been notified */ + short magic; /* mailbox type */ + short newly_created; /* mbox or mmdf just popped into existence */ +--- a/color.c ++++ b/color.c +@@ -93,6 +93,8 @@ static struct mapping_t Fields[] = + { "bold", MT_COLOR_BOLD }, + { "underline", MT_COLOR_UNDERLINE }, + { "index", MT_COLOR_INDEX }, ++ { "sidebar_new", MT_COLOR_NEW }, ++ { "sidebar_flagged", MT_COLOR_FLAGGED }, + { NULL, 0 } + }; + +--- a/compose.c ++++ b/compose.c +@@ -72,7 +72,7 @@ enum + + #define HDR_XOFFSET 10 + #define TITLE_FMT "%10s" /* Used for Prompts, which are ASCII */ +-#define W (COLS - HDR_XOFFSET) ++#define W (COLS - HDR_XOFFSET - SidebarWidth) + + static char *Prompts[] = + { +@@ -115,16 +115,16 @@ static void redraw_crypt_lines (HEADER * + if ((WithCrypto & APPLICATION_PGP) && (WithCrypto & APPLICATION_SMIME)) + { + if (!msg->security) +- mvaddstr (HDR_CRYPT, 0, "Security: "); ++ mvaddstr (HDR_CRYPT, SidebarWidth, "Security: "); + else if (msg->security & APPLICATION_SMIME) +- mvaddstr (HDR_CRYPT, 0, " S/MIME: "); ++ mvaddstr (HDR_CRYPT, SidebarWidth, " S/MIME: "); + else if (msg->security & APPLICATION_PGP) +- mvaddstr (HDR_CRYPT, 0, " PGP: "); ++ mvaddstr (HDR_CRYPT, SidebarWidth, " PGP: "); + } + else if ((WithCrypto & APPLICATION_SMIME)) +- mvaddstr (HDR_CRYPT, 0, " S/MIME: "); ++ mvaddstr (HDR_CRYPT, SidebarWidth, " S/MIME: "); + else if ((WithCrypto & APPLICATION_PGP)) +- mvaddstr (HDR_CRYPT, 0, " PGP: "); ++ mvaddstr (HDR_CRYPT, SidebarWidth, " PGP: "); + else + return; + +@@ -148,7 +148,7 @@ static void redraw_crypt_lines (HEADER * + } + clrtoeol (); + +- move (HDR_CRYPTINFO, 0); ++ move (HDR_CRYPTINFO, SidebarWidth); + clrtoeol (); + if ((WithCrypto & APPLICATION_PGP) + && msg->security & APPLICATION_PGP && msg->security & SIGN) +@@ -164,7 +164,7 @@ static void redraw_crypt_lines (HEADER * + && (msg->security & ENCRYPT) + && SmimeCryptAlg + && *SmimeCryptAlg) { +- mvprintw (HDR_CRYPTINFO, 40, "%s%s", _("Encrypt with: "), ++ mvprintw (HDR_CRYPTINFO, SidebarWidth + 40, "%s%s", _("Encrypt with: "), + NONULL(SmimeCryptAlg)); + off = 20; + } +@@ -178,7 +178,7 @@ static void redraw_mix_line (LIST *chain + int c; + char *t; + +- mvaddstr (HDR_MIX, 0, " Mix: "); ++ mvaddstr (HDR_MIX, SidebarWidth, " Mix: "); + + if (!chain) + { +@@ -193,7 +193,7 @@ static void redraw_mix_line (LIST *chain + if (t && t[0] == '0' && t[1] == '\0') + t = ""; + +- if (c + mutt_strlen (t) + 2 >= COLS) ++ if (c + mutt_strlen (t) + 2 >= COLS - SidebarWidth) + break; + + addstr (NONULL(t)); +@@ -245,7 +245,7 @@ static void draw_envelope_addr (int line + + buf[0] = 0; + rfc822_write_address (buf, sizeof (buf), addr, 1); +- mvprintw (line, 0, TITLE_FMT, Prompts[line - 1]); ++ mvprintw (line, SidebarWidth, TITLE_FMT, Prompts[line - 1]); + mutt_paddstr (W, buf); + } + +@@ -255,10 +255,10 @@ static void draw_envelope (HEADER *msg, + draw_envelope_addr (HDR_TO, msg->env->to); + draw_envelope_addr (HDR_CC, msg->env->cc); + draw_envelope_addr (HDR_BCC, msg->env->bcc); +- mvprintw (HDR_SUBJECT, 0, TITLE_FMT, Prompts[HDR_SUBJECT - 1]); ++ mvprintw (HDR_SUBJECT, SidebarWidth, TITLE_FMT, Prompts[HDR_SUBJECT - 1]); + mutt_paddstr (W, NONULL (msg->env->subject)); + draw_envelope_addr (HDR_REPLYTO, msg->env->reply_to); +- mvprintw (HDR_FCC, 0, TITLE_FMT, Prompts[HDR_FCC - 1]); ++ mvprintw (HDR_FCC, SidebarWidth, TITLE_FMT, Prompts[HDR_FCC - 1]); + mutt_paddstr (W, fcc); + + if (WithCrypto) +@@ -269,7 +269,7 @@ static void draw_envelope (HEADER *msg, + #endif + + SETCOLOR (MT_COLOR_STATUS); +- mvaddstr (HDR_ATTACH - 1, 0, _("-- Attachments")); ++ mvaddstr (HDR_ATTACH - 1, SidebarWidth, _("-- Attachments")); + BKGDSET (MT_COLOR_STATUS); + clrtoeol (); + +@@ -307,7 +307,7 @@ static int edit_address_list (int line, + /* redraw the expanded list so the user can see the result */ + buf[0] = 0; + rfc822_write_address (buf, sizeof (buf), *addr, 1); +- move (line, HDR_XOFFSET); ++ move (line, HDR_XOFFSET+SidebarWidth); + mutt_paddstr (W, buf); + + return 0; +@@ -553,7 +553,7 @@ int mutt_compose_menu (HEADER *msg, /* + if (mutt_get_field ("Subject: ", buf, sizeof (buf), 0) == 0) + { + mutt_str_replace (&msg->env->subject, buf); +- move (HDR_SUBJECT, HDR_XOFFSET); ++ move (HDR_SUBJECT, HDR_XOFFSET + SidebarWidth); + clrtoeol (); + if (msg->env->subject) + mutt_paddstr (W, msg->env->subject); +@@ -570,7 +570,7 @@ int mutt_compose_menu (HEADER *msg, /* + { + strfcpy (fcc, buf, _POSIX_PATH_MAX); + mutt_pretty_mailbox (fcc); +- move (HDR_FCC, HDR_XOFFSET); ++ move (HDR_FCC, HDR_XOFFSET + SidebarWidth); + mutt_paddstr (W, fcc); + fccSet = 1; + } +--- a/curs_main.c ++++ b/curs_main.c +@@ -29,6 +29,7 @@ + #include "sort.h" + #include "buffy.h" + #include "mx.h" ++#include "sidebar.h" + + #ifdef USE_POP + #include "pop.h" +@@ -544,8 +545,12 @@ int mutt_index_menu (void) + menu->redraw |= REDRAW_STATUS; + if (do_buffy_notify) + { +- if (mutt_buffy_notify () && option (OPTBEEPNEW)) +- beep (); ++ if (mutt_buffy_notify ()) ++ { ++ menu->redraw |= REDRAW_FULL; ++ if (option (OPTBEEPNEW)) ++ beep (); ++ } + } + else + do_buffy_notify = 1; +@@ -557,6 +562,7 @@ int mutt_index_menu (void) + if (menu->redraw & REDRAW_FULL) + { + menu_redraw_full (menu); ++ draw_sidebar(menu->menu); + mutt_show_error (); + } + +@@ -579,10 +585,13 @@ int mutt_index_menu (void) + + if (menu->redraw & REDRAW_STATUS) + { ++ DrawFullLine = 1; + menu_status_line (buf, sizeof (buf), menu, NONULL (Status)); ++ DrawFullLine = 0; + CLEARLINE (option (OPTSTATUSONTOP) ? 0 : LINES-2); + SETCOLOR (MT_COLOR_STATUS); + BKGDSET (MT_COLOR_STATUS); ++ set_buffystats(Context); + mutt_paddstr (COLS, buf); + SETCOLOR (MT_COLOR_NORMAL); + BKGDSET (MT_COLOR_NORMAL); +@@ -603,7 +612,7 @@ int mutt_index_menu (void) + menu->oldcurrent = -1; + + if (option (OPTARROWCURSOR)) +- move (menu->current - menu->top + menu->offset, 2); ++ move (menu->current - menu->top + menu->offset, SidebarWidth + 2); + else if (option (OPTBRAILLEFRIENDLY)) + move (menu->current - menu->top + menu->offset, 0); + else +@@ -1072,6 +1081,7 @@ int mutt_index_menu (void) + menu->redraw = REDRAW_FULL; + break; + ++ case OP_SIDEBAR_OPEN: + case OP_MAIN_CHANGE_FOLDER: + case OP_MAIN_NEXT_UNREAD_MAILBOX: + +@@ -1103,7 +1113,11 @@ int mutt_index_menu (void) + { + mutt_buffy (buf, sizeof (buf)); + +- if (mutt_enter_fname (cp, buf, sizeof (buf), &menu->redraw, 1) == -1) ++ if ( op == OP_SIDEBAR_OPEN ) { ++ if(!CurBuffy) ++ break; ++ strncpy( buf, CurBuffy->path, sizeof(buf) ); ++ } else if (mutt_enter_fname (cp, buf, sizeof (buf), &menu->redraw, 1) == -1) + { + if (menu->menu == MENU_PAGER) + { +@@ -1121,6 +1135,7 @@ int mutt_index_menu (void) + } + + mutt_expand_path (buf, sizeof (buf)); ++ set_curbuffy(buf); + if (mx_get_magic (buf) <= 0) + { + mutt_error (_("%s is not a mailbox."), buf); +@@ -2213,6 +2228,12 @@ int mutt_index_menu (void) + mutt_what_key(); + break; + ++ case OP_SIDEBAR_SCROLL_UP: ++ case OP_SIDEBAR_SCROLL_DOWN: ++ case OP_SIDEBAR_NEXT: ++ case OP_SIDEBAR_PREV: ++ scroll_sidebar(op, menu->menu); ++ break; + default: + if (menu->menu == MENU_MAIN) + km_error_key (MENU_MAIN); +--- a/flags.c ++++ b/flags.c +@@ -22,8 +22,10 @@ + + #include "mutt.h" + #include "mutt_curses.h" ++#include "mutt_menu.h" + #include "sort.h" + #include "mx.h" ++#include "sidebar.h" + + #ifdef USE_IMAP + #include "imap_private.h" +@@ -294,6 +296,7 @@ void _mutt_set_flag (CONTEXT *ctx, HEADE + */ + if (h->searched && (changed != h->changed || deleted != ctx->deleted || tagged != ctx->tagged || flagged != ctx->flagged)) + h->searched = 0; ++ draw_sidebar(0); + } + + void mutt_tag_set_flag (int flag, int bf) +--- a/functions.h ++++ b/functions.h +@@ -169,6 +169,11 @@ struct binding_t OpMain[] = { /* map: in + { "decrypt-save", OP_DECRYPT_SAVE, NULL }, + + ++ { "sidebar-scroll-up", OP_SIDEBAR_SCROLL_UP, NULL }, ++ { "sidebar-scroll-down", OP_SIDEBAR_SCROLL_DOWN, NULL }, ++ { "sidebar-next", OP_SIDEBAR_NEXT, NULL }, ++ { "sidebar-prev", OP_SIDEBAR_PREV, NULL }, ++ { "sidebar-open", OP_SIDEBAR_OPEN, NULL }, + { NULL, 0, NULL } + }; + +@@ -267,6 +272,11 @@ struct binding_t OpPager[] = { /* map: p + { "decrypt-save", OP_DECRYPT_SAVE, NULL }, + + ++ { "sidebar-scroll-up", OP_SIDEBAR_SCROLL_UP, NULL }, ++ { "sidebar-scroll-down", OP_SIDEBAR_SCROLL_DOWN, NULL }, ++ { "sidebar-next", OP_SIDEBAR_NEXT, NULL }, ++ { "sidebar-prev", OP_SIDEBAR_PREV, NULL }, ++ { "sidebar-open", OP_SIDEBAR_OPEN, NULL }, + { NULL, 0, NULL } + }; + +--- a/globals.h ++++ b/globals.h +@@ -116,6 +116,7 @@ WHERE char *Realname; + WHERE char *SendCharset; + WHERE char *Sendmail; + WHERE char *Shell; ++WHERE char *SidebarDelim; + WHERE char *Signature; + WHERE char *SimpleSearch; + #if USE_SMTP +@@ -212,6 +213,9 @@ WHERE short ScoreThresholdDelete; + WHERE short ScoreThresholdRead; + WHERE short ScoreThresholdFlag; + ++WHERE struct buffy_t *CurBuffy INITVAL(0); ++WHERE short DrawFullLine INITVAL(0); ++WHERE short SidebarWidth; + #ifdef USE_IMAP + WHERE short ImapKeepalive; + #endif +--- a/init.h ++++ b/init.h +@@ -1532,6 +1532,22 @@ struct option_t MuttVars[] = { + ** you may unset this setting. + ** (Crypto only) + */ ++ {"sidebar_delim", DT_STR, R_BOTH, UL &SidebarDelim, "|"}, ++ /* ++ ** .pp ++ ** This specifies the delimiter between the sidebar (if visible) and ++ ** other screens. ++ */ ++ { "sidebar_visible", DT_BOOL, R_BOTH, OPTSIDEBAR, 0 }, ++ /* ++ ** .pp ++ ** This specifies whether or not to show sidebar (left-side list of folders). ++ */ ++ { "sidebar_width", DT_NUM, R_BOTH, UL &SidebarWidth, 0 }, ++ /* ++ ** .pp ++ ** The width of the sidebar. ++ */ + { "pgp_use_gpg_agent", DT_BOOL, R_NONE, OPTUSEGPGAGENT, 0}, + /* + ** .pp +--- a/mailbox.h ++++ b/mailbox.h +@@ -27,6 +27,7 @@ + #define M_NEWFOLDER (1<<4) /* create a new folder - same as M_APPEND, but uses + * safe_fopen() for mbox-style folders. + */ ++#define M_PEEK (1<<5) /* revert atime back after taking a look (if applicable) */ + + /* mx_open_new_message() */ + #define M_ADD_FROM 1 /* add a From_ line */ +--- a/Makefile.am ++++ b/Makefile.am +@@ -29,7 +29,8 @@ mutt_SOURCES = \ + score.c send.c sendlib.c signal.c sort.c \ + status.c system.c thread.c charset.c history.c lib.c \ + muttlib.c editmsg.c mbyte.c \ +- url.c ascii.c mutt_idna.c crypt-mod.c crypt-mod.h ++ url.c ascii.c mutt_idna.c crypt-mod.c crypt-mod.h \ ++ sidebar.c + + nodist_mutt_SOURCES = $(BUILT_SOURCES) + +--- a/mbox.c ++++ b/mbox.c +@@ -104,6 +104,7 @@ int mmdf_parse_mailbox (CONTEXT *ctx) + mutt_perror (ctx->path); + return (-1); + } ++ ctx->atime = sb.st_atime; + ctx->mtime = sb.st_mtime; + ctx->size = sb.st_size; + +@@ -259,6 +260,7 @@ int mbox_parse_mailbox (CONTEXT *ctx) + + ctx->size = sb.st_size; + ctx->mtime = sb.st_mtime; ++ ctx->atime = sb.st_atime; + + #ifdef NFS_ATTRIBUTE_HACK + if (sb.st_mtime > sb.st_atime) +--- a/menu.c ++++ b/menu.c +@@ -24,6 +24,7 @@ + #include "mutt_curses.h" + #include "mutt_menu.h" + #include "mbyte.h" ++#include "sidebar.h" + + #ifdef USE_IMAP + #include "imap.h" +@@ -158,7 +159,7 @@ void menu_pad_string (char *s, size_t n) + { + char *scratch = safe_strdup (s); + int shift = option (OPTARROWCURSOR) ? 3 : 0; +- int cols = COLS - shift; ++ int cols = COLS - shift - SidebarWidth; + + mutt_format_string (s, n, cols, cols, FMT_LEFT, ' ', scratch, mutt_strlen (scratch), 1); + s[n - 1] = 0; +@@ -209,6 +210,7 @@ void menu_redraw_index (MUTTMENU *menu) + char buf[LONG_STRING]; + int i; + ++ draw_sidebar(1); + for (i = menu->top; i < menu->top + menu->pagelen; i++) + { + if (i < menu->max) +@@ -219,7 +221,7 @@ void menu_redraw_index (MUTTMENU *menu) + if (option (OPTARROWCURSOR)) + { + attrset (menu->color (i)); +- CLEARLINE (i - menu->top + menu->offset); ++ CLEARLINE_WIN (i - menu->top + menu->offset); + + if (i == menu->current) + { +@@ -248,14 +250,14 @@ void menu_redraw_index (MUTTMENU *menu) + BKGDSET (MT_COLOR_INDICATOR); + } + +- CLEARLINE (i - menu->top + menu->offset); ++ CLEARLINE_WIN (i - menu->top + menu->offset); + print_enriched_string (menu->color(i), (unsigned char *) buf, i != menu->current); + SETCOLOR (MT_COLOR_NORMAL); + BKGDSET (MT_COLOR_NORMAL); + } + } + else +- CLEARLINE (i - menu->top + menu->offset); ++ CLEARLINE_WIN (i - menu->top + menu->offset); + } + menu->redraw = 0; + } +@@ -270,7 +272,7 @@ void menu_redraw_motion (MUTTMENU *menu) + return; + } + +- move (menu->oldcurrent + menu->offset - menu->top, 0); ++ move (menu->oldcurrent + menu->offset - menu->top, SidebarWidth); + SETCOLOR (MT_COLOR_NORMAL); + BKGDSET (MT_COLOR_NORMAL); + +@@ -285,13 +287,13 @@ void menu_redraw_motion (MUTTMENU *menu) + clrtoeol (); + menu_make_entry (buf, sizeof (buf), menu, menu->oldcurrent); + menu_pad_string (buf, sizeof (buf)); +- move (menu->oldcurrent + menu->offset - menu->top, 3); ++ move (menu->oldcurrent + menu->offset - menu->top, SidebarWidth + 3); + print_enriched_string (menu->color(menu->oldcurrent), (unsigned char *) buf, 1); + SETCOLOR (MT_COLOR_NORMAL); + } + + /* now draw it in the new location */ +- move (menu->current + menu->offset - menu->top, 0); ++ move (menu->current + menu->offset - menu->top, SidebarWidth); + attrset (menu->color (menu->current)); + ADDCOLOR (MT_COLOR_INDICATOR); + addstr ("->"); +@@ -312,7 +314,7 @@ void menu_redraw_motion (MUTTMENU *menu) + attrset (menu->color (menu->current)); + ADDCOLOR (MT_COLOR_INDICATOR); + BKGDSET (MT_COLOR_INDICATOR); +- CLEARLINE (menu->current - menu->top + menu->offset); ++ CLEARLINE_WIN (menu->current - menu->top + menu->offset); + print_enriched_string (menu->color(menu->current), (unsigned char *) buf, 0); + SETCOLOR (MT_COLOR_NORMAL); + BKGDSET (MT_COLOR_NORMAL); +@@ -324,7 +326,7 @@ void menu_redraw_current (MUTTMENU *menu + { + char buf[LONG_STRING]; + +- move (menu->current + menu->offset - menu->top, 0); ++ move (menu->current + menu->offset - menu->top, SidebarWidth); + menu_make_entry (buf, sizeof (buf), menu, menu->current); + menu_pad_string (buf, sizeof (buf)); + +@@ -871,7 +873,7 @@ int mutt_menuLoop (MUTTMENU *menu) + + + if (option (OPTARROWCURSOR)) +- move (menu->current - menu->top + menu->offset, 2); ++ move (menu->current - menu->top + menu->offset, SidebarWidth + 2); + else if (option (OPTBRAILLEFRIENDLY)) + move (menu->current - menu->top + menu->offset, 0); + else +--- a/mutt_curses.h ++++ b/mutt_curses.h +@@ -64,6 +64,7 @@ + #undef lines + #endif /* lines */ + ++#define CLEARLINE_WIN(x) move(x,SidebarWidth), clrtoeol() + #define CLEARLINE(x) move(x,0), clrtoeol() + #define CENTERLINE(x,y) move(y, (COLS-strlen(x))/2), addstr(x) + #define BEEP() do { if (option (OPTBEEP)) beep(); } while (0) +@@ -126,6 +127,8 @@ enum + MT_COLOR_BOLD, + MT_COLOR_UNDERLINE, + MT_COLOR_INDEX, ++ MT_COLOR_NEW, ++ MT_COLOR_FLAGGED, + MT_COLOR_MAX + }; + +--- a/mutt.h ++++ b/mutt.h +@@ -437,6 +437,7 @@ enum + OPTSAVEEMPTY, + OPTSAVENAME, + OPTSCORE, ++ OPTSIDEBAR, + OPTSIGDASHES, + OPTSIGONTOP, + OPTSORTRE, +@@ -874,6 +875,7 @@ typedef struct _context + { + char *path; + FILE *fp; ++ time_t atime; + time_t mtime; + off_t size; + off_t vsize; +@@ -914,6 +916,7 @@ typedef struct _context + unsigned int quiet : 1; /* inhibit status messages? */ + unsigned int collapsed : 1; /* are all threads collapsed? */ + unsigned int closing : 1; /* mailbox is being closed */ ++ unsigned int peekonly : 1; /* just taking a glance, revert atime */ + + /* driver hooks */ + void *data; /* driver specific data */ +--- a/muttlib.c ++++ b/muttlib.c +@@ -1205,6 +1205,8 @@ void mutt_FormatString (char *dest, /* + pl = pw = 1; + + /* see if there's room to add content, else ignore */ ++ if ( DrawFullLine ) ++ { + if ((col < COLS && wlen < destlen) || soft) + { + int pad; +@@ -1247,6 +1249,52 @@ void mutt_FormatString (char *dest, /* + col += wid; + src += pl; + } ++ } ++ else ++ { ++ if ((col < COLS-SidebarWidth && wlen < destlen) || soft) ++ { ++ int pad; ++ ++ /* get contents after padding */ ++ mutt_FormatString (buf, sizeof (buf), 0, src + pl, callback, data, flags); ++ len = mutt_strlen (buf); ++ wid = mutt_strwidth (buf); ++ ++ /* try to consume as many columns as we can, if we don't have ++ * memory for that, use as much memory as possible */ ++ pad = (COLS - SidebarWidth - col - wid) / pw; ++ if (pad > 0 && wlen + (pad * pl) + len > destlen) ++ pad = ((signed)(destlen - wlen - len)) / pl; ++ if (pad > 0) ++ { ++ while (pad--) ++ { ++ memcpy (wptr, src, pl); ++ wptr += pl; ++ wlen += pl; ++ col += pw; ++ } ++ } ++ else if (soft && pad < 0) ++ { ++ /* \0-terminate dest for length computation in mutt_wstr_trunc() */ ++ *wptr = 0; ++ /* make sure right part is at most as wide as display */ ++ len = mutt_wstr_trunc (buf, destlen, COLS, &wid); ++ /* truncate left so that right part fits completely in */ ++ wlen = mutt_wstr_trunc (dest, destlen - len, col + pad, &col); ++ wptr = dest + wlen; ++ } ++ if (len + wlen > destlen) ++ len = mutt_wstr_trunc (buf, destlen - wlen, COLS - SidebarWidth - col, NULL); ++ memcpy (wptr, buf, len); ++ wptr += len; ++ wlen += len; ++ col += wid; ++ src += pl; ++ } ++ } + break; /* skip rest of input */ + } + else if (ch == '|') +--- a/mx.c ++++ b/mx.c +@@ -626,6 +626,7 @@ static int mx_open_mailbox_append (CONTE + * M_APPEND open mailbox for appending + * M_READONLY open mailbox in read-only mode + * M_QUIET only print error messages ++ * M_PEEK revert atime where applicable + * ctx if non-null, context struct to use + */ + CONTEXT *mx_open_mailbox (const char *path, int flags, CONTEXT *pctx) +@@ -648,6 +649,8 @@ CONTEXT *mx_open_mailbox (const char *pa + ctx->quiet = 1; + if (flags & M_READONLY) + ctx->readonly = 1; ++ if (flags & M_PEEK) ++ ctx->peekonly = 1; + + if (flags & (M_APPEND|M_NEWFOLDER)) + { +@@ -752,9 +755,21 @@ CONTEXT *mx_open_mailbox (const char *pa + void mx_fastclose_mailbox (CONTEXT *ctx) + { + int i; ++#ifndef BUFFY_SIZE ++ struct utimbuf ut; ++#endif + + if(!ctx) + return; ++#ifndef BUFFY_SIZE ++ /* fix up the times so buffy won't get confused */ ++ if (ctx->peekonly && ctx->path && ctx->mtime > ctx->atime) ++ { ++ ut.actime = ctx->atime; ++ ut.modtime = ctx->mtime; ++ utime (ctx->path, &ut); ++ } ++#endif + + if (ctx->mx_close) + ctx->mx_close (ctx); +--- a/OPS ++++ b/OPS +@@ -179,3 +179,8 @@ OP_WHAT_KEY "display the keycode for a k + OP_MAIN_SHOW_LIMIT "show currently active limit pattern" + OP_MAIN_COLLAPSE_THREAD "collapse/uncollapse current thread" + OP_MAIN_COLLAPSE_ALL "collapse/uncollapse all threads" ++OP_SIDEBAR_SCROLL_UP "scroll the mailbox pane up 1 page" ++OP_SIDEBAR_SCROLL_DOWN "scroll the mailbox pane down 1 page" ++OP_SIDEBAR_NEXT "go down to next mailbox" ++OP_SIDEBAR_PREV "go to previous mailbox" ++OP_SIDEBAR_OPEN "open hilighted mailbox" +--- a/pager.c ++++ b/pager.c +@@ -30,6 +30,7 @@ + #include "pager.h" + #include "attach.h" + #include "mbyte.h" ++#include "sidebar.h" + + #include "mx.h" + +@@ -1067,6 +1068,8 @@ static int format_line (struct line_t ** + mbstate_t mbstate; + + int wrap_cols = mutt_term_width ((flags & M_PAGER_NOWRAP) ? 0 : Wrap); ++ ++ wrap_cols -= SidebarWidth; + + /* FIXME: this should come from lineInfo */ + memset(&mbstate, 0, sizeof(mbstate)); +@@ -1700,7 +1703,7 @@ mutt_pager (const char *banner, const ch + if ((redraw & REDRAW_BODY) || topline != oldtopline) + { + do { +- move (bodyoffset, 0); ++ move (bodyoffset, SidebarWidth); + curline = oldtopline = topline; + lines = 0; + force_redraw = 0; +@@ -1713,6 +1716,7 @@ mutt_pager (const char *banner, const ch + &QuoteList, &q_level, &force_redraw, &SearchRE) > 0) + lines++; + curline++; ++ move(lines + bodyoffset, SidebarWidth); + } + last_offset = lineInfo[curline].offset; + } while (force_redraw); +@@ -1726,6 +1730,7 @@ mutt_pager (const char *banner, const ch + addch ('~'); + addch ('\n'); + lines++; ++ move(lines + bodyoffset, SidebarWidth); + } + /* We are going to update the pager status bar, so it isn't + * necessary to reset to normal color now. */ +@@ -1749,22 +1754,22 @@ mutt_pager (const char *banner, const ch + /* print out the pager status bar */ + SETCOLOR (MT_COLOR_STATUS); + BKGDSET (MT_COLOR_STATUS); +- CLEARLINE (statusoffset); ++ CLEARLINE_WIN (statusoffset); + if (IsHeader (extra)) + { +- size_t l1 = COLS * MB_LEN_MAX; ++ size_t l1 = (COLS-SidebarWidth) * MB_LEN_MAX; + size_t l2 = sizeof (buffer); + hfi.hdr = extra->hdr; + mutt_make_string_info (buffer, l1 < l2 ? l1 : l2, NONULL (PagerFmt), &hfi, M_FORMAT_MAKEPRINT); + } + else if (IsMsgAttach (extra)) + { +- size_t l1 = COLS * MB_LEN_MAX; ++ size_t l1 = (COLS-SidebarWidth) * MB_LEN_MAX; + size_t l2 = sizeof (buffer); + hfi.hdr = extra->bdy->hdr; + mutt_make_string_info (buffer, l1 < l2 ? l1 : l2, NONULL (PagerFmt), &hfi, M_FORMAT_MAKEPRINT); + } +- mutt_paddstr (COLS, IsHeader (extra) || IsMsgAttach (extra) ? buffer : banner); ++ mutt_paddstr (COLS-SidebarWidth, IsHeader (extra) || IsMsgAttach (extra) ? buffer : banner); + BKGDSET (MT_COLOR_NORMAL); + SETCOLOR (MT_COLOR_NORMAL); + if (option(OPTXTERMSETTITLES)) +@@ -1781,18 +1786,23 @@ mutt_pager (const char *banner, const ch + /* redraw the pager_index indicator, because the + * flags for this message might have changed. */ + menu_redraw_current (index); ++ draw_sidebar(MENU_PAGER); + + /* print out the index status bar */ + menu_status_line (buffer, sizeof (buffer), index, NONULL(Status)); + +- move (indexoffset + (option (OPTSTATUSONTOP) ? 0 : (indexlen - 1)), 0); ++ move (indexoffset + (option (OPTSTATUSONTOP) ? 0 : (indexlen - 1)), SidebarWidth); + SETCOLOR (MT_COLOR_STATUS); + BKGDSET (MT_COLOR_STATUS); +- mutt_paddstr (COLS, buffer); ++ mutt_paddstr (COLS-SidebarWidth, buffer); + SETCOLOR (MT_COLOR_NORMAL); + BKGDSET (MT_COLOR_NORMAL); + } + ++ /* if we're not using the index, update every time */ ++ if ( index == 0 ) ++ draw_sidebar(MENU_PAGER); ++ + redraw = 0; + + if (option(OPTBRAILLEFRIENDLY)) { +@@ -2671,6 +2681,13 @@ search_next: + redraw = REDRAW_FULL; + break; + ++ case OP_SIDEBAR_SCROLL_UP: ++ case OP_SIDEBAR_SCROLL_DOWN: ++ case OP_SIDEBAR_NEXT: ++ case OP_SIDEBAR_PREV: ++ scroll_sidebar(ch, MENU_PAGER); ++ break; ++ + default: + ch = -1; + break; +--- /dev/null ++++ b/sidebar.c +@@ -0,0 +1,333 @@ ++/* ++ * Copyright (C) ????-2004 Justin Hibbits ++ * Copyright (C) 2004 Thomer M. Gil ++ * ++ * 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., 59 Temple Place - Suite 330, Boston, MA 02111, USA. ++ */ ++ ++ ++#if HAVE_CONFIG_H ++# include "config.h" ++#endif ++ ++#include "mutt.h" ++#include "mutt_menu.h" ++#include "mutt_curses.h" ++#include "sidebar.h" ++#include "buffy.h" ++#include ++#include "keymap.h" ++#include ++ ++/*BUFFY *CurBuffy = 0;*/ ++static BUFFY *TopBuffy = 0; ++static BUFFY *BottomBuffy = 0; ++static int known_lines = 0; ++ ++static int quick_log10(int n) ++{ ++ char string[32]; ++ sprintf(string, "%d", n); ++ return strlen(string); ++} ++ ++void calc_boundaries (int menu) ++{ ++ BUFFY *tmp = Incoming; ++ ++ if ( known_lines != LINES ) { ++ TopBuffy = BottomBuffy = 0; ++ known_lines = LINES; ++ } ++ for ( ; tmp->next != 0; tmp = tmp->next ) ++ tmp->next->prev = tmp; ++ ++ if ( TopBuffy == 0 && BottomBuffy == 0 ) ++ TopBuffy = Incoming; ++ if ( BottomBuffy == 0 ) { ++ int count = LINES - 2 - (menu != MENU_PAGER || option(OPTSTATUSONTOP)); ++ BottomBuffy = TopBuffy; ++ while ( --count && BottomBuffy->next ) ++ BottomBuffy = BottomBuffy->next; ++ } ++ else if ( TopBuffy == CurBuffy->next ) { ++ int count = LINES - 2 - (menu != MENU_PAGER); ++ BottomBuffy = CurBuffy; ++ tmp = BottomBuffy; ++ while ( --count && tmp->prev) ++ tmp = tmp->prev; ++ TopBuffy = tmp; ++ } ++ else if ( BottomBuffy == CurBuffy->prev ) { ++ int count = LINES - 2 - (menu != MENU_PAGER); ++ TopBuffy = CurBuffy; ++ tmp = TopBuffy; ++ while ( --count && tmp->next ) ++ tmp = tmp->next; ++ BottomBuffy = tmp; ++ } ++} ++ ++char *make_sidebar_entry(char *box, int size, int new, int flagged) ++{ ++ static char *entry = 0; ++ char *c; ++ int i = 0; ++ int delim_len = strlen(SidebarDelim); ++ ++ c = realloc(entry, SidebarWidth - delim_len + 2); ++ if ( c ) entry = c; ++ entry[SidebarWidth - delim_len + 1] = 0; ++ for (; i < SidebarWidth - delim_len + 1; entry[i++] = ' ' ); ++ i = strlen(box); ++ strncpy( entry, box, i < (SidebarWidth - delim_len + 1) ? i : (SidebarWidth - delim_len + 1) ); ++ ++ if (size == -1) ++ sprintf(entry + SidebarWidth - delim_len - 3, "?"); ++ else if ( new ) { ++ if (flagged > 0) { ++ sprintf( ++ entry + SidebarWidth - delim_len - 5 - quick_log10(size) - quick_log10(new) - quick_log10(flagged), ++ "% d(%d)[%d]", size, new, flagged); ++ } else { ++ sprintf( ++ entry + SidebarWidth - delim_len - 3 - quick_log10(size) - quick_log10(new), ++ "% d(%d)", size, new); ++ } ++ } else if (flagged > 0) { ++ sprintf( entry + SidebarWidth - delim_len - 3 - quick_log10(size) - quick_log10(flagged), "% d[%d]", size, flagged); ++ } else { ++ sprintf( entry + SidebarWidth - delim_len - 1 - quick_log10(size), "% d", size); ++ } ++ return entry; ++} ++ ++void set_curbuffy(char buf[LONG_STRING]) ++{ ++ BUFFY* tmp = CurBuffy = Incoming; ++ ++ if (!Incoming) ++ return; ++ ++ while(1) { ++ if(!strcmp(tmp->path, buf)) { ++ CurBuffy = tmp; ++ break; ++ } ++ ++ if(tmp->next) ++ tmp = tmp->next; ++ else ++ break; ++ } ++} ++ ++int draw_sidebar(int menu) { ++ ++ int lines = option(OPTHELP) ? 1 : 0; ++ BUFFY *tmp; ++#ifndef USE_SLANG_CURSES ++ attr_t attrs; ++#endif ++ short delim_len = strlen(SidebarDelim); ++ short color_pair; ++ ++ static bool initialized = false; ++ static int prev_show_value; ++ static short saveSidebarWidth; ++ ++ /* initialize first time */ ++ if(!initialized) { ++ prev_show_value = option(OPTSIDEBAR); ++ saveSidebarWidth = SidebarWidth; ++ if(!option(OPTSIDEBAR)) SidebarWidth = 0; ++ initialized = true; ++ } ++ ++ /* save or restore the value SidebarWidth */ ++ if(prev_show_value != option(OPTSIDEBAR)) { ++ if(prev_show_value && !option(OPTSIDEBAR)) { ++ saveSidebarWidth = SidebarWidth; ++ SidebarWidth = 0; ++ } else if(!prev_show_value && option(OPTSIDEBAR)) { ++ SidebarWidth = saveSidebarWidth; ++ } ++ prev_show_value = option(OPTSIDEBAR); ++ } ++ ++ ++// if ( SidebarWidth == 0 ) return 0; ++ if (SidebarWidth > 0 && option (OPTSIDEBAR) ++ && delim_len >= SidebarWidth) { ++ unset_option (OPTSIDEBAR); ++ /* saveSidebarWidth = SidebarWidth; */ ++ if (saveSidebarWidth > delim_len) { ++ SidebarWidth = saveSidebarWidth; ++ mutt_error (_("Value for sidebar_delim is too long. Disabling sidebar.")); ++ sleep (2); ++ } else { ++ SidebarWidth = 0; ++ mutt_error (_("Value for sidebar_delim is too long. Disabling sidebar. Please set your sidebar_width to a sane value.")); ++ sleep (4); /* the advise to set a sane value should be seen long enough */ ++ } ++ saveSidebarWidth = 0; ++ return (0); ++ } ++ ++ if ( SidebarWidth == 0 || !option(OPTSIDEBAR)) { ++ if (SidebarWidth > 0) { ++ saveSidebarWidth = SidebarWidth; ++ SidebarWidth = 0; ++ } ++ unset_option(OPTSIDEBAR); ++ return 0; ++ } ++ ++ /* get attributes for divider */ ++ SETCOLOR(MT_COLOR_STATUS); ++#ifndef USE_SLANG_CURSES ++ attr_get(&attrs, &color_pair, 0); ++#else ++ color_pair = attr_get(); ++#endif ++ SETCOLOR(MT_COLOR_NORMAL); ++ ++ /* draw the divider */ ++ ++ for ( ; lines < LINES-1-(menu != MENU_PAGER || option(OPTSTATUSONTOP)); lines++ ) { ++ move(lines, SidebarWidth - delim_len); ++ addstr(NONULL(SidebarDelim)); ++#ifndef USE_SLANG_CURSES ++ mvchgat(lines, SidebarWidth - delim_len, delim_len, 0, color_pair, NULL); ++#endif ++ } ++ ++ if ( Incoming == 0 ) return 0; ++ lines = option(OPTHELP) ? 1 : 0; /* go back to the top */ ++ ++ if ( known_lines != LINES || TopBuffy == 0 || BottomBuffy == 0 ) ++ calc_boundaries(menu); ++ if ( CurBuffy == 0 ) CurBuffy = Incoming; ++ ++ tmp = TopBuffy; ++ ++ SETCOLOR(MT_COLOR_NORMAL); ++ ++ for ( ; tmp && lines < LINES-1 - (menu != MENU_PAGER || option(OPTSTATUSONTOP)); tmp = tmp->next ) { ++ if ( tmp == CurBuffy ) ++ SETCOLOR(MT_COLOR_INDICATOR); ++ else if ( tmp->msg_unread > 0 ) ++ SETCOLOR(MT_COLOR_NEW); ++ else if ( tmp->msg_flagged > 0 ) ++ SETCOLOR(MT_COLOR_FLAGGED); ++ else ++ SETCOLOR(MT_COLOR_NORMAL); ++ ++ move( lines, 0 ); ++ if ( Context && !strcmp( tmp->path, Context->path ) ) { ++ tmp->msg_unread = Context->unread; ++ tmp->msgcount = Context->msgcount; ++ tmp->msg_flagged = Context->flagged; ++ } ++ // check whether Maildir is a prefix of the current folder's path ++ short maildir_is_prefix = 0; ++ if ( (strlen(tmp->path) > strlen(Maildir)) && ++ (strncmp(Maildir, tmp->path, strlen(Maildir)) == 0) ) ++ maildir_is_prefix = 1; ++ // calculate depth of current folder and generate its display name with indented spaces ++ int sidebar_folder_depth = 0; ++ char *sidebar_folder_name; ++ sidebar_folder_name = basename(tmp->path); ++ if ( maildir_is_prefix ) { ++ char *tmp_folder_name; ++ int i; ++ tmp_folder_name = tmp->path + strlen(Maildir); ++ for (i = 0; i < strlen(tmp->path) - strlen(Maildir); i++) { ++ if (tmp_folder_name[i] == '/') sidebar_folder_depth++; ++ } ++ if (sidebar_folder_depth > 0) { ++ sidebar_folder_name = malloc(strlen(basename(tmp->path)) + sidebar_folder_depth + 1); ++ for (i=0; i < sidebar_folder_depth; i++) ++ sidebar_folder_name[i]=' '; ++ sidebar_folder_name[i]=0; ++ strncat(sidebar_folder_name, basename(tmp->path), strlen(basename(tmp->path)) + sidebar_folder_depth); ++ } ++ } ++ printw( "%.*s", SidebarWidth - delim_len + 1, ++ make_sidebar_entry(sidebar_folder_name, tmp->msgcount, ++ tmp->msg_unread, tmp->msg_flagged)); ++ if (sidebar_folder_depth > 0) ++ free(sidebar_folder_name); ++ lines++; ++ } ++ SETCOLOR(MT_COLOR_NORMAL); ++ for ( ; lines < LINES-1 - (menu != MENU_PAGER || option(OPTSTATUSONTOP)); lines++ ) { ++ int i = 0; ++ move( lines, 0 ); ++ for ( ; i < SidebarWidth - delim_len; i++ ) ++ addch(' '); ++ } ++ return 0; ++} ++ ++ ++void set_buffystats(CONTEXT* Context) ++{ ++ BUFFY *tmp = Incoming; ++ while(tmp) { ++ if(Context && !strcmp(tmp->path, Context->path)) { ++ tmp->msg_unread = Context->unread; ++ tmp->msgcount = Context->msgcount; ++ break; ++ } ++ tmp = tmp->next; ++ } ++} ++ ++void scroll_sidebar(int op, int menu) ++{ ++ if(!SidebarWidth) return; ++ if(!CurBuffy) return; ++ ++ switch (op) { ++ case OP_SIDEBAR_NEXT: ++ if ( CurBuffy->next == NULL ) return; ++ CurBuffy = CurBuffy->next; ++ break; ++ case OP_SIDEBAR_PREV: ++ if ( CurBuffy->prev == NULL ) return; ++ CurBuffy = CurBuffy->prev; ++ break; ++ case OP_SIDEBAR_SCROLL_UP: ++ CurBuffy = TopBuffy; ++ if ( CurBuffy != Incoming ) { ++ calc_boundaries(menu); ++ CurBuffy = CurBuffy->prev; ++ } ++ break; ++ case OP_SIDEBAR_SCROLL_DOWN: ++ CurBuffy = BottomBuffy; ++ if ( CurBuffy->next ) { ++ calc_boundaries(menu); ++ CurBuffy = CurBuffy->next; ++ } ++ break; ++ default: ++ return; ++ } ++ calc_boundaries(menu); ++ draw_sidebar(menu); ++} ++ +--- /dev/null ++++ b/sidebar.h +@@ -0,0 +1,36 @@ ++/* ++ * Copyright (C) ????-2004 Justin Hibbits ++ * Copyright (C) 2004 Thomer M. Gil ++ * ++ * 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., 59 Temple Place - Suite 330, Boston, MA 02111, USA. ++ */ ++ ++#ifndef SIDEBAR_H ++#define SIDEBAR_H ++ ++struct MBOX_LIST { ++ char *path; ++ int msgcount; ++ int new; ++} MBLIST; ++ ++/* parameter is whether or not to go to the status line */ ++/* used for omitting the last | that covers up the status bar in the index */ ++int draw_sidebar(int); ++void scroll_sidebar(int, int); ++void set_curbuffy(char*); ++void set_buffystats(CONTEXT*); ++ ++#endif /* SIDEBAR_H */ +--- a/doc/Muttrc ++++ b/doc/Muttrc +@@ -2090,6 +2090,26 @@ attachments -I message/external-body + # function. + # + # ++# set sidebar_visible=no ++# ++# Name: sidebar_visible ++# Type: boolean ++# Default: no ++# ++# ++# This specifies whether or not to show sidebar (left-side list of folders). ++# ++# ++# set sidebar_width=0 ++# ++# Name: sidebar_width ++# Type: number ++# Default: 0 ++# ++# ++# The width of the sidebar. ++# ++# + # set crypt_autosign=no + # + # Name: crypt_autosign +--- a/imap/imap.c ++++ b/imap/imap.c +@@ -1484,7 +1484,7 @@ int imap_buffy_check (int force) + + imap_munge_mbox_name (munged, sizeof (munged), name); + snprintf (command, sizeof (command), +- "STATUS %s (UIDNEXT UIDVALIDITY UNSEEN RECENT)", munged); ++ "STATUS %s (UIDNEXT UIDVALIDITY UNSEEN RECENT MESSAGES)", munged); + + if (imap_cmd_queue (idata, command) < 0) + { +--- a/imap/command.c ++++ b/imap/command.c +@@ -911,6 +911,13 @@ static void cmd_parse_status (IMAP_DATA* + opened */ + status->uidnext = oldun; + ++ /* Added to make the sidebar show the correct numbers */ ++ if (status->messages) ++ { ++ inc->msgcount = status->messages; ++ inc->msg_unread = status->unseen; ++ } ++ + FREE (&value); + return; + } +--- a/PATCHES ++++ b/PATCHES +@@ -0,0 +1 @@ ++patch-1.5.18.sidebar.20080611.txt diff --git a/debian/patches/mutt-patched/sidebar-compat-apply.debian b/debian/patches/mutt-patched/sidebar-compat-apply.debian new file mode 100644 index 0000000..c3ec129 --- /dev/null +++ b/debian/patches/mutt-patched/sidebar-compat-apply.debian @@ -0,0 +1,30 @@ +# vim:ft=diff: +[continued from sidebar-compat-revert] + +After having applied the sidebar patch, we now re-apply the relevant part of +the maildir-mtime patch. The hunk is considerably shorter as we are always +counting messages; the if..break part has been dropped. +--- a/buffy.c ++++ b/buffy.c +@@ -409,6 +409,11 @@ int mutt_buffy_check (int force) + tmp->has_new = tmp->new = 1; + tmp->msgcount++; + tmp->msg_unread++; ++ snprintf (path, sizeof (path), "%s/new/%s", tmp->path, de->d_name); ++ if (!stat (path, &smd) && smd.st_mtime > tmp->mtime) ++ { ++ tmp->mtime = smd.st_mtime; ++ } + } + } + if(tmp->msg_unread) +--- a/buffy.h ++++ b/buffy.h +@@ -26,6 +26,7 @@ typedef struct buffy_t + long size; + struct buffy_t *next; + struct buffy_t *prev; ++ time_t mtime; /* for maildirs...time of newest entry */ + short new; /* mailbox has new mail */ + short has_new; /* set it new if new and not read */ + int msgcount; /* total number of messages */ diff --git a/debian/patches/mutt-patched/sidebar-compat-revert.debian b/debian/patches/mutt-patched/sidebar-compat-revert.debian new file mode 100644 index 0000000..cabd8a2 --- /dev/null +++ b/debian/patches/mutt-patched/sidebar-compat-revert.debian @@ -0,0 +1,48 @@ +# vim:ft=diff: +The sidebar and maildir-mtime patches touch the same part of buffy.c and +generate a non-trivial conflict. This patch reverts the affected hunk from the +maildir-mtime patch so we can cleanly apply the sidebar patch from the patch +upstream site. While we are at it, we also revert the trivial buffy.h change. + +Previously, the mutt maintainer would manually re-resolve the conflict for each +new sidebar patch version which turned out to be too error-prone. +(cf. #484537, #484538) + +[see sidebar-compat-apply for part 2] +--- a/buffy.c ++++ b/buffy.c +@@ -383,20 +383,10 @@ int mutt_buffy_check (int force) + if (*de->d_name != '.' && + (!(p = strstr (de->d_name, ":2,")) || !strchr (p + 3, 'T'))) + { +- if (!tmp->new) +- { +- /* one new and undeleted message is enough */ +- BuffyCount++; +- tmp->new = 1; +- +- if (! option (OPTMAILDIRMTIME)) /* prevent stat calls */ +- break; +- } +- snprintf (path, sizeof (path), "%s/new/%s", tmp->path, de->d_name); +- if (!stat (path, &smd) && smd.st_mtime > tmp->mtime) +- { +- tmp->mtime = smd.st_mtime; +- } ++ /* one new and undeleted message is enough */ ++ BuffyCount++; ++ tmp->new = 1; ++ break; + } + } + closedir (dirp); +--- a/buffy.h ++++ b/buffy.h +@@ -25,7 +25,6 @@ typedef struct buffy_t + char *path; + long size; + struct buffy_t *next; +- time_t mtime; /* for maildirs...time of newest entry */ + short new; /* mailbox has new mail */ + short notified; /* user has been notified */ + short magic; /* mailbox type */ diff --git a/debian/patches/mutt.org b/debian/patches/mutt.org new file mode 100644 index 0000000..ee38563 --- /dev/null +++ b/debian/patches/mutt.org @@ -0,0 +1,4 @@ +--- /dev/null ++++ b/.mutt.org +@@ -0,0 +1 @@ ++# dummy patch to serve as marker separating patches for mutt-patched diff --git a/debian/patches/not-applied/chdir b/debian/patches/not-applied/chdir new file mode 100644 index 0000000..a0fb00e --- /dev/null +++ b/debian/patches/not-applied/chdir @@ -0,0 +1,100 @@ +# vim:ft=diff: +This is the chdir patch by Christoph Berg . + +* Homepage: http://www.df7cb.de/projects/mutt/chdir/ + +== END PATCH +Index: mutt/init.c +=================================================================== +--- mutt.orig/init.c 2006-12-12 14:15:03.000000000 +0100 ++++ mutt/init.c 2007-02-15 20:46:18.950836872 +0100 +@@ -2214,6 +2214,35 @@ static int parse_source (BUFFER *tmp, BU + return (source_rc (path, err)); + } + ++static int parse_cd (BUFFER *tmp, BUFFER *s, unsigned long data, BUFFER *err) ++{ ++ char path[_POSIX_PATH_MAX]; ++ ++ if (mutt_extract_token (tmp, s, 0) != 0) ++ { ++ snprintf (err->data, err->dsize, _("cd: error at %s"), s->dptr); ++ return (-1); ++ } ++ if (MoreArgs (s)) ++ { ++ strfcpy (err->data, _("cd: too many arguments"), err->dsize); ++ return (-1); ++ } ++ strfcpy (path, tmp->data, sizeof (path)); ++ mutt_expand_path (path, sizeof (path)); ++ if (!*path) { ++ char *home = getenv("HOME"); ++ if (home) ++ strfcpy (path, home, sizeof (path)); ++ } ++ if (chdir(path) != 0) { ++ snprintf (err->data, err->dsize, _("cd: %s"), strerror(errno)); ++ return (-1); ++ } ++ return (0); ++} ++ ++ + /* line command to execute + + token scratch buffer to be used by parser. caller should free +Index: mutt/init.h +=================================================================== +--- mutt.orig/init.h 2006-12-12 14:15:03.000000000 +0100 ++++ mutt/init.h 2007-02-15 20:46:18.951836720 +0100 +@@ -3020,6 +3020,7 @@ static int parse_unalias (BUFFER *, BUFF + static int parse_ignore (BUFFER *, BUFFER *, unsigned long, BUFFER *); + static int parse_unignore (BUFFER *, BUFFER *, unsigned long, BUFFER *); + static int parse_source (BUFFER *, BUFFER *, unsigned long, BUFFER *); ++static int parse_cd (BUFFER *, BUFFER *, unsigned long, BUFFER *); + static int parse_set (BUFFER *, BUFFER *, unsigned long, BUFFER *); + static int parse_my_hdr (BUFFER *, BUFFER *, unsigned long, BUFFER *); + static int parse_unmy_hdr (BUFFER *, BUFFER *, unsigned long, BUFFER *); +@@ -3056,6 +3057,7 @@ struct command_t Commands[] = { + { "auto_view", parse_list, UL &AutoViewList }, + { "alternative_order", parse_list, UL &AlternativeOrderList}, + { "bind", mutt_parse_bind, 0 }, ++ { "cd", parse_cd, 0 }, + { "charset-hook", mutt_parse_hook, M_CHARSETHOOK }, + #ifdef HAVE_COLOR + { "color", mutt_parse_color, 0 }, +Index: mutt/doc/manual.xml.head +=================================================================== +--- mutt.orig/doc/manual.xml.head 2007-02-15 20:51:41.226843472 +0100 ++++ mutt/doc/manual.xml.head 2007-02-15 20:51:45.303223768 +0100 +@@ -1701,6 +1701,25 @@ sequence. + + + ++ ++Changing the current working directory ++ ++ ++ ++Usage: cd directory ++ ++ ++ ++ ++The cd command changes Mutt's current working directory. ++This affects commands and functions like source, ++change-folder, and save-entry that use ++relative paths. Using cd without directory changes to your ++home directory. ++ ++ ++ ++ + + Defining aliases for character sets + +--- a/PATCHES ++++ b/PATCHES +@@ -0,0 +1 @@ ++patch-1.5.13.cb.chdir.1 diff --git a/debian/patches/not-applied/indexcolor b/debian/patches/not-applied/indexcolor new file mode 100644 index 0000000..c74ab3c --- /dev/null +++ b/debian/patches/not-applied/indexcolor @@ -0,0 +1,670 @@ +# vim:ft=diff: +This is the indexcolor patch by Christian Aichinger . + +This patch enables different colorings for different parts of the index +display. For example you can choose one color for the subject, another one for +the author, and a third one for the flags. + +* Patch last synced with upstream: + - Date: 2007-02-15 + - File: http://greek0.net/mutt.html + http://greek0.net/patches/mutt-1.5.12-indexcolor-3+cb.diff + +* Changes made: + - Repatch for 1.5.13. + - Remove trailing whitespace. + +== END PATCH +Index: mutt/color.c +=================================================================== +--- mutt.orig/color.c 2007-02-15 21:26:09.140472816 +0100 ++++ mutt/color.c 2007-02-15 21:26:47.860586464 +0100 +@@ -35,6 +35,8 @@ int ColorDefs[MT_COLOR_MAX]; + COLOR_LINE *ColorHdrList = NULL; + COLOR_LINE *ColorBodyList = NULL; + COLOR_LINE *ColorIndexList = NULL; ++COLOR_LINE *ColorIndexSubjectList = NULL; ++COLOR_LINE *ColorIndexAuthorList = NULL; + + /* local to this file */ + static int ColorQuoteSize; +@@ -93,6 +95,14 @@ static struct mapping_t Fields[] = + { "bold", MT_COLOR_BOLD }, + { "underline", MT_COLOR_UNDERLINE }, + { "index", MT_COLOR_INDEX }, ++ { "index_subject", MT_COLOR_INDEX_SUBJECT }, ++ { "index_author", MT_COLOR_INDEX_AUTHOR }, ++ { "index_collapsed", MT_COLOR_INDEX_COLLAPSED }, ++ { "index_date", MT_COLOR_INDEX_DATE }, ++ { "index_flags", MT_COLOR_INDEX_FLAGS }, ++ { "index_label", MT_COLOR_INDEX_LABEL }, ++ { "index_number", MT_COLOR_INDEX_NUMBER }, ++ { "index_size", MT_COLOR_INDEX_SIZE }, + { NULL, 0 } + }; + +@@ -364,12 +374,55 @@ int mutt_parse_unmono (BUFFER *buf, BUFF + return _mutt_parse_uncolor(buf, s, data, err, 0); + } + ++static void ++mutt_do_uncolor (BUFFER *buf, BUFFER *s, COLOR_LINE **ColorList, ++ int *do_cache, int parse_uncolor) ++{ ++ COLOR_LINE *tmp, *last = NULL; ++ ++ do ++ { ++ mutt_extract_token (buf, s, 0); ++ if (!mutt_strcmp ("*", buf->data)) ++ { ++ for (tmp = *ColorList; tmp; ) ++ { ++ if (!*do_cache) ++ *do_cache = 1; ++ last = tmp; ++ tmp = tmp->next; ++ mutt_free_color_line(&last, parse_uncolor); ++ } ++ *ColorList = NULL; ++ } ++ else ++ { ++ for (last = NULL, tmp = *ColorList; tmp; last = tmp, tmp = tmp->next) ++ { ++ if (!mutt_strcmp (buf->data, tmp->pattern)) ++ { ++ if (!*do_cache) ++ *do_cache = 1; ++ dprint(1,(debugfile,"Freeing pattern \"%s\" from ColorList\n", ++ tmp->pattern)); ++ if (last) ++ last->next = tmp->next; ++ else ++ *ColorList = tmp->next; ++ mutt_free_color_line(&tmp, parse_uncolor); ++ break; ++ } ++ } ++ } ++ } ++ while (MoreArgs (s)); ++} ++ + static int + _mutt_parse_uncolor (BUFFER *buf, BUFFER *s, unsigned long data, BUFFER *err, + short parse_uncolor) + { + int object = 0, do_cache = 0; +- COLOR_LINE *tmp, *last = NULL; + + mutt_extract_token (buf, s, 0); + +@@ -379,6 +432,13 @@ _mutt_parse_uncolor (BUFFER *buf, BUFFER + return (-1); + } + ++ if (object > MT_COLOR_INDEX_AUTHOR) /* uncolor index column */ ++ { ++ ColorDefs[object] = 0; ++ set_option (OPTFORCEREDRAWINDEX); ++ return (0); ++ } ++ + if (mutt_strncmp (buf->data, "index", 5) != 0) + { + snprintf (err->data, err->dsize, +@@ -416,44 +476,12 @@ _mutt_parse_uncolor (BUFFER *buf, BUFFER + return 0; + } + +- +- do +- { +- mutt_extract_token (buf, s, 0); +- if (!mutt_strcmp ("*", buf->data)) +- { +- for (tmp = ColorIndexList; tmp; ) +- { +- if (!do_cache) +- do_cache = 1; +- last = tmp; +- tmp = tmp->next; +- mutt_free_color_line(&last, parse_uncolor); +- } +- ColorIndexList = NULL; +- } +- else +- { +- for (last = NULL, tmp = ColorIndexList; tmp; last = tmp, tmp = tmp->next) +- { +- if (!mutt_strcmp (buf->data, tmp->pattern)) +- { +- if (!do_cache) +- do_cache = 1; +- dprint(1,(debugfile,"Freeing pattern \"%s\" from ColorIndexList\n", +- tmp->pattern)); +- if (last) +- last->next = tmp->next; +- else +- ColorIndexList = tmp->next; +- mutt_free_color_line(&tmp, parse_uncolor); +- break; +- } +- } +- } +- } +- while (MoreArgs (s)); +- ++ if (object == MT_COLOR_INDEX) ++ mutt_do_uncolor(buf, s, &ColorIndexList, &do_cache, parse_uncolor); ++ if (object == MT_COLOR_INDEX_SUBJECT) ++ mutt_do_uncolor(buf, s, &ColorIndexSubjectList, &do_cache, parse_uncolor); ++ if (object == MT_COLOR_INDEX_AUTHOR) ++ mutt_do_uncolor(buf, s, &ColorIndexAuthorList, &do_cache, parse_uncolor); + + if (do_cache && !option (OPTNOCURSES)) + { +@@ -693,7 +721,7 @@ _mutt_parse_color (BUFFER *buf, BUFFER * + + /* extract a regular expression if needed */ + +- if (object == MT_COLOR_HEADER || object == MT_COLOR_BODY || object == MT_COLOR_INDEX) ++ if (object == MT_COLOR_HEADER || object == MT_COLOR_BODY || object == MT_COLOR_INDEX || object == MT_COLOR_INDEX_SUBJECT || object == MT_COLOR_INDEX_AUTHOR) + { + if (!MoreArgs (s)) + { +@@ -737,6 +765,18 @@ _mutt_parse_color (BUFFER *buf, BUFFER * + r = add_pattern (&ColorIndexList, buf->data, 1, fg, bg, attr, err, 1); + set_option (OPTFORCEREDRAWINDEX); + } ++ else if (object == MT_COLOR_INDEX_SUBJECT) ++ { ++ r = add_pattern (&ColorIndexSubjectList, buf->data, ++ 1, fg, bg, attr, err, 1); ++ set_option (OPTFORCEREDRAWINDEX); ++ } ++ else if (object == MT_COLOR_INDEX_AUTHOR) ++ { ++ r = add_pattern (&ColorIndexAuthorList, buf->data, ++ 1, fg, bg, attr, err, 1); ++ set_option (OPTFORCEREDRAWINDEX); ++ } + else if (object == MT_COLOR_QUOTED) + { + if (q_level >= ColorQuoteSize) +@@ -762,7 +802,11 @@ _mutt_parse_color (BUFFER *buf, BUFFER * + ColorQuote[q_level] = fgbgattr_to_color(fg, bg, attr); + } + else ++ { + ColorDefs[object] = fgbgattr_to_color(fg, bg, attr); ++ if (object > MT_COLOR_INDEX_AUTHOR) ++ set_option (OPTFORCEREDRAWINDEX); ++ } + + #ifdef HAVE_COLOR + # ifdef HAVE_BKGDSET +Index: mutt/curs_lib.c +=================================================================== +--- mutt.orig/curs_lib.c 2007-02-15 21:26:09.183466280 +0100 ++++ mutt/curs_lib.c 2007-02-15 21:26:15.898445448 +0100 +@@ -648,6 +648,7 @@ void mutt_format_string (char *dest, siz + size_t k, k2; + char scratch[MB_LEN_MAX]; + mbstate_t mbstate1, mbstate2; ++ int escaped = 0; + + memset(&mbstate1, 0, sizeof (mbstate1)); + memset(&mbstate2, 0, sizeof (mbstate2)); +@@ -663,7 +664,15 @@ void mutt_format_string (char *dest, siz + k = (k == (size_t)(-1)) ? 1 : n; + wc = replacement_char (); + } +- if (arboreal && wc < M_TREE_MAX) ++ if (escaped) { ++ escaped = 0; ++ w = 0; ++ } ++ else if (arboreal && wc == M_SPECIAL_INDEX) { ++ escaped = 1; ++ w = 0; ++ } ++ else if (arboreal && wc < M_TREE_MAX) + w = 1; /* hack */ + else + { +Index: mutt/hdrline.c +=================================================================== +--- mutt.orig/hdrline.c 2007-02-15 21:26:09.226459744 +0100 ++++ mutt/hdrline.c 2007-02-15 21:26:15.899445296 +0100 +@@ -99,6 +99,34 @@ static int first_mailing_list (char *buf + return 0; + } + ++/* Takes the color to embed, the buffer to manipulate and the buffer length as ++ * arguments. ++ * Returns the number of chars written. */ ++static size_t add_index_color(char *buf, size_t buflen, ++ format_flag flags, char color) ++{ ++ int len; ++ ++ /* only add color markers if we are operating on main index entries. */ ++ if (!(flags & M_FORMAT_INDEX)) ++ return 0; ++ ++ if (color == MT_COLOR_INDEX) { /* buf might be uninitialized other cases */ ++ len = mutt_strlen(buf); ++ buf += len; ++ buflen -= len; ++ } ++ ++ if (buflen < 2) ++ return 0; ++ ++ buf[0] = M_SPECIAL_INDEX; ++ buf[1] = color; ++ buf[2] = '\0'; ++ ++ return 2; ++} ++ + static void make_from (ENVELOPE *hdr, char *buf, size_t len, int do_lists) + { + int me; +@@ -251,6 +279,7 @@ hdr_format_str (char *dest, + #define THREAD_NEW (threads && hdr->collapsed && hdr->num_hidden > 1 && mutt_thread_contains_unread (ctx, hdr) == 1) + #define THREAD_OLD (threads && hdr->collapsed && hdr->num_hidden > 1 && mutt_thread_contains_unread (ctx, hdr) == 2) + size_t len; ++ size_t colorlen; + + hdr = hfi->hdr; + ctx = hfi->ctx; +@@ -302,12 +331,17 @@ hdr_format_str (char *dest, + break; + + case 'c': ++ colorlen = add_index_color(dest, destlen, flags, MT_COLOR_INDEX_SIZE); + mutt_pretty_size (buf2, sizeof (buf2), (long) hdr->content->length); +- mutt_format_s (dest, destlen, prefix, buf2); ++ mutt_format_s (dest+colorlen, destlen-colorlen, prefix, buf2); ++ add_index_color(dest+colorlen, destlen-colorlen, flags, MT_COLOR_INDEX); + break; + + case 'C': +- snprintf (fmt, sizeof (fmt), "%%%sd", prefix); ++ colorlen = add_index_color(fmt, sizeof(fmt), flags, MT_COLOR_INDEX_NUMBER); ++ snprintf (fmt+colorlen, sizeof(fmt)-colorlen, "%%%sd", prefix); ++ add_index_color(fmt+colorlen, sizeof(fmt)-colorlen, flags, MT_COLOR_INDEX); ++ + snprintf (dest, destlen, fmt, hdr->msgno + 1); + break; + +@@ -406,7 +440,10 @@ hdr_format_str (char *dest, + if (do_locales) + setlocale (LC_TIME, "C"); + +- mutt_format_s (dest, destlen, prefix, buf2); ++ colorlen = add_index_color(dest, destlen, flags, MT_COLOR_INDEX_DATE); ++ mutt_format_s (dest+colorlen, destlen-colorlen, prefix, buf2); ++ add_index_color(dest+colorlen, destlen-colorlen, flags, MT_COLOR_INDEX); ++ + if (len > 0 && op != 'd' && op != 'D') /* Skip ending op */ + src = cp + 1; + } +@@ -436,8 +473,10 @@ hdr_format_str (char *dest, + case 'F': + if (!optional) + { ++ colorlen = add_index_color(dest, destlen, flags, MT_COLOR_INDEX_AUTHOR); + make_from (hdr->env, buf2, sizeof (buf2), 0); +- mutt_format_s (dest, destlen, prefix, buf2); ++ mutt_format_s (dest+colorlen, destlen-colorlen, prefix, buf2); ++ add_index_color(dest+colorlen, destlen-colorlen, flags, MT_COLOR_INDEX); + } + else if (mutt_addr_is_user (hdr->env->from)) + optional = 0; +@@ -463,7 +502,9 @@ hdr_format_str (char *dest, + if (!optional) + { + snprintf (fmt, sizeof (fmt), "%%%sd", prefix); +- snprintf (dest, destlen, fmt, (int) hdr->lines); ++ colorlen = add_index_color(dest, destlen, flags, MT_COLOR_INDEX_SIZE); ++ snprintf (dest+colorlen, destlen-colorlen, fmt, (int) hdr->lines); ++ add_index_color(dest+colorlen, destlen-colorlen, flags, MT_COLOR_INDEX); + } + else if (hdr->lines <= 0) + optional = 0; +@@ -472,8 +513,10 @@ hdr_format_str (char *dest, + case 'L': + if (!optional) + { ++ colorlen = add_index_color(dest, destlen, flags, MT_COLOR_INDEX_AUTHOR); + make_from (hdr->env, buf2, sizeof (buf2), 1); +- mutt_format_s (dest, destlen, prefix, buf2); ++ mutt_format_s (dest+colorlen, destlen-colorlen, prefix, buf2); ++ add_index_color(dest+colorlen, destlen-colorlen, flags, MT_COLOR_INDEX); + } + else if (!check_for_mailing_list (hdr->env->to, NULL, NULL, 0) && + !check_for_mailing_list (hdr->env->cc, NULL, NULL, 0)) +@@ -528,10 +571,16 @@ hdr_format_str (char *dest, + snprintf (fmt, sizeof (fmt), "%%%sd", prefix); + if (!optional) + { +- if (threads && is_index && hdr->collapsed && hdr->num_hidden > 1) +- snprintf (dest, destlen, fmt, hdr->num_hidden); +- else if (is_index && threads) +- mutt_format_s (dest, destlen, prefix, " "); ++ colorlen = add_index_color(dest, destlen, flags, ++ MT_COLOR_INDEX_COLLAPSED); ++ if (threads && is_index && hdr->collapsed && hdr->num_hidden > 1) { ++ snprintf (dest+colorlen, destlen-colorlen, fmt, hdr->num_hidden); ++ add_index_color(dest, destlen-colorlen, flags, MT_COLOR_INDEX); ++ } ++ else if (is_index && threads) { ++ mutt_format_s (dest+colorlen, destlen-colorlen, prefix, " "); ++ add_index_color(dest, destlen-colorlen, flags, MT_COLOR_INDEX); ++ } + else + *dest = '\0'; + } +@@ -548,15 +597,23 @@ hdr_format_str (char *dest, + { + if (flags & M_FORMAT_FORCESUBJ) + { +- mutt_format_s (dest, destlen, "", NONULL (hdr->env->subject)); ++ colorlen = add_index_color(dest, destlen, flags, MT_COLOR_INDEX_SUBJECT); ++ mutt_format_s (dest+colorlen, destlen-colorlen, "", ++ NONULL (hdr->env->subject)); ++ add_index_color(dest+colorlen, destlen-colorlen, flags, MT_COLOR_INDEX); ++ + snprintf (buf2, sizeof (buf2), "%s%s", hdr->tree, dest); + mutt_format_s_tree (dest, destlen, prefix, buf2); + } + else + mutt_format_s_tree (dest, destlen, prefix, hdr->tree); + } +- else +- mutt_format_s (dest, destlen, prefix, NONULL (hdr->env->subject)); ++ else { ++ colorlen = add_index_color(dest, destlen, flags, MT_COLOR_INDEX_SUBJECT); ++ mutt_format_s (dest+colorlen, destlen-colorlen, prefix, ++ NONULL (hdr->env->subject)); ++ add_index_color(dest+colorlen, destlen-colorlen, flags, MT_COLOR_INDEX); ++ } + break; + + case 'S': +@@ -652,7 +709,9 @@ hdr_format_str (char *dest, + hdr->tagged ? '*' : + (hdr->flagged ? '!' : + (Tochars && ((i = mutt_user_is_recipient (hdr)) < mutt_strlen (Tochars)) ? Tochars[i] : ' '))); +- mutt_format_s (dest, destlen, prefix, buf2); ++ colorlen = add_index_color(dest, destlen, flags, MT_COLOR_INDEX_FLAGS); ++ mutt_format_s (dest+colorlen, destlen-colorlen, prefix, buf2); ++ add_index_color(dest+colorlen, destlen-colorlen, flags, MT_COLOR_INDEX); + break; + + case 'X': +@@ -672,7 +731,9 @@ hdr_format_str (char *dest, + if (optional) + optional = hdr->env->x_label ? 1 : 0; + +- mutt_format_s (dest, destlen, prefix, NONULL (hdr->env->x_label)); ++ colorlen = add_index_color(dest, destlen, flags, MT_COLOR_INDEX_LABEL); ++ mutt_format_s (dest+colorlen, destlen-colorlen, prefix, NONULL (hdr->env->x_label)); ++ add_index_color(dest+colorlen, destlen-colorlen, flags, MT_COLOR_INDEX); + break; + + case 'Y': +@@ -698,10 +759,12 @@ hdr_format_str (char *dest, + if (optional) + optional = i; + ++ colorlen = add_index_color(dest, destlen, flags, MT_COLOR_INDEX_LABEL); + if (i) +- mutt_format_s (dest, destlen, prefix, NONULL (hdr->env->x_label)); ++ mutt_format_s (dest+colorlen, destlen-colorlen, prefix, NONULL (hdr->env->x_label)); + else +- mutt_format_s (dest, destlen, prefix, ""); ++ mutt_format_s (dest+colorlen, destlen-colorlen, prefix, ""); ++ add_index_color(dest+colorlen, destlen-colorlen, flags, MT_COLOR_INDEX); + + break; + +Index: mutt/menu.c +=================================================================== +--- mutt.orig/menu.c 2007-02-15 21:26:09.270453056 +0100 ++++ mutt/menu.c 2007-02-15 21:26:15.900445144 +0100 +@@ -36,7 +36,30 @@ extern int Charset_is_utf8; /* FIXME: ba + + extern size_t UngetCount; + +-static void print_enriched_string (int attr, unsigned char *s, int do_color) ++static int get_color(int index, int type) { ++ COLOR_LINE *color; ++ HEADER *hdr = Context->hdrs[index]; ++ ++ switch (type) { ++ case MT_COLOR_INDEX_SUBJECT: ++ color = ColorIndexSubjectList; ++ break; ++ case MT_COLOR_INDEX_AUTHOR: ++ color = ColorIndexAuthorList; ++ break; ++ default: ++ return ColorDefs[type]; ++ } ++ ++ for (; color; color = color->next) ++ if (mutt_pattern_exec (color->color_pattern, M_MATCH_FULL_ADDRESS, ++ Context, hdr)) ++ return color->pair; ++ ++ return 0; ++} ++ ++static void print_enriched_string (int index, int attr, unsigned char *s, int do_color) + { + wchar_t wc; + size_t k; +@@ -133,6 +156,18 @@ static void print_enriched_string (int a + } + if (do_color) attrset(attr); + } ++ else if(*s == M_SPECIAL_INDEX) ++ { ++ s++; ++ if (do_color) { ++ if (*s == MT_COLOR_INDEX) ++ attrset(attr); ++ else ++ attron(get_color(index, *s)); ++ } ++ s++; ++ n -= 2; ++ } + else if ((k = mbrtowc (&wc, (char *)s, n, &mbstate)) > 0) + { + addnstr ((char *)s, k); +@@ -235,7 +270,7 @@ void menu_redraw_index (MUTTMENU *menu) + addstr (" "); + } + +- print_enriched_string (menu->color(i), (unsigned char *) buf, 1); ++ print_enriched_string (i, menu->color(i), (unsigned char *) buf, 1); + SETCOLOR (MT_COLOR_NORMAL); + } + else +@@ -249,7 +284,7 @@ void menu_redraw_index (MUTTMENU *menu) + } + + CLEARLINE (i - menu->top + menu->offset); +- print_enriched_string (menu->color(i), (unsigned char *) buf, i != menu->current); ++ print_enriched_string (i, menu->color(i), (unsigned char *) buf, i != menu->current); + SETCOLOR (MT_COLOR_NORMAL); + BKGDSET (MT_COLOR_NORMAL); + } +@@ -286,7 +321,7 @@ void menu_redraw_motion (MUTTMENU *menu) + menu_make_entry (buf, sizeof (buf), menu, menu->oldcurrent); + menu_pad_string (buf, sizeof (buf)); + move (menu->oldcurrent + menu->offset - menu->top, 3); +- print_enriched_string (menu->color(menu->oldcurrent), (unsigned char *) buf, 1); ++ print_enriched_string (menu->oldcurrent, menu->color(menu->oldcurrent), (unsigned char *) buf, 1); + SETCOLOR (MT_COLOR_NORMAL); + } + +@@ -304,7 +339,7 @@ void menu_redraw_motion (MUTTMENU *menu) + clrtoeol (); + menu_make_entry (buf, sizeof (buf), menu, menu->oldcurrent); + menu_pad_string (buf, sizeof (buf)); +- print_enriched_string (menu->color(menu->oldcurrent), (unsigned char *) buf, 1); ++ print_enriched_string (menu->oldcurrent, menu->color(menu->oldcurrent), (unsigned char *) buf, 1); + + /* now draw the new one to reflect the change */ + menu_make_entry (buf, sizeof (buf), menu, menu->current); +@@ -313,7 +348,7 @@ void menu_redraw_motion (MUTTMENU *menu) + ADDCOLOR (MT_COLOR_INDICATOR); + BKGDSET (MT_COLOR_INDICATOR); + CLEARLINE (menu->current - menu->top + menu->offset); +- print_enriched_string (menu->color(menu->current), (unsigned char *) buf, 0); ++ print_enriched_string (menu->current, menu->color(menu->current), (unsigned char *) buf, 0); + SETCOLOR (MT_COLOR_NORMAL); + BKGDSET (MT_COLOR_NORMAL); + } +@@ -339,7 +374,7 @@ void menu_redraw_current (MUTTMENU *menu + attrset (attr); + addch (' '); + menu_pad_string (buf, sizeof (buf)); +- print_enriched_string (menu->color(menu->current), (unsigned char *) buf, 1); ++ print_enriched_string (menu->current, menu->color(menu->current), (unsigned char *) buf, 1); + SETCOLOR (MT_COLOR_NORMAL); + } + else +@@ -348,7 +383,7 @@ void menu_redraw_current (MUTTMENU *menu + ADDCOLOR (MT_COLOR_INDICATOR); + BKGDSET (MT_COLOR_INDICATOR); + clrtoeol (); +- print_enriched_string (menu->color(menu->current), (unsigned char *) buf, 0); ++ print_enriched_string (menu->current, menu->color(menu->current), (unsigned char *) buf, 0); + SETCOLOR (MT_COLOR_NORMAL); + BKGDSET (MT_COLOR_NORMAL); + } +Index: mutt/mutt_curses.h +=================================================================== +--- mutt.orig/mutt_curses.h 2007-02-15 21:26:09.314446368 +0100 ++++ mutt/mutt_curses.h 2007-02-15 21:26:15.900445144 +0100 +@@ -126,6 +126,16 @@ enum + MT_COLOR_BOLD, + MT_COLOR_UNDERLINE, + MT_COLOR_INDEX, ++ /* please no non-MT_COLOR_INDEX objects after this point */ ++ MT_COLOR_INDEX_SUBJECT, ++ MT_COLOR_INDEX_AUTHOR, ++ /* below only index coloring stuff that doesn't have a colorline! */ ++ MT_COLOR_INDEX_COLLAPSED, ++ MT_COLOR_INDEX_DATE, ++ MT_COLOR_INDEX_FLAGS, ++ MT_COLOR_INDEX_LABEL, ++ MT_COLOR_INDEX_NUMBER, ++ MT_COLOR_INDEX_SIZE, + MT_COLOR_MAX + }; + +@@ -165,6 +175,8 @@ extern int ColorDefs[]; + extern COLOR_LINE *ColorHdrList; + extern COLOR_LINE *ColorBodyList; + extern COLOR_LINE *ColorIndexList; ++extern COLOR_LINE *ColorIndexSubjectList; ++extern COLOR_LINE *ColorIndexAuthorList; + + void ci_init_color (void); + void ci_start_color (void); +Index: mutt/mutt.h +=================================================================== +--- mutt.orig/mutt.h 2007-02-15 21:26:09.358439680 +0100 ++++ mutt/mutt.h 2007-02-15 21:26:15.901444992 +0100 +@@ -176,6 +176,8 @@ typedef enum + #define M_TREE_MISSING 13 + #define M_TREE_MAX 14 + ++#define M_SPECIAL_INDEX M_TREE_MAX ++ + #define M_THREAD_COLLAPSE (1<<0) + #define M_THREAD_UNCOLLAPSE (1<<1) + #define M_THREAD_GET_HIDDEN (1<<2) +Index: mutt/doc/manual.xml.head +=================================================================== +--- mutt.orig/doc/manual.xml.head 2007-02-15 21:26:09.446426304 +0100 ++++ mutt/doc/manual.xml.head 2007-02-15 21:26:15.903444688 +0100 +@@ -1837,8 +1837,8 @@ silently truncated at the screen width, + + + Usage: color object foreground background [ regexp ] +-Usage: color index foreground background pattern +-Usage: uncolor index pattern [ pattern ... ] ++Usage: color index-object foreground background pattern ++ Usage: uncolor index-object pattern [ pattern ... ] + + + +@@ -1901,6 +1901,54 @@ index (match pattern + + ++index_author (color of the author name in the index, uses pattern) ++ ++ ++ ++ ++ ++index_collapsed (the number of messages in a collapsed thread in the index) ++ ++ ++ ++ ++ ++index_date (color of the date field in the index) ++ ++ ++ ++ ++ ++index_flags (color of the message flags in the index) ++ ++ ++ ++ ++ ++index_label (color of the message label in the index) ++ ++ ++ ++ ++ ++index_number (color of the message number in the index) ++ ++ ++ ++ ++ ++index_size (color of the message size and line number in the index) ++ ++ ++ ++ ++ ++index_subject (color of the subject in the index, uses pattern) ++ ++ ++ ++ ++ + indicator (arrow or bar used to indicate the current item in a menu) + + +--- a/PATCHES ++++ b/PATCHES +@@ -0,0 +1 @@ ++patch-1.5.13.greek0.indexcolor-3+cb diff --git a/debian/patches/not-applied/w3mface b/debian/patches/not-applied/w3mface new file mode 100644 index 0000000..3dda72b --- /dev/null +++ b/debian/patches/not-applied/w3mface @@ -0,0 +1,308 @@ +# vim:ft=diff: +This is the xface (w3mface) patch by TAKAHASHI Tamotsu +. + +Needs w3m-img, compface, and netpbm installed. + +* Homepage: http://www.df7cb.de/projects/mutt/x-face/ + +* Changes made: + - Remove LIBEXECDIR definition to avoid needing rerunning automake, + hardcode /usr/lib/w3m/w3mimgdisplay. + +== END PATCH +Index: xface/globals.h +=================================================================== +--- xface.orig/globals.h 2007-02-15 20:28:46.961763520 +0100 ++++ xface/globals.h 2007-02-15 20:28:56.069378952 +0100 +@@ -146,6 +146,11 @@ WHERE const char *ReleaseDate; + + WHERE HASH *Groups; + ++WHERE char *UncompFace; ++WHERE char *IconToPbm; ++WHERE char *W3mImgDisplay; ++WHERE char *W3mOpt; ++ + WHERE LIST *AutoViewList INITVAL(0); + WHERE LIST *AlternativeOrderList INITVAL(0); + WHERE LIST *AttachAllow INITVAL(0); +Index: xface/hcache.c +=================================================================== +--- xface.orig/hcache.c 2007-02-15 20:28:46.968762456 +0100 ++++ xface/hcache.c 2007-02-15 20:28:56.069378952 +0100 +@@ -401,6 +401,7 @@ dump_envelope(ENVELOPE * e, unsigned cha + d = dump_char(e->message_id, d, off); + d = dump_char(e->supersedes, d, off); + d = dump_char(e->date, d, off); ++ d = dump_char(e->x_face, d, off); + d = dump_char(e->x_label, d, off); + + d = dump_buffer(e->spam, d, off); +@@ -438,6 +439,7 @@ restore_envelope(ENVELOPE * e, const uns + restore_char(&e->message_id, d, off); + restore_char(&e->supersedes, d, off); + restore_char(&e->date, d, off); ++ restore_char(&e->x_face, d, off); + restore_char(&e->x_label, d, off); + + restore_buffer(&e->spam, d, off); +Index: xface/init.h +=================================================================== +--- xface.orig/init.h 2007-02-15 20:28:46.976761240 +0100 ++++ xface/init.h 2007-02-15 20:29:15.382442920 +0100 +@@ -2941,6 +2941,31 @@ struct option_t MuttVars[] = { + ** Controls whether mutt writes out the Bcc header when preparing + ** messages to be sent. Exim users may wish to unset this. + */ ++ { "xface", DT_BOOL, R_NONE, OPTXFACE, 0 }, ++ /* ++ ** .pp ++ ** Controls whether mutt displays X-Faces. ++ */ ++ { "xface_icontopbm", DT_PATH, R_NONE, UL &IconToPbm, UL "icontopbm" }, ++ /* ++ ** .pp ++ ** Specify the path to ``icontopbm'' program. ++ */ ++ { "xface_uncompface", DT_PATH, R_NONE, UL &UncompFace, UL "uncompface" }, ++ /* ++ ** .pp ++ ** Specify the path to ``uncompface'' program. ++ */ ++ { "xface_w3mimgdisplay",DT_PATH, R_NONE, UL &W3mImgDisplay, UL "/usr/lib/w3m/w3mimgdisplay" }, ++ /* ++ ** .pp ++ ** Specify the path to ``w3mimgdisplay'' program. ++ */ ++ { "xface_w3mimgdisplay_options",DT_STR, R_NONE, UL &W3mOpt, UL "-x 5 -y 5" }, ++ /* ++ ** .pp ++ ** Specify options for ``w3mimgdisplay'' program. ++ */ + /*--*/ + { NULL } + }; +Index: xface/mutt.h +=================================================================== +--- xface.orig/mutt.h 2007-02-15 20:28:46.983760176 +0100 ++++ xface/mutt.h 2007-02-15 20:28:56.071378648 +0100 +@@ -450,6 +450,7 @@ enum + OPTWRAP, + OPTWRAPSEARCH, + OPTWRITEBCC, /* write out a bcc header? */ ++ OPTXFACE, + OPTXMAILER, + + OPTCRYPTUSEGPGME, +@@ -587,6 +588,7 @@ typedef struct envelope + char *message_id; + char *supersedes; + char *date; ++ char *x_face; /* X-Face header content */ + char *x_label; + BUFFER *spam; + LIST *references; /* message references (in reverse order) */ +Index: xface/muttlib.c +=================================================================== +--- xface.orig/muttlib.c 2007-02-15 20:28:46.991758960 +0100 ++++ xface/muttlib.c 2007-02-15 20:28:56.072378496 +0100 +@@ -670,6 +670,7 @@ void mutt_free_envelope (ENVELOPE **p) + FREE (&(*p)->message_id); + FREE (&(*p)->supersedes); + FREE (&(*p)->date); ++ FREE (&(*p)->x_face); + FREE (&(*p)->x_label); + + mutt_buffer_free (&(*p)->spam); +Index: xface/pager.c +=================================================================== +--- xface.orig/pager.c 2007-02-15 20:28:47.000757592 +0100 ++++ xface/pager.c 2007-02-15 20:28:56.072378496 +0100 +@@ -1479,6 +1479,89 @@ upNLines (int nlines, struct line_t *inf + return cur; + } + ++static int ++display_xface (HEADER *hdr) ++{ ++ char facefile[_POSIX_PATH_MAX + 1]; ++ char command[LONG_STRING]; ++ char *facedata; ++ FILE *fpin = NULL, *fpout = NULL; ++ pid_t pid; ++ ++ /* everything ready? */ ++ if (!UncompFace || !(*UncompFace) || ++ !IconToPbm || !(*IconToPbm) || ++ !W3mImgDisplay || !(*W3mImgDisplay) || ++ !hdr || !hdr->env || !hdr->env->x_face) ++ return 0; ++ ++ /* test w3mimgdisplay */ ++ snprintf (command, sizeof (command), "%s -test >/dev/null", W3mImgDisplay); ++ if (mutt_system (command) == -1) ++ return 0; ++ ++ /* prepare facedata */ ++ facedata = hdr->env->x_face; ++ ++ /* convert facedata to imagedata ++ * and store imagedata in facefile ++ */ ++ mutt_mktemp (facefile); ++ if ((fpout = safe_fopen (facefile, "w")) == NULL) ++ { ++ mutt_error (_("Could not create temporary file!")); ++ return 0; ++ } ++ snprintf (command, sizeof (command), ++ "( echo '/* Width=48, Height=48 */'; %s ) | %s", ++ UncompFace, IconToPbm); ++ pid = mutt_create_filter_fd ++ (command, &fpin, NULL, NULL, -1, fileno (fpout), -1); ++ if (pid < 0) ++ { ++ mutt_perror (_("face filter")); ++ safe_fclose (&fpout); ++ mutt_unlink (facefile); ++ return 0; ++ } ++ /* pass facedata to converters */ ++ fputs (facedata, fpin); ++ if (safe_fclose (&fpin) != 0 && errno != EPIPE) ++ { ++ if (fpout != NULL) ++ { ++ mutt_wait_filter (pid); ++ safe_fclose (&fpout); ++ } ++ mutt_unlink (facefile); ++ return 0; ++ } ++ if (fpout != NULL) ++ mutt_wait_filter (pid); ++ safe_fclose (&fpout); ++ ++ /* ++ * w3mimgdisplay ++ */ ++ snprintf (command, sizeof (command), ++ "%s %s", W3mImgDisplay, NONULL (W3mOpt)); ++ pid = mutt_create_filter_fd ++ (command, &fpin, NULL, NULL, -1, -1, -1); ++ if (pid < 0) ++ { ++ mutt_perror ("w3mdisp"); ++ mutt_unlink (facefile); ++ return 0; ++ } ++ /* pass facefile to w3mimgdisplay */ ++ fprintf (fpin, "2;3;\n0;1;0;0;48;48;0;0;48;48;%s\n4;\n3;\n", facefile); ++ if (safe_fclose (&fpin) != 0 && errno != EPIPE) ++ mutt_perror ("w3mdisp"); ++ mutt_wait_filter (pid); ++ mutt_unlink (facefile); ++ return 0; ++} ++ + static struct mapping_t PagerHelp[] = { + { N_("Exit"), OP_EXIT }, + { N_("PrevPg"), OP_PREV_PAGE }, +@@ -1514,6 +1597,7 @@ mutt_pager (const char *banner, const ch + int lines = 0, curline = 0, topline = 0, oldtopline = 0, err, first = 1; + int r = -1; + int redraw = REDRAW_FULL; ++ int xface = 0; + FILE *fp = NULL; + LOFF_T last_pos = 0, last_offset = 0; + int old_smart_wrap, old_markers; +@@ -1593,6 +1677,8 @@ mutt_pager (const char *banner, const ch + + if (redraw & REDRAW_FULL) + { ++ xface = 1; /* display xface later */ ++ + SETCOLOR (MT_COLOR_NORMAL); + /* clear() doesn't optimize screen redraws */ + move (0, 0); +@@ -1794,6 +1880,11 @@ mutt_pager (const char *banner, const ch + } else move (statusoffset, COLS-1); + mutt_refresh (); + ++ /* X-Face */ ++ if (option (OPTXFACE) && xface && IsHeader (extra)) ++ display_xface (extra->hdr); ++ xface = 0; ++ + if (IsHeader (extra) && OldHdr == extra->hdr && TopLine != topline + && lineInfo[curline].offset < sb.st_size-1) + { +Index: xface/parse.c +=================================================================== +--- xface.orig/parse.c 2007-02-15 20:28:47.007756528 +0100 ++++ xface/parse.c 2007-02-15 20:28:56.073378344 +0100 +@@ -43,6 +43,7 @@ char *mutt_read_rfc822_line (FILE *f, ch + char *buf = line; + char ch; + size_t offset = 0; ++ int xface = 0; + + FOREVER + { +@@ -53,6 +54,9 @@ char *mutt_read_rfc822_line (FILE *f, ch + return (line); + } + ++ if (ascii_strcasecmp (buf, "x-face:") == 0) ++ xface = 1; ++ + buf += strlen (buf) - 1; + if (*buf == '\n') + { +@@ -71,9 +75,12 @@ char *mutt_read_rfc822_line (FILE *f, ch + /* eat tabs and spaces from the beginning of the continuation line */ + while ((ch = fgetc (f)) == ' ' || ch == '\t') + ; +- ungetc (ch, f); +- *++buf = ' '; /* string is still terminated because we removed +- at least one whitespace char above */ ++ if (!xface) ++ { ++ ungetc (ch, f); ++ *++buf = ' '; /* string is still terminated because we removed ++ at least one whitespace char above */ ++ } + } + + buf++; +@@ -1244,6 +1251,11 @@ int mutt_parse_rfc822_line (ENVELOPE *e, + e->x_label = safe_strdup(p); + matched = 1; + } ++ else if (ascii_strcasecmp (line+1, "-face") == 0) ++ { ++ e->x_face = safe_strdup (p); ++ matched = 1; ++ } + + default: + break; +Index: xface/sendlib.c +=================================================================== +--- xface.orig/sendlib.c 2007-02-15 20:28:47.017755008 +0100 ++++ xface/sendlib.c 2007-02-15 20:28:56.074378192 +0100 +@@ -1829,6 +1829,9 @@ int mutt_write_rfc822_header (FILE *fp, + } + } + ++ if (env->x_face) ++ fprintf (fp, "X-Face: %s\n", env->x_face); ++ + if (mode == 0 && !privacy && option (OPTXMAILER) && !has_agent) + { + /* Add a vanity header */ +--- a/PATCHES ++++ b/PATCHES +@@ -0,0 +1 @@ ++patch-1.5.13.tamo.w3mface.2 diff --git a/debian/patches/series b/debian/patches/series new file mode 100644 index 0000000..e73224c --- /dev/null +++ b/debian/patches/series @@ -0,0 +1,41 @@ +# build system patches +misc/am-maintainer-mode +debian-specific/build_doc_adjustments.diff +debian-specific/sort-patchlist + +# features +features/ifdef +features/maildir-mtime +features/xtitles +features/trash-folder +features/purge-message +features/sensible_browser_position +features-old/patch-1.5.4.vk.pgp_verbose_mime +features/compressed-folders +features/compressed-folders.debian + +# Debian config +debian-specific/Muttrc +debian-specific/Md.etc_mailname_gethostbyname.diff +debian-specific/use_usr_bin_editor.diff +debian-specific/correct_docdir_in_man_page.diff +debian-specific/dont_document_not_present_features.diff +debian-specific/document_debian_defaults +debian-specific/assumed_charset-compat +misc/define-pgp_getkeys_command.diff +misc/gpg.rc-paths +misc/smime.rc + +upstream/500016-temp-cache-fix.patch +upstream/508988-inode-sort.patch + +mutt.org +# extra patches for mutt-patched +mutt-patched/sidebar-compat-revert.debian +#mutt-patched/sidebar +#mutt-patched/sidebar-compat-apply.debian + +# unapplied patches for custom packages +# not-applied/chdir +# not-applied/indexcolor +# not-applied/w3mface diff --git a/debian/patches/upstream/500016-temp-cache-fix.patch b/debian/patches/upstream/500016-temp-cache-fix.patch new file mode 100644 index 0000000..486f74e --- /dev/null +++ b/debian/patches/upstream/500016-temp-cache-fix.patch @@ -0,0 +1,29 @@ +message cache partially invalid after network problem +fixed by http://dev.mutt.org/trac/ticket/3163 +changeset http://dev.mutt.org/trac/changeset/da94a92c3ba0 +resolves http://bugs.debian.org/500016 + +--- mutt-1.5.19/bcache.c 2009-01-05 19:20:53.000000000 +0000 ++++ mutt-7ddf1d1cc490/bcache.c 2009-01-27 20:58:15.000000000 +0000 +@@ -136,6 +136,13 @@ + snprintf (path, sizeof (path), "%s%s%s", bcache->path, id, + tmp ? ".tmp" : ""); + ++ if ((fp = safe_fopen (path, "w+"))) ++ goto out; ++ ++ if (errno == EEXIST) ++ /* clean up leftover tmp file */ ++ mutt_unlink (path); ++ + s = strchr (path + 1, '/'); + while (!(fp = safe_fopen (path, "w+")) && errno == ENOENT && s) + { +@@ -147,6 +154,7 @@ + s = strchr (s + 1, '/'); + } + ++ out: + dprint (3, (debugfile, "bcache: put: '%s'\n", path)); + + return fp; diff --git a/debian/patches/upstream/508988-inode-sort.patch b/debian/patches/upstream/508988-inode-sort.patch new file mode 100644 index 0000000..64192ad --- /dev/null +++ b/debian/patches/upstream/508988-inode-sort.patch @@ -0,0 +1,41 @@ +fixed by http://dev.mutt.org/trac/ticket/3163 +changeset http://dev.mutt.org/trac/changeset/eb918af802ec +resolves http://bugs.debian.org/508988 + +This commit introduces an unconditional inode-sort to fix the slowness with big +maildirs + +--- mutt-1.5.19/mh.c 2009-01-05 19:20:53.000000000 +0000 ++++ mutt-7ddf1d1cc490/mh.c 2009-01-27 20:58:15.000000000 +0000 +@@ -1,5 +1,5 @@ + /* +- * Copyright (C) 1996-2002,2007 Michael R. Elkins ++ * Copyright (C) 1996-2002,2007,2009 Michael R. Elkins + * Copyright (C) 1999-2005 Thomas Roessler + * + * This program is free software; you can redistribute it and/or modify +@@ -1027,13 +1027,14 @@ + if (!ctx->quiet && progress) + mutt_progress_update (progress, count, -1); + ++ DO_SORT(); ++ + snprintf (fn, sizeof (fn), "%s/%s", ctx->path, p->h->path); + + #if USE_HCACHE + if (option(OPTHCACHEVERIFY)) + { +- DO_SORT(); +- ret = stat(fn, &lastchanged); ++ ret = stat(fn, &lastchanged); + } + else + { +@@ -1057,7 +1058,6 @@ + { + #endif /* USE_HCACHE */ + +- DO_SORT(); + if (maildir_parse_message (ctx->magic, fn, p->h->old, p->h)) + { + p->header_parsed = 1; diff --git a/debian/rules b/debian/rules new file mode 100755 index 0000000..9edd5c8 --- /dev/null +++ b/debian/rules @@ -0,0 +1,210 @@ +#!/usr/bin/make -f + +include /usr/share/quilt/quilt.make + +###################### user serviceable parts ###################### + +### +# build a separate mutt-patched package? +#BUILD_PATCHED := yes -- disabled until there is a sidebar patch for 1.5.19 +### +# header cache backend +# HCACHE_DB := bdb +HCACHE_DB := gdbm +# HCACHE_DB := qdbm +### +# GPGME backend +# GPGME := --enable-gpgme +### + +###################### variables ###################### + +ifneq ($(BUILD_PATCHED),yes) +export DH_OPTIONS := -Nmutt-patched +endif + +# Configure arguments + +ifeq ($(HCACHE_DB),bdb) + hcache_db := --without-gdbm --without-qdbm +endif +ifeq ($(HCACHE_DB),gdbm) + hcache_db := --without-qdbm --without-bdb +endif +ifeq ($(HCACHE_DB),qdbm) + hcache_db := --without-gdbm --without-bdb +endif + +confflags = --prefix=/usr \ + --sysconfdir=/etc \ + --mandir=/usr/share/man \ + --with-sharedir=/usr/share/mutt \ + --with-docdir=/usr/share/doc \ + --with-mailpath=/var/mail \ + \ + --disable-dependency-tracking \ + \ + --enable-compressed \ + --enable-debug \ + --enable-fcntl \ + --enable-hcache \ + $(GPGME) \ + --enable-imap \ + --enable-smtp \ + --enable-inodesort \ + --enable-pop \ + \ + --with-curses \ + --with-gnutls \ + --with-gss \ + --with-idn \ + --with-mixmaster \ + --with-sasl \ + \ + $(hcache_db) + +DEB_HOST_GNU_TYPE ?= $(shell dpkg-architecture -qDEB_HOST_GNU_TYPE) +DEB_BUILD_GNU_TYPE ?= $(shell dpkg-architecture -qDEB_BUILD_GNU_TYPE) +confflags += --build $(DEB_BUILD_GNU_TYPE) +# Only specify --host when cross-compiling +ifneq ($(DEB_BUILD_GNU_TYPE), $(DEB_HOST_GNU_TYPE)) + confflags += --host $(DEB_HOST_GNU_TYPE) +endif + +# CFLAGS +CFLAGS = -Wall -g +CPPFLAGS = -I/usr/include/qdbm +ifneq (,$(findstring noopt,$(DEB_BUILD_OPTIONS))) + CFLAGS += -O0 +else + CFLAGS += -O2 +endif + +# Directory to make the build on +objdir = $(CURDIR)/obj-$(DEB_HOST_GNU_TYPE) + +###################### main ###################### + +$(objdir)-patched/build-stamp: $(QUILT_STAMPFN) + dh_testdir + dh_clean + -mkdir $(objdir)-patched + +ifeq ($(BUILD_PATCHED),yes) + ###################### building mutt-patched ###################### + autoreconf --install --include=m4 + cd $(objdir)-patched && \ + env CFLAGS="$(CFLAGS)" CPPFLAGS="$(CPPFLAGS)" \ + ../configure $(confflags) + + echo '#include "config-debian.h"' >> $(objdir)-patched/config.h + + # we should just "make mutt" here, but that doesn't work yet + cd $(objdir)-patched && $(MAKE) CFLAGS="$(CFLAGS)" +endif + + touch $@ + +build build-arch: $(objdir)/build-stamp +$(objdir)/build-stamp: $(objdir)-patched/build-stamp + ###################### building mutt ###################### + QUILT_PATCHES=$(QUILT_PATCH_DIR) quilt --quiltrc /dev/null pop mutt.org + + autoreconf --install --include=m4 + -mkdir $(objdir) + cd $(objdir) && \ + env CFLAGS="$(CFLAGS)" CPPFLAGS="$(CPPFLAGS)" \ + ../configure $(confflags) + + echo '#include "config-debian.h"' >>$(objdir)/config.h + + cd $(objdir) && $(MAKE) CFLAGS="$(CFLAGS)" + + touch $@ + +install: build + ###################### install ###################### + dh_testdir + dh_testroot + dh_clean -k + cd $(objdir) && $(MAKE) install DESTDIR=$(CURDIR)/debian/tmp + + cd debian/tmp/usr/share/doc && \ + rm -rf samples/iconv samples/ca-bundle.crt && \ + mv NEWS NEWS.old && \ + cp $(CURDIR)/UPDATING NEWS + + chmod +x debian/extra/lib/* + chmod +x debian/header.awk + debian/header.awk debian/patches/features/* \ + debian/patches/mutt-patched/* > debian/tmp/README.Patches + + ( sed -e '/## More settings/,$$d' $(objdir)/doc/Muttrc || exit 1 ; \ + cat debian/extra/rc/Muttrc.foot ) > debian/tmp/Muttrc + + ( echo "# GnuPG configuration"; \ + grep '^set' contrib/gpg.rc; \ + echo ) > debian/tmp/gpg.rc + +ifeq ($(BUILD_PATCHED),yes) + # temporarily call the binary mutt-patched so dh_strip gets the debug file name right + install -D $(objdir)-patched/mutt debian/mutt-patched/usr/bin/mutt-patched +endif + + # reportbug driver + dh_installdirs + install -m644 debian/bug/control $(CURDIR)/debian/mutt/usr/share/bug/mutt + install debian/bug/script $(CURDIR)/debian/mutt/usr/share/bug/mutt + +binary binary-arch: install + ###################### binary ###################### + dh_install + dh_installman + dh_installmenu + dh_installmime + dh_installdocs + dh_installexamples + dh_installchangelogs ChangeLog + -dh_lintian + + dh_strip --dbg-package=mutt-dbg + rm -rf $(CURDIR)/debian/mutt-dbg/usr/share/doc/mutt-dbg \ + $(CURDIR)/debian/mutt-patched/usr/share/doc/mutt-patched +ifeq ($(BUILD_PATCHED),yes) + mv debian/mutt-patched/usr/bin/mutt-patched debian/mutt-patched/usr/bin/mutt +endif + + dh_link + dh_compress --exclude usr/share/doc/mutt/README.Patches + dh_fixperms --exclude usr/bin/mutt_dotlock + dh_installdeb + dh_shlibdeps + dh_gencontrol + dh_md5sums + dh_builddeb + +build-indep binary-indep: + @echo "Nothing to do." + +clean: unpatch + ###################### clean ###################### + dh_testdir + dh_testroot + + # please dpkg-source + rm -f po/*.gmo + touch PATCHES + + # remove build trees + rm -rf $(objdir) $(objdir)-patched + + # remove autotool-generated files so they don't show up in the diff.gz + rm -f configure config.h.in + rm -f Makefile.in contrib/Makefile.in imap/Makefile.in doc/Makefile.in m4/Makefile.in + + # clean PATCHES hunks (blame quilt refresh) + for p in `grep -rl PATCHES debian/patches` ; do perl -wi debian/fix-PATCHES.pl $$p ; done + + dh_clean + +.PHONY: configure build build-arch build-indep clean install binary binary-arch binary-indep patch diff --git a/debian/update-autotools.sh b/debian/update-autotools.sh new file mode 100755 index 0000000..f161b02 --- /dev/null +++ b/debian/update-autotools.sh @@ -0,0 +1,38 @@ +#! /bin/sh + +set -e + +dh_testdir + +D=$(basename "$PWD") +PATCH_NAME=misc/autotools-update.diff + +debclean +quilt delete $PATCH_NAME || test $? -eq 1 +quilt push -aq +ln -sf /usr/share/misc/config.sub . +ln -sf /usr/share/misc/config.guess . + +cd .. +cp -al $D $D.orig + +cd $D +aclocal -I m4 +autoheader +( cd m4 && make -f Makefile.am.in ) +automake +autoconf +cd .. + +T=`mktemp $D/diff.XXXXXX` +diff -ru $D.orig $D >$T || test $? -eq 1 +patch -p1 -R -d $D <$T + +cd $D +quilt import -f -P $PATCH_NAME `basename $T` +quilt push +quilt refresh -p0 +cd .. + +rm -f $T +rm -rf $D.orig diff --git a/debian/watch b/debian/watch new file mode 100644 index 0000000..eb29a9a --- /dev/null +++ b/debian/watch @@ -0,0 +1,2 @@ +version=3 +opts=pasv ftp://ftp.mutt.org/mutt/devel/mutt-(.*).tar.gz