Script 'mail_helper' called by obssrc Hello community, here is the log from the commit of package maildir-utils for openSUSE:Factory checked in at 2021-08-18 08:55:57 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/maildir-utils (Old) and /work/SRC/openSUSE:Factory/.maildir-utils.new.1899 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "maildir-utils" Wed Aug 18 08:55:57 2021 rev:24 rq:912426 version:1.6.3 Changes: -------- --- /work/SRC/openSUSE:Factory/maildir-utils/maildir-utils.changes 2021-08-11 11:47:51.913699729 +0200 +++ /work/SRC/openSUSE:Factory/.maildir-utils.new.1899/maildir-utils.changes 2021-08-18 08:56:45.578915099 +0200 @@ -1,0 +2,13 @@ +Mon Aug 16 14:19:42 UTC 2021 - Michael Vetter <mvet...@suse.com> + +- Update to 1.6.3: + * A few more updates -- lazy indexing and thread-subjects, org + link config. + +------------------------------------------------------------------- +Mon Aug 16 14:18:19 UTC 2021 - Michael Vetter <mvet...@suse.com> + +- Update to 1.6.2: + * Some more fixes for problems found in the 1.6 series. + +------------------------------------------------------------------- @@ -4 +17,5 @@ -- Update to 1.6.1 +- Update to 1.6.1: + * Fixes for some problems found by early adopters. + NOTE: After upgrading, you need to call mu init, with your preferred + parameters before you can use mu/mu4e. This is because the underlying + database-schema has changed. Old: ---- mu-1.6.1.tar.xz New: ---- mu-1.6.3.tar.xz ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ maildir-utils.spec ++++++ --- /var/tmp/diff_new_pack.IFB7U3/_old 2021-08-18 08:56:46.006914595 +0200 +++ /var/tmp/diff_new_pack.IFB7U3/_new 2021-08-18 08:56:46.010914590 +0200 @@ -17,7 +17,7 @@ Name: maildir-utils -Version: 1.6.1 +Version: 1.6.3 Release: 0 Summary: Maildir indexer and searcher License: GPL-3.0-or-later ++++++ mu-1.6.1.tar.xz -> mu-1.6.3.tar.xz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mu-1.6.1/Makefile.in new/mu-1.6.3/Makefile.in --- old/mu-1.6.1/Makefile.in 2021-07-31 01:06:26.000000000 +0200 +++ new/mu-1.6.3/Makefile.in 2021-08-12 18:07:59.000000000 +0200 @@ -15,7 +15,7 @@ @SET_MAKE@ # aminclude_static.am generated automatically by Autoconf -# from AX_AM_MACROS_STATIC on Sat Jul 31 02:06:25 EEST 2021 +# from AX_AM_MACROS_STATIC on Thu Aug 12 19:07:58 EEST 2021 VPATH = @srcdir@ am__is_gnu_make = { \ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mu-1.6.1/aminclude_static.am new/mu-1.6.3/aminclude_static.am --- old/mu-1.6.1/aminclude_static.am 2021-07-31 01:06:25.000000000 +0200 +++ new/mu-1.6.3/aminclude_static.am 2021-08-12 18:07:58.000000000 +0200 @@ -1,6 +1,6 @@ # aminclude_static.am generated automatically by Autoconf -# from AX_AM_MACROS_STATIC on Sat Jul 31 02:06:25 EEST 2021 +# from AX_AM_MACROS_STATIC on Thu Aug 12 19:07:58 EEST 2021 # Code coverage diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mu-1.6.1/configure new/mu-1.6.3/configure --- old/mu-1.6.1/configure 2021-07-31 01:06:24.000000000 +0200 +++ new/mu-1.6.3/configure 2021-08-12 18:07:57.000000000 +0200 @@ -1,6 +1,6 @@ #! /bin/sh # Guess values for system-dependent variables and create Makefiles. -# Generated by GNU Autoconf 2.69 for mu 1.6.1. +# Generated by GNU Autoconf 2.69 for mu 1.6.3. # # Report bugs to <https://github.com/djcb/mu/issues>. # @@ -11,7 +11,7 @@ # This configure script is free software; the Free Software Foundation # gives unlimited permission to copy, distribute and modify it. # -# Copyright (C) 2008-2020 Dirk-Jan C. Binnema +# Copyright (C) 2008-2021 Dirk-Jan C. Binnema ## -------------------- ## ## M4sh Initialization. ## ## -------------------- ## @@ -592,8 +592,8 @@ # Identity of this package. PACKAGE_NAME='mu' PACKAGE_TARNAME='mu' -PACKAGE_VERSION='1.6.1' -PACKAGE_STRING='mu 1.6.1' +PACKAGE_VERSION='1.6.3' +PACKAGE_STRING='mu 1.6.3' PACKAGE_BUGREPORT='https://github.com/djcb/mu/issues' PACKAGE_URL='' @@ -1444,7 +1444,7 @@ # Omit some internal or obsolete options to make the list less imposing. # This message is too long to be a string in the A/UX 3.1 sh. cat <<_ACEOF -\`configure' configures mu 1.6.1 to adapt to many kinds of systems. +\`configure' configures mu 1.6.3 to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... @@ -1515,7 +1515,7 @@ if test -n "$ac_init_help"; then case $ac_init_help in - short | recursive ) echo "Configuration of mu 1.6.1:";; + short | recursive ) echo "Configuration of mu 1.6.3:";; esac cat <<\_ACEOF @@ -1674,14 +1674,14 @@ test -n "$ac_init_help" && exit $ac_status if $ac_init_version; then cat <<\_ACEOF -mu configure 1.6.1 +mu configure 1.6.3 generated by GNU Autoconf 2.69 Copyright (C) 2012 Free Software Foundation, Inc. This configure script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it. -Copyright (C) 2008-2020 Dirk-Jan C. Binnema +Copyright (C) 2008-2021 Dirk-Jan C. Binnema _ACEOF exit fi @@ -2223,7 +2223,7 @@ This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. -It was created by mu $as_me 1.6.1, which was +It was created by mu $as_me 1.6.3, which was generated by GNU Autoconf 2.69. Invocation command line was $ $0 $@ @@ -3094,7 +3094,7 @@ # Define the identity of the package. PACKAGE='mu' - VERSION='1.6.1' + VERSION='1.6.3' cat >>confdefs.h <<_ACEOF @@ -22622,7 +22622,7 @@ # report actual input values of CONFIG_FILES etc. instead of their # values after options handling. ac_log=" -This file was extended by mu $as_me 1.6.1, which was +This file was extended by mu $as_me 1.6.3, which was generated by GNU Autoconf 2.69. Invocation command line was CONFIG_FILES = $CONFIG_FILES @@ -22688,7 +22688,7 @@ cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`" ac_cs_version="\\ -mu config.status 1.6.1 +mu config.status 1.6.3 configured by $0, generated by GNU Autoconf 2.69, with options \\"\$ac_cs_config\\" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mu-1.6.1/configure.ac new/mu-1.6.3/configure.ac --- old/mu-1.6.1/configure.ac 2021-07-31 00:57:23.000000000 +0200 +++ new/mu-1.6.3/configure.ac 2021-08-12 18:07:03.000000000 +0200 @@ -15,8 +15,8 @@ ## Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. AC_PREREQ([2.68]) -AC_INIT([mu],[1.6.1],[https://github.com/djcb/mu/issues],[mu]) -AC_COPYRIGHT([Copyright (C) 2008-2020 Dirk-Jan C. Binnema]) +AC_INIT([mu],[1.6.3],[https://github.com/djcb/mu/issues],[mu]) +AC_COPYRIGHT([Copyright (C) 2008-2021 Dirk-Jan C. Binnema]) AC_CONFIG_HEADERS([config.h]) AC_CONFIG_SRCDIR([mu/mu.cc]) # libtoolize wants to put some stuff in here; if you have an old diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mu-1.6.1/guile/stamp-vti new/mu-1.6.3/guile/stamp-vti --- old/mu-1.6.1/guile/stamp-vti 2021-07-31 01:06:33.000000000 +0200 +++ new/mu-1.6.3/guile/stamp-vti 2021-08-12 18:08:05.000000000 +0200 @@ -1,4 +1,4 @@ @set UPDATED 17 March 2021 @set UPDATED-MONTH March 2021 -@set EDITION 1.6.1 -@set VERSION 1.6.1 +@set EDITION 1.6.3 +@set VERSION 1.6.3 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mu-1.6.1/guile/version.texi new/mu-1.6.3/guile/version.texi --- old/mu-1.6.1/guile/version.texi 2021-07-29 08:56:24.000000000 +0200 +++ new/mu-1.6.3/guile/version.texi 2021-08-12 18:08:05.000000000 +0200 @@ -1,4 +1,4 @@ @set UPDATED 17 March 2021 @set UPDATED-MONTH March 2021 -@set EDITION 1.6.1 -@set VERSION 1.6.1 +@set EDITION 1.6.3 +@set VERSION 1.6.3 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mu-1.6.1/lib/Makefile.in new/mu-1.6.3/lib/Makefile.in --- old/mu-1.6.1/lib/Makefile.in 2021-07-31 01:06:26.000000000 +0200 +++ new/mu-1.6.3/lib/Makefile.in 2021-08-12 18:07:59.000000000 +0200 @@ -15,7 +15,7 @@ @SET_MAKE@ # aminclude_static.am generated automatically by Autoconf -# from AX_AM_MACROS_STATIC on Sat Jul 31 02:06:25 EEST 2021 +# from AX_AM_MACROS_STATIC on Thu Aug 12 19:07:58 EEST 2021 VPATH = @srcdir@ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mu-1.6.1/lib/index/Makefile.in new/mu-1.6.3/lib/index/Makefile.in --- old/mu-1.6.1/lib/index/Makefile.in 2021-07-31 01:06:26.000000000 +0200 +++ new/mu-1.6.3/lib/index/Makefile.in 2021-08-12 18:07:59.000000000 +0200 @@ -15,7 +15,7 @@ @SET_MAKE@ # aminclude_static.am generated automatically by Autoconf -# from AX_AM_MACROS_STATIC on Sat Jul 31 02:06:25 EEST 2021 +# from AX_AM_MACROS_STATIC on Thu Aug 12 19:07:58 EEST 2021 VPATH = @srcdir@ am__is_gnu_make = { \ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mu-1.6.1/lib/index/mu-indexer.cc new/mu-1.6.3/lib/index/mu-indexer.cc --- old/mu-1.6.1/lib/index/mu-indexer.cc 2021-07-29 08:53:38.000000000 +0200 +++ new/mu-1.6.3/lib/index/mu-indexer.cc 2021-08-12 16:49:21.000000000 +0200 @@ -115,12 +115,16 @@ Scanner::HandleType htype) { switch (htype) { - case Scanner::HandleType::EnterDir: { + case Scanner::HandleType::EnterDir: + case Scanner::HandleType::EnterNewCur: { // in lazy-mode, we ignore this dir if its dirstamp suggest it // is up-to-date (this is _not_ always true; hence we call it - // lazy-mode) + // lazy-mode); only for actual message dirs, since the dir + // tstamps may not bubble up. dirstamp_ = store_.dirstamp(fullpath); - if (conf_.lazy_check && dirstamp_ == statbuf->st_mtime) { + if (conf_.lazy_check && + dirstamp_ == statbuf->st_mtime && + htype == Scanner::HandleType::EnterNewCur) { g_debug("skip %s (seems up-to-date)", fullpath.c_str()); return false; } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mu-1.6.1/lib/index/mu-scanner.cc new/mu-1.6.3/lib/index/mu-scanner.cc --- old/mu-1.6.1/lib/index/mu-scanner.cc 2021-07-28 23:02:30.000000000 +0200 +++ new/mu-1.6.3/lib/index/mu-scanner.cc 2021-08-12 16:47:23.000000000 +0200 @@ -96,14 +96,15 @@ } if (S_ISDIR(statbuf.st_mode)) { - - const auto res = handler_(fullpath, &statbuf, Scanner::HandleType::EnterDir); - if (!res) { - //g_debug ("skipping dir %s", fullpath.c_str()); + const auto new_cur = is_new_cur(dentry->d_name); + const auto htype = new_cur ? + Scanner::HandleType::EnterNewCur : + Scanner::HandleType::EnterDir; + const auto res = handler_(fullpath, &statbuf, htype); + if (!res) return true; // skip - } - process_dir (fullpath, is_new_cur(dentry->d_name)); + process_dir (fullpath, new_cur); return handler_(fullpath, &statbuf, Scanner::HandleType::LeaveDir); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mu-1.6.1/lib/index/mu-scanner.hh new/mu-1.6.3/lib/index/mu-scanner.hh --- old/mu-1.6.1/lib/index/mu-scanner.hh 2021-02-11 13:29:17.000000000 +0100 +++ new/mu-1.6.3/lib/index/mu-scanner.hh 2021-08-12 16:46:22.000000000 +0200 @@ -42,7 +42,12 @@ /// class Scanner { public: - enum struct HandleType { File, EnterDir, LeaveDir }; + enum struct HandleType { + File, + EnterNewCur, /* cur/ or new/ */ + EnterDir, /* some other directory */ + LeaveDir + }; /// Prototype for a handler function using Handler = std::function<bool(const std::string& fullpath, diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mu-1.6.1/lib/mu-query-threads.cc new/mu-1.6.3/lib/mu-query-threads.cc --- old/mu-1.6.1/lib/mu-query-threads.cc 2021-07-28 22:56:29.000000000 +0200 +++ new/mu-1.6.3/lib/mu-query-threads.cc 2021-08-11 21:24:12.000000000 +0200 @@ -366,6 +366,22 @@ return str; } +static bool // compare subjects, ignore anything before the last ':<space>*' +subject_matches (const std::string& sub1, const std::string& sub2) +{ + auto search_str =[](const std::string&s) -> const char* { + const auto pos = s.find_last_of(':'); + if (pos == std::string::npos) + return s.c_str(); + else { + const auto pos2 = s.find_first_not_of(' ', pos + 1); + return s.c_str() + (pos2 == std::string::npos ? pos : pos2); + } + }; + + //g_debug ("'%s' '%s'", search_str(sub1), search_str(sub2)); + return g_strcmp0(search_str(sub1), search_str(sub2)) == 0; +} static bool update_container (Container& container, bool descending, @@ -385,7 +401,6 @@ return false; // nothing else to do. auto& qmatch(*container.query_match); - if (!container.parent) qmatch.flags |= QueryMatch::Flags::Root; else if (!container.parent->query_match) @@ -394,21 +409,10 @@ if (!container.children.empty()) qmatch.flags |= QueryMatch::Flags::HasChild; - // see whether this message has the has the thread - // subject, ie.. the first message in this thread with the - // given subject. - if (qmatch.has_flag(QueryMatch::Flags::Root) || - //qmatch.has_flag(QueryMatch::Flags::Orphan) || - prev_subject.empty() || - (qmatch.subject.find(prev_subject) > 5)) + if (qmatch.has_flag(QueryMatch::Flags::Root) || prev_subject.empty() || + !subject_matches(prev_subject, qmatch.subject)) qmatch.flags |= QueryMatch::Flags::ThreadSubject; - // g_debug ("%c%c: '%s' vs '%s'", - // any_of(qmatch.flags & QueryMatch::Flags::Root) ? 'r' : 'c', - // any_of(qmatch.flags & QueryMatch::Flags::ThreadSubject) ? 'y' : 'n', - // qmatch.subject.c_str(), - // prev_subject.c_str()); - if (descending && container.parent) { // trick xapian by giving it "inverse" sorting key so our // ascending-date sorted threads stay in that order @@ -428,20 +432,19 @@ static void update_containers (Containers& children, bool descending, ThreadPath& tpath, - size_t seg_size) + size_t seg_size, std::string& prev_subject) { size_t idx{0}; - std::string last_subject; for (auto&& c: children) { tpath.emplace_back(idx++); - if (c->query_match) { - update_container(*c, descending, tpath, seg_size, - last_subject); - last_subject = c->query_match->subject; + update_container(*c, descending, tpath, seg_size, + prev_subject); + prev_subject = c->query_match->subject; } - update_containers(c->children, descending, tpath, seg_size); + update_containers(c->children, descending, tpath, seg_size, + prev_subject); tpath.pop_back(); } } @@ -457,9 +460,12 @@ size_t idx{0}; for (auto&& c: root_vec) { - tpath.emplace_back(idx++); - update_container(*c, descending, tpath, seg_size); - update_containers(c->children, descending, tpath, seg_size); + tpath.emplace_back(idx++); + std::string prev_subject; + if (update_container(*c, descending, tpath, seg_size)) + prev_subject = c->query_match->subject; + update_containers(c->children, descending, tpath, seg_size, + prev_subject); tpath.pop_back(); } } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mu-1.6.1/lib/mu-server.cc new/mu-1.6.3/lib/mu-server.cc --- old/mu-1.6.1/lib/mu-server.cc 2021-07-31 00:13:44.000000000 +0200 +++ new/mu-1.6.3/lib/mu-server.cc 2021-08-04 22:51:08.000000000 +0200 @@ -20,6 +20,7 @@ #include "config.h" #include "mu-msg-fields.h" +#include "mu-msg.hh" #include "mu-server.hh" #include <iostream> @@ -106,7 +107,6 @@ void sent_handler (const Parameters& params); void view_handler (const Parameters& params); - private: // helpers Sexp build_message_sexp(MuMsg *msg, unsigned docid, @@ -119,6 +119,9 @@ const std::string& maildirarg, MuFlags flags, bool new_name, bool no_view); + bool maybe_mark_as_read (MuMsg *msg, Store::Id docid); + bool maybe_mark_msgid_as_read (const Mu::Query& query, const char* msgid); + Store& store_; Server::Output output_; const CommandMap command_map_; @@ -1127,13 +1130,12 @@ output_sexp (std::move(lst)); } -static bool -maybe_mark_as_read (Mu::Store& store, MuMsg *msg, Store::Id docid) + +bool +Server::Private::maybe_mark_as_read (MuMsg *msg, Store::Id docid) { if (!msg) throw Error{Error::Code::Store, "missing message"}; - if (docid == Store::InvalidId) - throw Error{Error::Code::Store, "invalid docid"}; const auto oldflags{mu_msg_get_flags (msg)}; const auto newflags{get_flags (mu_msg_get_path(msg), "+S-u-N")}; @@ -1149,12 +1151,41 @@ &gerr)) throw Error{Error::Code::File, &gerr, "failed to move message"}; - /* after mu_msg_move_to_maildir, path will be the *new* path, and flags - * and maildir fields will be updated as wel */ - if (!store.update_message (msg, docid)) + /* after mu_msg_move_to_maildir, path will be the *new* path, and flags and maildir fields + * will be updated as wel */ + if (!store().update_message (msg, docid)) throw Error{Error::Code::Store, "failed to store updated message"}; + /* send an update */ + Sexp::List update; + update.add_prop(":update", build_message_sexp(msg, docid, {}, MU_MSG_OPTION_NONE)); + output_sexp(Sexp::make_list(std::move(update))); + g_debug ("marked message %d as read => %s", docid, mu_msg_get_path(msg)); + + return true; +} + + +bool +Server::Private::maybe_mark_msgid_as_read (const Mu::Query& query, const char* msgid) +{ + if (!msgid) + return false; // nothing to do. + + const auto docids{docids_for_msgid(query, std::string{msgid})}; + for (auto&& docid: docids) { + MuMsg *msg = store().find_message(docid); + if (!msg) + continue; + try { + maybe_mark_as_read(msg, docid); + } catch (...) { + mu_msg_unref(msg); + throw; + } + } + return true; } @@ -1168,25 +1199,29 @@ GError *gerr{}; MuMsg *msg{}; - if (!path.empty()) + if (!path.empty()) { /* only use for old view (embedded msgs) */ + docid = Store::InvalidId; msg = mu_msg_new_from_file (path.c_str(), NULL, &gerr); - else { + } else { docid = determine_docids(query(), params).at(0); msg = store().find_message(docid); } if (!msg) throw Error{Error::Code::Store, &gerr, - "failed to find message for view"}; + "failed to find message for view"}; - if (mark_as_read) - maybe_mark_as_read (store(), msg, docid); + if (mark_as_read) { + // maybe mark the main message as read. + maybe_mark_as_read(msg, docid); + /* maybe mark _all_ messsage with same message-id as read */ + maybe_mark_msgid_as_read(query(), mu_msg_get_msgid(msg)); + } Sexp::List seq; - seq.add_prop(":view", build_message_sexp(msg, docid, {}, message_options(params))); - + seq.add_prop(":view", build_message_sexp( + msg, docid, {}, message_options(params))); mu_msg_unref(msg); - output_sexp (std::move(seq)); } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mu-1.6.1/lib/mu-store.cc new/mu-1.6.3/lib/mu-store.cc --- old/mu-1.6.1/lib/mu-store.cc 2021-07-31 00:46:24.000000000 +0200 +++ new/mu-1.6.3/lib/mu-store.cc 2021-07-31 16:54:33.000000000 +0200 @@ -291,7 +291,6 @@ { if (metadata().schema_version != ExpectedSchemaVersion) throw Mu::Error(Error::Code::SchemaMismatch, - "expected schema-version %s, but got %s", "expected schema-version %s, but got %s; " "please use 'mu init'", ExpectedSchemaVersion, diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mu-1.6.1/lib/utils/Makefile.in new/mu-1.6.3/lib/utils/Makefile.in --- old/mu-1.6.1/lib/utils/Makefile.in 2021-07-31 01:06:26.000000000 +0200 +++ new/mu-1.6.3/lib/utils/Makefile.in 2021-08-12 18:07:59.000000000 +0200 @@ -15,7 +15,7 @@ @SET_MAKE@ # aminclude_static.am generated automatically by Autoconf -# from AX_AM_MACROS_STATIC on Sat Jul 31 02:06:25 EEST 2021 +# from AX_AM_MACROS_STATIC on Thu Aug 12 19:07:58 EEST 2021 VPATH = @srcdir@ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mu-1.6.1/lib/utils/mu-util.c new/mu-1.6.3/lib/utils/mu-util.c --- old/mu-1.6.1/lib/utils/mu-util.c 2021-07-28 23:02:30.000000000 +0200 +++ new/mu-1.6.3/lib/utils/mu-util.c 2021-08-08 14:15:36.000000000 +0200 @@ -1,7 +1,5 @@ -/* -*-mode: c; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*-*/ /* -** -** Copyright (C) 2008-2016 Dirk-Jan C. Binnema <d...@djcbsoftware.nl> +** Copyright (C) 2008-2021 Dirk-Jan C. Binnema <d...@djcbsoftware.nl> ** ** 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 @@ -19,13 +17,11 @@ ** */ -#if HAVE_CONFIG_H #include <config.h> -#endif /*HAVE_CONFIG_H*/ -#ifndef _XOPEN_SOURCE -#define _XOPEN_SOURCE (500) -#endif /*_XOPEN_SOURCE*/ +#ifndef _GNU_SOURCE +#define _GNU_SOURCE +#endif /*_GNU_SOURCE*/ #include "mu-util.h" #ifdef HAVE_WORDEXP_H diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mu-1.6.1/mu/Makefile.in new/mu-1.6.3/mu/Makefile.in --- old/mu-1.6.1/mu/Makefile.in 2021-07-31 01:06:26.000000000 +0200 +++ new/mu-1.6.3/mu/Makefile.in 2021-08-12 18:07:59.000000000 +0200 @@ -15,7 +15,7 @@ @SET_MAKE@ # aminclude_static.am generated automatically by Autoconf -# from AX_AM_MACROS_STATIC on Sat Jul 31 02:06:25 EEST 2021 +# from AX_AM_MACROS_STATIC on Thu Aug 12 19:07:58 EEST 2021 VPATH = @srcdir@ am__is_gnu_make = { \ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mu-1.6.1/mu/mu.cc new/mu-1.6.3/mu/mu.cc --- old/mu-1.6.1/mu/mu.cc 2021-07-28 22:56:29.000000000 +0200 +++ new/mu-1.6.3/mu/mu.cc 2021-08-03 11:46:33.000000000 +0200 @@ -1,5 +1,5 @@ /* -** Copyright (C) 2008-2020 Dirk-Jan C. Binnema <d...@djcbsoftware.nl> +** Copyright (C) 2008-2021 Dirk-Jan C. Binnema <d...@djcbsoftware.nl> ** ** 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 @@ -33,16 +33,16 @@ static void show_version (void) { - const char* blurb = - "mu (mail indexer/searcher) version " VERSION "\n" - "Copyright (C) 2008-2020 Dirk-Jan C. Binnema\n" - "License GPLv3+: GNU GPL version 3 or later " - "<http://gnu.org/licenses/gpl.html>.\n" - "This is free software: you are free to change " - "and redistribute it.\n" - "There is NO WARRANTY, to the extent permitted by law."; + const char* blurb = + "mu (mail indexer/searcher) version " VERSION "\n" + "Copyright (C) 2008-2021 Dirk-Jan C. Binnema\n" + "License GPLv3+: GNU GPL version 3 or later " + "<http://gnu.org/licenses/gpl.html>.\n" + "This is free software: you are free to change " + "and redistribute it.\n" + "There is NO WARRANTY, to the extent permitted by law."; - g_print ("%s\n", blurb); + g_print ("%s\n", blurb); } @@ -50,12 +50,12 @@ handle_error (MuConfig *conf, MuError merr, GError **err) { if (!(err && *err)) - return; + return; using Color = MaybeAnsi::Color; MaybeAnsi col{conf ? !conf->nocolor : false}; - if (*err) + if (*err) std::cerr << col.fg(Color::Red) << "error" << col.reset() << ": " << col.fg(Color::BrightYellow) << ((*err) ? (*err)->message : "something when wrong") @@ -63,35 +63,35 @@ std::cerr << col.fg(Color::Green); - switch ((*err)->code) { - case MU_ERROR_XAPIAN_CANNOT_GET_WRITELOCK: - std::cerr << "Maybe mu is already running?\n"; - break; + switch ((*err)->code) { + case MU_ERROR_XAPIAN_CANNOT_GET_WRITELOCK: + std::cerr << "Maybe mu is already running?\n"; + break; case MU_ERROR_XAPIAN_NEEDS_REINDEX: std::cerr << "Database needs (re)indexing.\n" << "try 'mu index' " << "(see mu-index(1) for details)\n"; - return; - case MU_ERROR_IN_PARAMETERS: - if (conf && mu_config_cmd_is_valid(conf->cmd)) - mu_config_show_help (conf->cmd); - break; - case MU_ERROR_SCRIPT_NOT_FOUND: - std::cerr << "See the mu manpage for commands, or " + return; + case MU_ERROR_IN_PARAMETERS: + if (conf && mu_config_cmd_is_valid(conf->cmd)) + mu_config_show_help (conf->cmd); + break; + case MU_ERROR_SCRIPT_NOT_FOUND: + std::cerr << "See the mu manpage for commands, or " << "'mu script' for the scripts\n"; - break; - case MU_ERROR_XAPIAN_CANNOT_OPEN: - std::cerr << "Please (re)initialize mu with 'mu init' " + break; + case MU_ERROR_XAPIAN_CANNOT_OPEN: + std::cerr << "Please (re)initialize mu with 'mu init' " << "see mu-init(1) for details\n"; - return; - case MU_ERROR_XAPIAN_SCHEMA_MISMATCH: - std::cerr << "Please (re)initialize mu with 'mu init' " + return; + case MU_ERROR_XAPIAN_SCHEMA_MISMATCH: + std::cerr << "Please (re)initialize mu with 'mu init' " << "see mu-init(1) for details\n"; - return; - default: - break; /* nothing to do */ - } + return; + default: + break; /* nothing to do */ + } std::cerr << col.reset(); } @@ -100,41 +100,41 @@ int main (int argc, char *argv[]) { - GError *err; - MuError rv; - MuConfig *conf; - - setlocale (LC_ALL, ""); - - err = NULL; - rv = MU_OK; - - conf = mu_config_init (&argc, &argv, &err); - if (!conf) { - rv = err ? (MuError)err->code : MU_ERROR; - goto cleanup; - } else if (conf->version) { - show_version (); - goto cleanup; - } - - /* nothing to do */ - if (conf->cmd == MU_CONFIG_CMD_NONE) - return 0; - - if (!mu_runtime_init (conf->muhome, PACKAGE_NAME, conf->debug)) { - mu_config_uninit (conf); - return 1; - } + GError *err; + MuError rv; + MuConfig *conf; + + setlocale (LC_ALL, ""); + + err = NULL; + rv = MU_OK; + + conf = mu_config_init (&argc, &argv, &err); + if (!conf) { + rv = err ? (MuError)err->code : MU_ERROR; + goto cleanup; + } else if (conf->version) { + show_version (); + goto cleanup; + } + + /* nothing to do */ + if (conf->cmd == MU_CONFIG_CMD_NONE) + return 0; + + if (!mu_runtime_init (conf->muhome, PACKAGE_NAME, conf->debug)) { + mu_config_uninit (conf); + return 1; + } - rv = mu_cmd_execute (conf, &err); + rv = mu_cmd_execute (conf, &err); cleanup: handle_error (conf, rv, &err); - g_clear_error (&err); + g_clear_error (&err); - mu_config_uninit (conf); - mu_runtime_uninit (); + mu_config_uninit (conf); + mu_runtime_uninit (); - return rv; + return rv; } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mu-1.6.1/mu4e/mu4e-headers.el new/mu-1.6.3/mu4e/mu4e-headers.el --- old/mu-1.6.1/mu4e/mu4e-headers.el 2021-07-30 13:25:42.000000000 +0200 +++ new/mu-1.6.3/mu4e/mu4e-headers.el 2021-08-11 06:28:32.000000000 +0200 @@ -274,7 +274,7 @@ (defvar mu4e-headers-full-label '("F" . "???") "Non-fancy and fancy labels for full search in the mode-line.") (defvar mu4e-headers-related-label '("R" . "????") - "Non-fancy and fancy labels for inclued-related search in the mode-line.") + "Non-fancy and fancy labels for include-related search in the mode-line.") ;;;; Various diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mu-1.6.1/mu4e/mu4e-message.el new/mu-1.6.3/mu4e/mu4e-message.el --- old/mu-1.6.1/mu4e/mu4e-message.el 2021-05-31 20:25:56.000000000 +0200 +++ new/mu-1.6.3/mu4e/mu4e-message.el 2021-08-01 09:40:29.000000000 +0200 @@ -245,8 +245,7 @@ (with-temp-buffer (insert body) (goto-char (point-min)) - (while (re-search-forward "[ -????]" nil t) + (while (re-search-forward "\015????]" nil t) (replace-match (cond ((string= (match-string 0) "??") "'") diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mu-1.6.1/mu4e/mu4e-meta.el new/mu-1.6.3/mu4e/mu4e-meta.el --- old/mu-1.6.1/mu4e/mu4e-meta.el 2021-07-31 01:06:31.000000000 +0200 +++ new/mu-1.6.3/mu4e/mu4e-meta.el 2021-08-12 18:08:04.000000000 +0200 @@ -1,5 +1,5 @@ ;; auto-generated -(defconst mu4e-mu-version "1.6.1" +(defconst mu4e-mu-version "1.6.3" "Required mu binary version; mu4e's version must agree with this.") (defconst mu4e-builddir "/home/djcb/Sources/mu" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mu-1.6.1/mu4e/mu4e-org.el new/mu-1.6.3/mu4e/mu4e-org.el --- old/mu-1.6.1/mu4e/mu4e-org.el 2021-05-31 20:25:56.000000000 +0200 +++ new/mu-1.6.3/mu4e/mu4e-org.el 2021-08-10 21:10:39.000000000 +0200 @@ -36,6 +36,25 @@ :group 'mu4e :group 'org) +(defcustom mu4e-org-link-desc-func + (lambda (msg) (or (plist-get msg :subject) "No subject")) + "Function that takes a msg and returns a description. +This can be used in org capture templates and storing links. + +Example usage: + + (defun my-link-descr (msg) + (let ((subject (or (plist-get msg :subject) + \"No subject\")) + (date (or (format-time-string mu4e-headers-date-format + (mu4e-msg-field msg :date)) + \"No date\"))) + (concat subject \" \" date))) + + (setq org-mu4e-link-desc-func 'my-link-descr)" + :type '(function) + :group 'mu4e-org) + (defvar mu4e-org-link-query-in-headers-mode nil "Prefer linking to the query rather than to the message. If non-nil, `org-store-link' in `mu4e-headers-mode' links to the @@ -79,7 +98,7 @@ :to (when to (mu4e~org-address to)) :link (concat "mu4e:msgid:" msgid) - :description (or (plist-get msg :subject) "No subject")))) + :description (funcall mu4e-org-link-desc-func msg)))) (defun mu4e-org-store-link () "Store a link to a mu4e message or query. diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mu-1.6.1/mu4e/mu4e-utils.el new/mu-1.6.3/mu4e/mu4e-utils.el --- old/mu-1.6.1/mu4e/mu4e-utils.el 2021-07-31 00:51:32.000000000 +0200 +++ new/mu-1.6.3/mu4e/mu4e-utils.el 2021-08-12 17:02:41.000000000 +0200 @@ -644,7 +644,8 @@ "Indexing... processed %d, updated %d" processed updated) (progn (mu4e-index-message - "Indexing completed; processed %d, updated %d, cleaned-up %d" + "%s completed; processed %d, updated %d, cleaned-up %d" + (if mu4e-index-lazy-check "Lazy indexing" "Indexing") processed updated cleaned-up) ;; call the updated hook if anything changed. (unless (zerop (+ updated cleaned-up)) @@ -945,7 +946,17 @@ (defun mu4e-update-index () "Update the mu4e index." (interactive) - (mu4e~proc-index mu4e-index-cleanup mu4e-index-lazy-check)) + (mu4e~proc-index mu4e-index-cleanup mu4e-index-lazy-check)) + +(defun mu4e-update-index-nonlazy () + "Update the mu4e index non-lazily. +This is just a convenience wrapper for indexing the non-lazy way +if you otherwise want to use `mu4e-index-lazy-check'." + (interactive) + (let ((mu4e-index-cleanup t) (mu4e-index-lazy-check nil)) + (mu4e-update-index))) + + (defvar mu4e~update-buffer nil "Internal, store the buffer of the update process when diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mu-1.6.1/mu4e/mu4e-vars.el new/mu-1.6.3/mu4e/mu4e-vars.el --- old/mu-1.6.1/mu4e/mu4e-vars.el 2021-07-17 14:01:23.000000000 +0200 +++ new/mu-1.6.3/mu4e/mu4e-vars.el 2021-08-12 17:02:23.000000000 +0200 @@ -129,10 +129,13 @@ (defcustom mu4e-index-lazy-check nil "Whether to only use a 'lazy check' during reindexing. This influences how we decide whether a message -needs (re)indexing or not. When this is set to t, mu only uses -the directory timestamps to decide whether it needs to check the -messages beneath it, which would miss messages that are modified -outside mu. On the other hand, it's significantly faster." +needs (re)indexing or not. + +When this is set to non-nil, mu only uses the directory +timestamps to decide whether it needs to check the messages +beneath it. This makes indexing much faster, but might miss some +changes. For this, you might want to occasionally call +`mu4e-update-index-nonlazy'." :type 'boolean :group 'mu4e :safe 'booleanp) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mu-1.6.1/mu4e/mu4e-view-common.el new/mu-1.6.3/mu4e/mu4e-view-common.el --- old/mu-1.6.1/mu4e/mu4e-view-common.el 2021-07-24 11:12:51.000000000 +0200 +++ new/mu-1.6.3/mu4e/mu4e-view-common.el 2021-08-08 17:07:23.000000000 +0200 @@ -69,7 +69,7 @@ (defcustom mu4e-view-actions '( ("capture message" . mu4e-action-capture-message) - ("view as pdf" . mu4e-action-view-as-pdf) + ("view in browser" . mu4e-action-view-in-browser) ("show this thread" . mu4e-action-show-thread)) "List of actions to perform on messages in view mode. The actions are cons-cells of the form: diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mu-1.6.1/mu4e/mu4e-view-gnus.el new/mu-1.6.3/mu4e/mu4e-view-gnus.el --- old/mu-1.6.1/mu4e/mu4e-view-gnus.el 2021-06-03 23:54:28.000000000 +0200 +++ new/mu-1.6.3/mu4e/mu4e-view-gnus.el 2021-08-12 16:58:53.000000000 +0200 @@ -73,8 +73,10 @@ (buffer-substring-no-properties (point-min) (point-max)))) (defun mu4e-action-view-in-browser (msg) - "Show current message MSG in browser, if it contains an html body." -;; (with-temp-buffer + "Show current MSG in browser if it includes an HTML-part. +The variables `browse-url-browser-function', +`browse-url-handlers', and `browse-url-default-handlers' +determine which browser function to use." (with-temp-buffer (insert-file-contents-literally (mu4e-message-field msg :path) nil nil nil t) @@ -422,6 +424,13 @@ (advice-add 'gnus-set-mode-line :around #'mu4e~view-nop) (advice-add 'gnus-button-reply :around #'mu4e~view-button-reply) (advice-add 'gnus-msg-mail :around #'mu4e~view-msg-mail) + + ;; advice gnus-block-private-groups to always return "." + ;; so that by default we block images. + (advice-add 'gnus-block-private-groups :around + (lambda(func &rest args) + (if (mu4e~view-mode-p) + "." (apply func args)))) (mu4e~view-mode-body)) ;;; Massaging the message view diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mu-1.6.1/mu4e/mu4e.info new/mu-1.6.3/mu4e/mu4e.info --- old/mu-1.6.1/mu4e/mu4e.info 2021-07-29 08:56:53.000000000 +0200 +++ new/mu-1.6.3/mu4e/mu4e.info 2021-08-12 18:08:07.000000000 +0200 @@ -19,7 +19,7 @@ mu4e manual *********** -Welcome to mu4e 1.6.1. +Welcome to mu4e 1.6.3. mu4e (mu-for-emacs) is an e-mail client for GNU Emacs version 24.4 or higher, built on top of the mu(1) e-mail search engine. mu4e is @@ -622,8 +622,12 @@ mu4e-index-lazy-check t) ;; don't consider up-to-date dirs In many cases, the mentioned thoroughness might not be needed, and -these settings give a very significant speed-up. Note that you can of -course occasionally run a thorough indexing round. +these settings give a very significant speed-up. If it does not work +for you (e.g., mu4e fails to find some new messages), simply leave at +the default. + + Note that you can occasionally run a thorough indexing round using +???mu4e-update-index-nonlazy???. For further details, please refer to the mu-index manpage; in particular, see .noindex and .noupdate which can help reducing the @@ -1400,10 +1404,16 @@ external images in HTML are not retrieved from external URLs because they can be used to track you. + Apart from that, you can also control whether to load remote images; +since loading remote images is often used for privacy violations, by +default this is not allowed. + You can specify what URLs to block by setting ???gnus-blocked-images??? -to a regular exporession or to a function that will receive the message -as an argument. For example, to enable images in Github notifications, -do the following: +to a regular expression or to a function that will receive a single +parameter which is not meaningful for mu4e. + + For example, to enable images in Github notifications, you could use +the following: (setq gnus-blocked-images (lambda(&optional _ignore) @@ -1411,6 +1421,11 @@ (mu4e-message-at-point) :from "notificati...@github.com") nil "."))) + ???mu4e??? inherits the default gnus-blocked-images from Gnus and ensures +that it works with mu4e too. However, mu4e is not Gnus, so if you have +Gnus-specific settings for gnus-blocked-images, you should verify that +they have the desired effect in ???mu4e??? as well. + File: mu4e.info, Node: MSGV Custom headers, Next: MSGV Actions, Prev: MSGV Rich-text and images, Up: Message view @@ -3578,7 +3593,8 @@ *note Message view::. When you are in *note Headers view::, ???M-x org-store-link??? links to the _query_ if ???mu4e-org-link-query-in-headers-mode??? is non-???nil???, and to the -particular message otherwise (which is the default). +particular message otherwise (which is the default). You can customize +the link description using ???mu4e-org-link-desc-func???. You can insert this link later with ???M-x org-insert-link???. From org-mode, you can go to the query or message the link points to with @@ -5676,144 +5692,144 @@ Node: Folders18856 Ref: Folders-Footnote-119659 Node: Retrieval and indexing19938 -Node: Sending mail24191 -Node: Running mu4e26414 -Node: Main view27461 -Node: MV Overview27990 -Node: Basic actions29148 -Node: MV Bookmarks30001 -Node: Miscellaneous31374 -Node: Headers view32249 -Node: HV Overview33009 -Ref: HV Overview-Footnote-137331 -Ref: HV Overview-Footnote-237422 -Ref: HV Overview-Footnote-337529 -Node: Keybindings37629 -Node: HV Marking39679 -Node: Sorting and threading40842 -Ref: Sorting and threading-Footnote-142418 -Node: HV Custom headers42509 -Node: HV Actions44692 -Node: Split view45402 -Node: Message view46838 -Node: MSGV Overview47674 -Node: MSGV Keybindings48873 -Node: MSGV Rich-text and images51417 -Node: MSGV Custom headers53526 -Node: MSGV Actions54062 -Node: Editor view54819 -Node: EV Overview55618 -Node: EV Keybindings56033 -Node: Address autocompletion56689 -Ref: Address autocompletion-Footnote-158791 -Node: Compose hooks58836 -Node: Signing and encrypting62139 -Node: Queuing mail63153 -Node: Message signatures64447 -Node: Other settings65081 -Node: Searching65813 -Node: Queries66778 -Ref: Queries-Footnote-169887 -Node: Bookmarks70001 -Ref: Bookmarks-Footnote-174160 -Node: Maildir searches74203 -Node: Other search functionality76706 -Ref: Including related messages78610 -Ref: Skipping duplicates79229 -Node: Marking79818 -Node: Marking messages80653 -Node: What to mark for81445 -Ref: What to mark for-Footnote-183022 -Ref: What to mark for-Footnote-283119 -Node: Executing the marks83315 -Node: Trashing messages83761 -Node: Leaving the headers buffer84385 -Node: Built-in marking functions84818 -Node: Custom mark functions85374 -Node: Adding a new kind of mark87723 -Node: Contexts90923 -Node: What are contexts92090 -Node: Context policies93742 -Node: Contexts and special folders95215 -Node: Contexts example96611 -Node: Dynamic folders101484 -Node: Smart refiling102751 -Ref: Smart refiling-Footnote-1105284 -Node: Other dynamic folders105329 -Node: Actions106597 -Node: Defining actions107492 -Ref: Defining actions-Footnote-1108768 -Ref: Defining actions-Footnote-2108944 -Node: Headers view actions109131 -Node: Message view actions110061 -Node: Attachment actions110895 -Node: Example actions111680 -Node: Extending mu4e112071 -Node: Extension points112602 -Node: Available functions114394 -Node: Message functions115305 -Node: Contact functions118421 -Node: Utility functions119659 -Node: Old message view120881 -Ref: Old message view-Footnote-1122302 -Node: OMSGV Overview122352 -Node: OMSGV Keybindings124598 -Node: Attachments127459 -Ref: Attachments-Footnote-1128897 -Ref: Attachments-Footnote-2128960 -Node: Viewing images inline129068 -Ref: Viewing images inline-Footnote-1129896 -Node: Displaying rich-text messages129934 -Ref: Html2text functions132592 -Ref: Privacy aspects133347 -Ref: Displaying rich-text messages-Footnote-1133686 -Ref: Displaying rich-text messages-Footnote-2133851 -Node: OMSGV Crypto133893 -Ref: Decryption134982 -Ref: Verifying signatures135699 -Node: OMSGV Custom headers136704 -Node: OMSGV Actions137250 -Node: Other tools139113 -Node: Emacs default139849 -Node: Org-mode links140477 -Node: Org-contacts143205 -Ref: Org-contacts-Footnote-1144286 -Node: BBDB144360 -Ref: BBDB-Footnote-1145730 -Node: iCalendar145783 -Node: Sauron149031 -Ref: Sauron-Footnote-1150569 -Node: Speedbar150739 -Node: Dired151626 -Node: Hydra152142 -Ref: Hydra-Footnote-1153244 -Node: iCalendar Integration153287 -Node: Example configs154283 -Node: Minimal configuration154826 -Node: Longer configuration156037 -Node: Gmail configuration158733 -Node: CONF Other settings164112 -Node: FAQ164657 -Node: General165177 -Ref: mu-mu4e-differ165370 -Node: Retrieving mail170081 -Ref: Retrieving mail-Footnote-1173747 -Node: Reading messages173780 -Node: Writing messages179376 -Node: Known issues187930 -Node: Tips and Tricks189064 -Node: Fancy characters189451 -Node: Refiling messages190467 -Node: Saving outgoing messages194065 -Node: Confirmation before sending196599 -Node: How it works197203 -Node: High-level overview197704 -Node: mu server199204 -Node: Reading from the server200229 -Node: The message s-expression202585 -Ref: The message s-expression-Footnote-1205810 -Node: Debugging205997 -Node: GNU Free Documentation License207036 +Node: Sending mail24326 +Node: Running mu4e26549 +Node: Main view27596 +Node: MV Overview28125 +Node: Basic actions29283 +Node: MV Bookmarks30136 +Node: Miscellaneous31509 +Node: Headers view32384 +Node: HV Overview33144 +Ref: HV Overview-Footnote-137466 +Ref: HV Overview-Footnote-237557 +Ref: HV Overview-Footnote-337664 +Node: Keybindings37764 +Node: HV Marking39814 +Node: Sorting and threading40977 +Ref: Sorting and threading-Footnote-142553 +Node: HV Custom headers42644 +Node: HV Actions44827 +Node: Split view45537 +Node: Message view46973 +Node: MSGV Overview47809 +Node: MSGV Keybindings49008 +Node: MSGV Rich-text and images51552 +Node: MSGV Custom headers54143 +Node: MSGV Actions54679 +Node: Editor view55436 +Node: EV Overview56235 +Node: EV Keybindings56650 +Node: Address autocompletion57306 +Ref: Address autocompletion-Footnote-159408 +Node: Compose hooks59453 +Node: Signing and encrypting62756 +Node: Queuing mail63770 +Node: Message signatures65064 +Node: Other settings65698 +Node: Searching66430 +Node: Queries67395 +Ref: Queries-Footnote-170504 +Node: Bookmarks70618 +Ref: Bookmarks-Footnote-174777 +Node: Maildir searches74820 +Node: Other search functionality77323 +Ref: Including related messages79227 +Ref: Skipping duplicates79846 +Node: Marking80435 +Node: Marking messages81270 +Node: What to mark for82062 +Ref: What to mark for-Footnote-183639 +Ref: What to mark for-Footnote-283736 +Node: Executing the marks83932 +Node: Trashing messages84378 +Node: Leaving the headers buffer85002 +Node: Built-in marking functions85435 +Node: Custom mark functions85991 +Node: Adding a new kind of mark88340 +Node: Contexts91540 +Node: What are contexts92707 +Node: Context policies94359 +Node: Contexts and special folders95832 +Node: Contexts example97228 +Node: Dynamic folders102101 +Node: Smart refiling103368 +Ref: Smart refiling-Footnote-1105901 +Node: Other dynamic folders105946 +Node: Actions107214 +Node: Defining actions108109 +Ref: Defining actions-Footnote-1109385 +Ref: Defining actions-Footnote-2109561 +Node: Headers view actions109748 +Node: Message view actions110678 +Node: Attachment actions111512 +Node: Example actions112297 +Node: Extending mu4e112688 +Node: Extension points113219 +Node: Available functions115011 +Node: Message functions115922 +Node: Contact functions119038 +Node: Utility functions120276 +Node: Old message view121498 +Ref: Old message view-Footnote-1122919 +Node: OMSGV Overview122969 +Node: OMSGV Keybindings125215 +Node: Attachments128076 +Ref: Attachments-Footnote-1129514 +Ref: Attachments-Footnote-2129577 +Node: Viewing images inline129685 +Ref: Viewing images inline-Footnote-1130513 +Node: Displaying rich-text messages130551 +Ref: Html2text functions133209 +Ref: Privacy aspects133964 +Ref: Displaying rich-text messages-Footnote-1134303 +Ref: Displaying rich-text messages-Footnote-2134468 +Node: OMSGV Crypto134510 +Ref: Decryption135599 +Ref: Verifying signatures136316 +Node: OMSGV Custom headers137321 +Node: OMSGV Actions137867 +Node: Other tools139730 +Node: Emacs default140466 +Node: Org-mode links141094 +Node: Org-contacts143899 +Ref: Org-contacts-Footnote-1144980 +Node: BBDB145054 +Ref: BBDB-Footnote-1146424 +Node: iCalendar146477 +Node: Sauron149725 +Ref: Sauron-Footnote-1151263 +Node: Speedbar151433 +Node: Dired152320 +Node: Hydra152836 +Ref: Hydra-Footnote-1153938 +Node: iCalendar Integration153981 +Node: Example configs154977 +Node: Minimal configuration155520 +Node: Longer configuration156731 +Node: Gmail configuration159427 +Node: CONF Other settings164806 +Node: FAQ165351 +Node: General165871 +Ref: mu-mu4e-differ166064 +Node: Retrieving mail170775 +Ref: Retrieving mail-Footnote-1174441 +Node: Reading messages174474 +Node: Writing messages180070 +Node: Known issues188624 +Node: Tips and Tricks189758 +Node: Fancy characters190145 +Node: Refiling messages191161 +Node: Saving outgoing messages194759 +Node: Confirmation before sending197293 +Node: How it works197897 +Node: High-level overview198398 +Node: mu server199898 +Node: Reading from the server200923 +Node: The message s-expression203279 +Ref: The message s-expression-Footnote-1206504 +Node: Debugging206691 +Node: GNU Free Documentation License207730 End Tag Table diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mu-1.6.1/mu4e/mu4e.texi new/mu-1.6.3/mu4e/mu4e.texi --- old/mu-1.6.1/mu4e/mu4e.texi 2021-07-17 14:01:23.000000000 +0200 +++ new/mu-1.6.3/mu4e/mu4e.texi 2021-08-12 12:08:22.000000000 +0200 @@ -611,8 +611,12 @@ @end lisp In many cases, the mentioned thoroughness might not be needed, and -these settings give a very significant speed-up. Note that you can of -course occasionally run a thorough indexing round. +these settings give a very significant speed-up. If it does not work +for you (e.g., @t{mu4e} fails to find some new messages), simply leave +at the default. + +Note that you can occasionally run a thorough indexing round using +@code{mu4e-update-index-nonlazy}. For further details, please refer to the @t{mu-index} manpage; in particular, see @t{.noindex} and @t{.noupdate} which can help reducing @@ -1370,10 +1374,17 @@ external images in HTML are not retrieved from external URLs because they can be used to track you. +Apart from that, you can also control whether to load remote images; +since loading remote images is often used for privacy violations, by +default this is not allowed. + You can specify what URLs to block by setting -@code{gnus-blocked-images} to a regular exporession or to a function -that will receive the message as an argument. For example, to enable -images in Github notifications, do the following: +@code{gnus-blocked-images} to a regular expression or to a function +that will receive a single parameter which is not meaningful for +@t{mu4e}. + +For example, to enable images in Github notifications, you could use +the following: @lisp (setq gnus-blocked-images @@ -1383,6 +1394,11 @@ nil "."))) @end lisp +@code{mu4e} inherits the default @t{gnus-blocked-images} from Gnus and +ensures that it works with @t{mu4e} too. However, mu4e is not Gnus, so +if you have Gnus-specific settings for @t{gnus-blocked-images}, you +should verify that they have the desired effect in @code{mu4e} as +well. @node MSGV Custom headers @section Custom headers @@ -3532,7 +3548,8 @@ you are in @ref{Message view}. When you are in @ref{Headers view}, @kbd{M-x org-store-link} links to the @emph{query} if @code{mu4e-org-link-query-in-headers-mode} is non-@code{nil}, and to -the particular message otherwise (which is the default). +the particular message otherwise (which is the default). You can +customize the link description using @code{mu4e-org-link-desc-func}. You can insert this link later with @kbd{M-x org-insert-link}. From @t{org-mode}, you can go to the query or message the link points to diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mu-1.6.1/mu4e/stamp-vti new/mu-1.6.3/mu4e/stamp-vti --- old/mu-1.6.1/mu4e/stamp-vti 2021-07-31 01:06:33.000000000 +0200 +++ new/mu-1.6.3/mu4e/stamp-vti 2021-08-12 18:08:06.000000000 +0200 @@ -1,4 +1,4 @@ -@set UPDATED 17 July 2021 -@set UPDATED-MONTH July 2021 -@set EDITION 1.6.1 -@set VERSION 1.6.1 +@set UPDATED 12 August 2021 +@set UPDATED-MONTH August 2021 +@set EDITION 1.6.3 +@set VERSION 1.6.3 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mu-1.6.1/mu4e/version.texi new/mu-1.6.3/mu4e/version.texi --- old/mu-1.6.1/mu4e/version.texi 2021-07-29 08:56:34.000000000 +0200 +++ new/mu-1.6.3/mu4e/version.texi 2021-08-12 18:08:06.000000000 +0200 @@ -1,4 +1,4 @@ -@set UPDATED 17 July 2021 -@set UPDATED-MONTH July 2021 -@set EDITION 1.6.1 -@set VERSION 1.6.1 +@set UPDATED 12 August 2021 +@set UPDATED-MONTH August 2021 +@set EDITION 1.6.3 +@set VERSION 1.6.3