commit maildir-utils for openSUSE:Factory
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 2022-10-25 11:20:20 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/maildir-utils (Old) and /work/SRC/openSUSE:Factory/.maildir-utils.new.2275 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Package is "maildir-utils" Tue Oct 25 11:20:20 2022 rev:37 rq:1031034 version:1.8.11 Changes: -------- --- /work/SRC/openSUSE:Factory/maildir-utils/maildir-utils.changes 2022-09-15 22:59:56.413342414 +0200 +++ /work/SRC/openSUSE:Factory/.maildir-utils.new.2275/maildir-utils.changes 2022-10-25 11:20:44.718234775 +0200 @@ -1,0 +2,11 @@ +Tue Oct 25 06:47:09 UTC 2022 - Michael Vetter <mvetter@suse.com> + +- Update to 1.8.11: + * Use fake message-ids when empty + * Add explicit check for charconv header + * Fix outdated doc for mime part actions + * mu-view: be clearer when no text-body found + * Fix mu4e-header-thread-first-child-prefix copy-pasta + * Ensure mime-parts are utf8 + +------------------------------------------------------------------- Old: ---- mu-1.8.10.tar.xz New: ---- mu-1.8.11.tar.xz ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ maildir-utils.spec ++++++ --- /var/tmp/diff_new_pack.YbVdrE/_old 2022-10-25 11:20:45.206235857 +0200 +++ /var/tmp/diff_new_pack.YbVdrE/_new 2022-10-25 11:20:45.214235874 +0200 @@ -17,7 +17,7 @@ Name: maildir-utils -Version: 1.8.10 +Version: 1.8.11 Release: 0 Summary: Maildir indexer and searcher License: GPL-3.0-or-later ++++++ mu-1.8.10.tar.xz -> mu-1.8.11.tar.xz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mu-1.8.10/configure.ac new/mu-1.8.11/configure.ac --- old/mu-1.8.10/configure.ac 2022-09-14 22:34:44.000000000 +0200 +++ new/mu-1.8.11/configure.ac 2022-10-24 22:19:15.000000000 +0200 @@ -15,7 +15,7 @@ ## Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. AC_PREREQ([2.68]) -AC_INIT([mu],[1.8.10],[https://github.com/djcb/mu/issues],[mu]) +AC_INIT([mu],[1.8.11],[https://github.com/djcb/mu/issues],[mu]) AC_COPYRIGHT([Copyright (C) 2008-2022 Dirk-Jan C. Binnema]) AC_CONFIG_HEADERS([config.h]) AC_CONFIG_SRCDIR([mu/mu.cc]) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mu-1.8.10/lib/message/mu-fields.cc new/mu-1.8.11/lib/message/mu-fields.cc --- old/mu-1.8.10/lib/message/mu-fields.cc 2022-09-14 22:34:44.000000000 +0200 +++ new/mu-1.8.11/lib/message/mu-fields.cc 2022-10-24 22:19:15.000000000 +0200 @@ -105,7 +105,7 @@ ++flagnum; if (flagnum > 1) { - //g_warning("invalid field %*s", STR_V(field.name)); + //g_warning("invalid field %*.s", STR_V(field.name)); return false; } } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mu-1.8.10/lib/message/mu-message.cc new/mu-1.8.11/lib/message/mu-message.cc --- old/mu-1.8.10/lib/message/mu-message.cc 2022-09-14 22:34:44.000000000 +0200 +++ new/mu-1.8.11/lib/message/mu-message.cc 2022-10-24 22:19:15.000000000 +0200 @@ -638,7 +638,10 @@ const auto path{doc.string_value(Field::Id::Path)}; const auto refs{mime_msg.references()}; - const auto message_id{mime_msg.message_id().value_or(fake_message_id(path))}; + const auto& raw_message_id = mime_msg.message_id(); + const auto message_id = raw_message_id.has_value() && !raw_message_id->empty() + ? *raw_message_id + : fake_message_id(path); process_message(mime_msg, path, priv); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mu-1.8.10/lib/message/mu-mime-object.cc new/mu-1.8.11/lib/message/mu-mime-object.cc --- old/mu-1.8.10/lib/message/mu-mime-object.cc 2022-09-14 22:34:44.000000000 +0200 +++ new/mu-1.8.11/lib/message/mu-mime-object.cc 2022-10-24 22:19:15.000000000 +0200 @@ -477,10 +477,22 @@ return static_cast<size_t>(g_mime_stream_length(stream)); } - Option<std::string> MimePart::to_string() const noexcept { + /* + * easy case: text. this automatically handles conversion to utf-8. + */ + if (GMIME_IS_TEXT_PART(self())) { + if (char* txt{g_mime_text_part_get_text(GMIME_TEXT_PART(self()))}; !txt) + return Nothing; + else + return to_string_gchar(std::move(txt)/*consumes*/); + } + + /* + * harder case: read from stream manually + */ GMimeDataWrapper *wrapper{g_mime_part_get_content(self())}; if (!wrapper) { /* this happens with invalid mails */ g_debug("failed to create data wrapper"); @@ -493,7 +505,6 @@ return Nothing; } - ssize_t buflen{g_mime_data_wrapper_write_to_stream(wrapper, stream)}; if (buflen <= 0) { /* empty buffer, not an error */ g_object_unref(stream); @@ -513,9 +524,11 @@ buffer.resize(buflen); return buffer; + } + Result<size_t> MimePart::to_file(const std::string& path, bool overwrite) const noexcept { diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mu-1.8.10/lib/message/test-mu-message.cc new/mu-1.8.11/lib/message/test-mu-message.cc --- old/mu-1.8.10/lib/message/test-mu-message.cc 2022-09-14 22:34:44.000000000 +0200 +++ new/mu-1.8.11/lib/message/test-mu-message.cc 2022-10-24 22:19:15.000000000 +0200 @@ -856,6 +856,163 @@ static void +test_message_outlook_body() +{ + constexpr auto msgtext = +R"x(Received: from vu-ex2.activedir.vu.lt (172.16.159.219) by + vu-ex1.activedir.vu.lt (172.16.159.218) with Microsoft SMTP Server + (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.1118.9 + via Mailbox Transport; Fri, 27 May 2022 11:40:05 +0300 +Received: from vu-ex2.activedir.vu.lt (172.16.159.219) by + vu-ex2.activedir.vu.lt (172.16.159.219) with Microsoft SMTP Server + (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id + 15.2.1118.9; Fri, 27 May 2022 11:40:05 +0300 +Received: from vu-ex2.activedir.vu.lt ([172.16.159.219]) by + vu-ex2.activedir.vu.lt ([172.16.159.219]) with mapi id 15.02.1118.009; Fri, + 27 May 2022 11:40:05 +0300 +From: =?windows-1257?Q?XXXXXXXXXX= <XXXXXXXXXX> +To: <XXXXXXXXXX@XXXXXXXXXX.com> +Subject: =?windows-1257?Q?Pra=F0ymas?= +Thread-Topic: =?windows-1257?Q?Pra=F0ymas?= +Thread-Index: AQHYcaRi3ejPSLxkl0uTFDto7z2OcA== +Date: Fri, 27 May 2022 11:40:05 +0300 +Message-ID: <5c2cd378af634e929a6cc69da1e66b9d@XX.vu.lt> +Accept-Language: en-US, lt-LT +Content-Language: en-US +X-MS-Has-Attach: +Content-Type: text/html; charset="windows-1257" +Content-Transfer-Encoding: quoted-printable +MIME-Version: 1.0 +X-TUID: 1vFQ9RPwwg/u + +<html> +<head> +<meta http-equiv=3D"Content-Type" content=3D"text/html; charset=3Dwindows-1= +257"> +<style type=3D"text/css" style=3D"display:none;"><!-- P {margin-top:0;margi= +n-bottom:0;} --></style> +</head> +<body dir=3D"ltr"> +<div id=3D"divtagdefaultwrapper" style=3D"font-size:12pt;color:#000000;font= +-family:Calibri,Helvetica,sans-serif;" dir=3D"ltr"> +<p>Laba diena visiems,</p> +<p>Trumpai.</p> +<p>D=EBl leidimo ar neleidimo ginti darb=E0: ed=EBstytojo paskyroje spaud= +=FEiate ikon=E0 "ra=F0to darbai", atidar=E6 susiraskite =E1ra=F0= +=E0 "tvirtinti / netvirtinti", pa=FEym=EBkite vien=E0 i=F0 j=F8.&= +nbsp;</p> +<p><br> +</p> +<p>=D0=E1 darb=E0 privalu atlikti, kad paskui nekilt=F8 problem=F8 studentu= +i =E1vedant =E1vertinim=E0.</p> +<p><br> +</p> +<p>Jei neleid=FEiate ginti darbo, pra=F0au informuoti mane ir komisijos sek= +retori=F8. </p> +<p><br> +</p> +<p>Vis=E0 tolesn=E6 informacij=E0 atsi=F8siu artimiausiu metu (stengsiuosi = +=F0iandien vakare).</p> +<p><br> +</p> +<p>Pagarbiai.</p> +<p><br> +</p> +<p><br> +</p> +<div id=3D"Signature"> +<div id=3D"divtagdefaultwrapper" dir=3D"ltr" style=3D"font-family: Calibri,= + Helvetica, sans-serif, EmojiFont, "Apple Color Emoji", "Seg= +oe UI Emoji", NotoColorEmoji, "Segoe UI Symbol", "Andro= +id Emoji", EmojiSymbols;"> +<p style=3D"color:rgb(0,0,0); font-size:12pt"><br> +</p> +<p style=3D"color:rgb(0,0,0); font-size:12pt"><br> +</p> +<p style=3D"color:rgb(0,0,0); font-size:12pt"><br> +</p> +<p style=3D"color:rgb(0,0,0); font-size:12pt"><span style=3D"font-size:10pt= +; background-color:rgb(255,255,255); color:rgb(0,111,201)"><br> +</span></p> +<p style=3D"color:rgb(0,0,0); font-size:12pt"><span style=3D"font-size:10pt= +; background-color:rgb(255,255,255); color:rgb(0,111,201)">XXXXXXXXXX</span></p> +<p style=3D""><font color=3D"#006fc9"><span style=3D"font-size:13.3333px"><= +/span></font></p> +<span style=3D"font-size:10pt; background-color:rgb(255,255,255); color:rgb= +(0,111,201); font-size:10pt"></span> +<p style=3D""><font color=3D"#006fc9"><span style=3D"font-size:13.3333px">XXXXXXXXXX</span></font></p> +<p style=3D""><font color=3D"#006fc9"><span style=3D"font-size:13.3333px">XXXXXXXXXX</span></font></p> +<p style=3D""><font color=3D"#006fc9"><span style=3D"font-size:13.3333px">XXXXXXXXXX</span></font></p> +<p style=3D""><br> +</p> +<p style=3D""><br> +</p> +</div> +</div> +</div> +</body> +</html> +)x"; + g_test_bug("2349"); + + auto message{Message::make_from_text( + msgtext, + "/home/test/Maildir/inbox/cur/162342449279256.77777_1.evergrey:2,S")}; + g_assert_true(!!message); + + assert_equal(message->subject(), "Pra��ymas"); + g_assert_true(message->priority() == Priority::Normal); + + g_assert_false(!!message->body_text()); + g_assert_true(!!message->body_html()); + g_assert_cmpuint(message->body_html()->find("<p>Pagarbiai.</p>"), ==, 935); +} + + +static void +test_message_message_id() +{ + constexpr const auto msg1 = +R"(From: "Mu Test" <mu@djcbsoftware.nl> +To: mu@djcbsoftware.nl +Message-ID: <87lew9xddt.fsf@djcbsoftware.nl> + +abc +)"; + + constexpr const auto msg2 = +R"(From: "Mu Test" <mu@djcbsoftware.nl> +To: mu@djcbsoftware.nl + +abc +)"; + + constexpr const auto msg3 = +R"(From: "Mu Test" <mu@djcbsoftware.nl> +To: mu@djcbsoftware.nl +Message-ID: + +abc +)"; + + const auto m1{Message::make_from_text(msg1, "/foo/cur/m123:2,S")}; + assert_valid_result(m1); + + const auto m2{Message::make_from_text(msg2, "/foo/cur/m456:2,S")}; + assert_valid_result(m2); + const auto m3{Message::make_from_text(msg3, "/foo/cur/m789:2,S")}; + assert_valid_result(m3); + + assert_equal(m1->message_id(), "87lew9xddt.fsf@djcbsoftware.nl"); + + /* both with absent and empty message-id, generate "random" fake one, + * which must end in @mu.id */ + g_assert_true(g_str_has_suffix(m2->message_id().c_str(), "@mu.id")); + g_assert_true(g_str_has_suffix(m3->message_id().c_str(), "@mu.id")); +} + + +static void test_message_fail () { { @@ -898,6 +1055,10 @@ test_message_calendar); g_test_add_func("/message/message/references", test_message_references); + g_test_add_func("/message/message/outlook-body", + test_message_outlook_body); + g_test_add_func("/message/message/message-id", + test_message_message_id); g_test_add_func("/message/message/fail", test_message_fail); g_test_add_func("/message/message/sanitize-maildir", diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mu-1.8.10/lib/tests/test-mu-msg.cc new/mu-1.8.11/lib/tests/test-mu-msg.cc --- old/mu-1.8.10/lib/tests/test-mu-msg.cc 2022-09-14 22:34:44.000000000 +0200 +++ new/mu-1.8.11/lib/tests/test-mu-msg.cc 2022-10-24 22:19:15.000000000 +0200 @@ -48,8 +48,8 @@ for (auto&& contact: contacts) { if (g_test_verbose()) g_message("{ \"%s\", \"%s\"},\n", contact.name.c_str(), contact.email.c_str()); - // assert_equal(contact.name, expected.at(n).first); - // assert_equal(contact.email, expected.at(n).second); + assert_equal(contact.name, expected.at(n).first); + assert_equal(contact.email, expected.at(n).second); ++n; } g_print("\n"); @@ -186,7 +186,7 @@ .value()}; assert_contacts_equal(msg.to(), { { "Helmut Kr��ger", "hk@testmu.xxx"}}); - assert_contacts_equal(msg.from(), { { "M��", "testmu@testmu.xxx"}}); + assert_contacts_equal(msg.from(), { { "M��", "testmu@testmu.xx"}}); assert_equal(msg.subject(), "Mot��rhead"); assert_equal(msg.from().at(0).display_name(), "M�� <testmu@testmu.xx>"); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mu-1.8.10/lib/tests/test-mu-store-query.cc new/mu-1.8.11/lib/tests/test-mu-store-query.cc --- old/mu-1.8.10/lib/tests/test-mu-store-query.cc 2022-09-14 22:34:44.000000000 +0200 +++ new/mu-1.8.11/lib/tests/test-mu-store-query.cc 2022-10-24 22:19:15.000000000 +0200 @@ -449,6 +449,73 @@ } +static void +test_body_matricula() +{ + const TestMap test_msgs = {{ +{ +"basic/cur/matricula-msg:2,S", +R"(From: XXX <XX@XX.com> +Subject: + =?iso-8859-1?Q?EF_-_Pago_matr=EDcula_de_la_matr=EDcula_de_inscripci=F3n_a?= +Date: Thu, 4 Aug 2022 14:29:41 +0000 +Message-ID: + <VE1PR03MB5471882920DE08CFE44D97A0FE9F9@VE1PR03MB5471.eurprd03.prod.outlook.com> +Accept-Language: es-AR, es-ES, en-US +Content-Language: es-AR +X-MS-Has-Attach: yes +Content-Type: multipart/mixed; + boundary="_004_VE1PR03MB5471882920DE08CFE44D97A0FE9F9VE1PR03MB5471eurp_" +MIME-Version: 1.0 +X-OriginatorOrg: ef.com +X-MS-Exchange-CrossTenant-AuthAs: Internal +X-MS-Exchange-CrossTenant-AuthSource: VE1PR03MB5471.eurprd03.prod.outlook.com + +--_004_VE1PR03MB5471882920DE08CFE44D97A0FE9F9VE1PR03MB5471eurp_ +Content-Type: multipart/alternative; + boundary="_000_VE1PR03MB5471882920DE08CFE44D97A0FE9F9VE1PR03MB5471eurp_" + +--_000_VE1PR03MB5471882920DE08CFE44D97A0FE9F9VE1PR03MB5471eurp_ +Content-Type: text/plain; charset="iso-8859-1" +Content-Transfer-Encoding: quoted-printable + +Buenas tardes Familia, + + +Espero que est=E9n muy bien. + + + +Ya cargamos en sistema su pre inscripci=F3n para el curso + + +Quedamos atentos ante cualquier consulta que surja. + +Saludos, +)"}, +}}; + TempDir tdir; + auto store{make_test_store(tdir.path(), test_msgs, {})}; + + /* i.e., non-utf8 text parts were not converted */ + g_test_bug("2333"); + + // matches + for (auto&& expr: { + "subject:matr��cula", + "subject:matricula", + "body:atentos", + "body:inscripci��n" + }) { + + if (g_test_verbose()) + g_message("query: '%s'", expr); + auto qr = store.run_query(expr); + assert_valid_result(qr); + g_assert_false(qr->empty()); + g_assert_cmpuint(qr->size(), ==, 1); + } +} int main(int argc, char* argv[]) @@ -464,6 +531,8 @@ test_dups_related); g_test_add_func("/store/query/related-missing-root", test_related_missing_root); + g_test_add_func("/store/query/body-matricula", + test_body_matricula); return g_test_run(); } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mu-1.8.10/meson.build new/mu-1.8.11/meson.build --- old/mu-1.8.10/meson.build 2022-09-14 22:34:44.000000000 +0200 +++ new/mu-1.8.11/meson.build 2022-10-24 22:19:15.000000000 +0200 @@ -18,7 +18,7 @@ # project setup # project('mu', ['c', 'cpp'], - version: '1.8.10', + version: '1.8.11', meson_version: '>= 0.52.0', # debian 10 license: 'GPL-3.0-or-later', default_options : [ @@ -77,6 +77,10 @@ endif endforeach +# some clang don't have charconv, but we need it. +# https://github.com/djcb/mu/issues/2347 +cxx.check_header('charconv', required:true) + ################################################################################ # config.h setup # diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mu-1.8.10/mu/mu-cmd.cc new/mu-1.8.11/mu/mu-cmd.cc --- old/mu-1.8.10/mu/mu-cmd.cc 2022-09-14 22:34:44.000000000 +0200 +++ new/mu-1.8.11/mu/mu-cmd.cc 2022-10-24 22:19:15.000000000 +0200 @@ -111,11 +111,11 @@ if (!body || body->empty()) { if (any_of(message.flags() & Flags::Encrypted)) { color_maybe(MU_COLOR_CYAN); - g_print("[No body found; " + g_print("[No text body found; " "message has encrypted parts]\n"); } else { color_maybe(MU_COLOR_MAGENTA); - g_print("[No body found]\n"); + g_print("[No text body found]\n"); } color_maybe(MU_COLOR_DEFAULT); return; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mu-1.8.10/mu/mu.cc new/mu-1.8.11/mu/mu.cc --- old/mu-1.8.10/mu/mu.cc 2022-09-14 22:34:44.000000000 +0200 +++ new/mu-1.8.11/mu/mu.cc 2022-10-24 22:19:15.000000000 +0200 @@ -1,5 +1,5 @@ /* -** Copyright (C) 2008-2021 Dirk-Jan C. Binnema <djcb@djcbsoftware.nl> +** Copyright (C) 2008-2022 Dirk-Jan C. Binnema <djcb@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 @@ -34,7 +34,7 @@ show_version(void) { const char* blurb = "mu (mail indexer/searcher) version " VERSION "\n" - "Copyright (C) 2008-2021 Dirk-Jan C. Binnema\n" + "Copyright (C) 2008-2022 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 " diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mu-1.8.10/mu4e/mu4e-headers.el new/mu-1.8.11/mu4e/mu4e-headers.el --- old/mu-1.8.10/mu4e/mu4e-headers.el 2022-09-14 22:34:44.000000000 +0200 +++ new/mu-1.8.11/mu4e/mu4e-headers.el 2022-10-24 22:19:15.000000000 +0200 @@ -256,7 +256,7 @@ (defvar mu4e-headers-thread-child-prefix '("|>" . "��� ") "Prefix for messages in sub threads that do have a following sibling.") (defvar mu4e-headers-thread-first-child-prefix '("o " . "��� ") - "Prefix for messages in sub threads that do not have a following sibling.") + "Prefix for the first child messages in a sub thread.") (defvar mu4e-headers-thread-last-child-prefix '("L" . "��� ") "Prefix for messages in sub threads that do not have a following sibling.") (defvar mu4e-headers-thread-connection-prefix '("|" . "��� ") diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mu-1.8.10/mu4e/mu4e.texi new/mu-1.8.11/mu4e/mu4e.texi --- old/mu-1.8.10/mu4e/mu4e.texi 2022-09-14 22:34:44.000000000 +0200 +++ new/mu-1.8.11/mu4e/mu4e.texi 2022-10-24 22:19:15.000000000 +0200 @@ -2677,7 +2677,7 @@ * Defining actions::How to create an action * Headers view actions::Doing things with message headers * Message view actions::Doing things with messages -* Attachment actions::Doing things with attachments +* MIME-part actions::Doing things with MIME-parts such as attachments * Example actions::Some more examples @end menu @@ -2711,7 +2711,7 @@ actions@footnote{Instead of defining the functions separately, you can obviously also add a @code{lambda}-function directly to the list; however, separate functions are easier to change}, either @code{mu4e-headers-actions}, -@code{mu4e-view-actions} or @code{mu4e-view-attachment-actions}. The +@code{mu4e-view-actions} or @code{mu4e-view-mime-part-actions}. The format@footnote{Note, the format of the actions has changed since version 0.9.8.4, and you must change your configuration to use the new format; @t{mu4e} warns you when you are using the old format.} of each action is a @@ -2767,16 +2767,16 @@ us the e-mail address of the first in the list. @t{From:}-fields rarely have more that one address. -@node Attachment actions -@section Attachment actions +@node MIME-part actions +@section MIME-part actions -Finally, let's define an attachment action. As mentioned, attachment-action -functions receive @emph{2} arguments, the message and the attachment number to -use. - -The following example action counts the number of lines in an attachment, and -defines @key{n} as its shortcut key (the @key{n} is prefixed to the -description). +Finally, let's define a MIME-part action. As mentioned, MIME-part +functions receive @emph{2} arguments, the message and the attachment +number to use. + +The following example action counts the number of lines in an +attachment, and defines @key{n} as its shortcut key (the @key{n} is +prefixed to the description). @lisp (defun count-lines-in-attachment (msg attachnum) @@ -2784,7 +2784,7 @@ (mu4e-view-pipe-attachment msg attachnum "wc -l")) ;; defining 'n' as the shortcut -(add-to-list 'mu4e-view-attachment-actions +(add-to-list 'mu4e-view-mime-part-actions '("ncount lines" . count-lines-in-attachment) t) @end lisp @@ -2828,7 +2828,7 @@ see @ref{Message view actions} @item Add a new kind of mark for use in the headers view - see @ref{Adding a new kind of mark} -@item Apply a function to an attachment --- see @ref{Attachment actions} +@item Apply a function to a MIME-part --- see @ref{MIME-part actions} @item Custom function to mark certain messages --- see @ref{Custom mark functions} @item Using various @emph{mode}-hooks, @code{mu4e-compose-pre-hook} (see
participants (1)
-
Source-Sync