From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mp11.migadu.com ([2001:41d0:2:4a6f::]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)) by ms5.migadu.com with LMTPS id KKZjGXOff2LU1gAAbAwnHQ (envelope-from ) for ; Sat, 14 May 2022 14:24:19 +0200 Received: from aspmx1.migadu.com ([2001:41d0:2:4a6f::]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)) by mp11.migadu.com with LMTPS id gORyGXOff2JGMgAA9RJhRA (envelope-from ) for ; Sat, 14 May 2022 14:24:19 +0200 Received: from mail.notmuchmail.org (yantan.tethera.net [135.181.149.255]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by aspmx1.migadu.com (Postfix) with ESMTPS id 620898769 for ; Sat, 14 May 2022 14:24:18 +0200 (CEST) Received: from yantan.tethera.net (localhost [127.0.0.1]) by mail.notmuchmail.org (Postfix) with ESMTP id 9E8655F73E; Sat, 14 May 2022 12:24:15 +0000 (UTC) Received: from fethera.tethera.net (fethera.tethera.net [198.245.60.197]) by mail.notmuchmail.org (Postfix) with ESMTP id 01BC15F72D for ; Sat, 14 May 2022 12:24:12 +0000 (UTC) Received: by fethera.tethera.net (Postfix, from userid 1001) id 9616B5FBD7; Sat, 14 May 2022 08:24:11 -0400 (EDT) Received: (nullmailer pid 2220634 invoked by uid 1000); Sat, 14 May 2022 12:24:10 -0000 From: David Bremner To: notmuch@notmuchmail.org Subject: [PATCH] emacs: document/defcustom notmuch-multipart/alternative-discouraged Date: Sat, 14 May 2022 09:24:06 -0300 Message-Id: <20220514122406.2220621-1-david@tethera.net> X-Mailer: git-send-email 2.35.2 MIME-Version: 1.0 Message-ID-Hash: 2I7TKLDAUQAW2R75BMCOM7GRUHSNIRWR X-Message-ID-Hash: 2I7TKLDAUQAW2R75BMCOM7GRUHSNIRWR X-MailFrom: bremner@tethera.net X-Mailman-Rule-Misses: dmarc-mitigation; no-senders; approved; emergency; loop; banned-address; member-moderation; header-match-notmuch.notmuchmail.org-0; nonmember-moderation; administrivia; implicit-dest; max-recipients; max-size; news-moderation; no-subject; digests; suspicious-header X-Mailman-Version: 3.3.3 Precedence: list List-Id: "Use and development of the notmuch mail system." List-Help: List-Owner: List-Post: List-Subscribe: List-Unsubscribe: Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit X-Migadu-Flow: FLOW_IN X-Migadu-To: larch@yhetil.org X-Migadu-Country: DE ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=yhetil.org; s=key1; t=1652531058; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding:list-id:list-help: list-owner:list-unsubscribe:list-subscribe:list-post; bh=C8sMcuifRo5sB1qZWt/tWqTTlbrrEz3wVRd7mJcEHyg=; b=W7Wyw4dTDFnIX08ssXmMzH01XYoHi9sJcKTuIGimMBaaGB4r8/kmAKaBx1H/GiLu1Ey2Ny AyntZnsSt/UBGdmqghg2g3ylLnM892UP48fQTujhQpxLtEG4Fp4R794192q7+mUoMBCTHc fsPaerxWH4G7f+zGikeymg8HH/GOXrIpHcVahufH0g3X8aENSJ9rUFGUGatfGyRXRhOyvN VmKDDi2raaoxfNcEJBuZHMsmRhw/aDyFQe9Nnps71juyK7V9QqBJb5lXNQgymXPrMdZn4w k6IGPgL6WNIEdf9TROhQ6hBq/ClOVsh8Nvjb65BwE6p9VQsHVK3JHDl6esTYkg== ARC-Seal: i=1; s=key1; d=yhetil.org; t=1652531058; a=rsa-sha256; cv=none; b=GuBTkVAVNKgGpOLsG0XuLDdc4b846pKsI0enM/kx49OAOBxlLoQ0YUexaRqsTAeVJjgDm3 dXmBiCFMjiDPTQ8DW1mrgIkvzzwzmiegVMrpobJzlIIgOyO1pZ/eGfBqFrJethwl/39jab XlGHLO+LQxst99jYgm988N93aGhvBMQ6o4kQy9yE0N6vrJPo7dE4YEsjUL2NEVTDGbe+3T x084P5obeneqijMsrUo+Sx5bitk/3EOXzpsCocizoK+ar2R8D3auqVcQO+4ug2bzTbKF8X fgDLD4kTGCAqag0ZcM+x5/gTIN2ClIw8S0opdALUmbcZek4oEM02HCsS92A4Eg== ARC-Authentication-Results: i=1; aspmx1.migadu.com; dkim=none; dmarc=none; spf=pass (aspmx1.migadu.com: domain of notmuch-bounces@notmuchmail.org designates 135.181.149.255 as permitted sender) smtp.mailfrom=notmuch-bounces@notmuchmail.org X-Migadu-Spam-Score: -0.91 Authentication-Results: aspmx1.migadu.com; dkim=none; dmarc=none; spf=pass (aspmx1.migadu.com: domain of notmuch-bounces@notmuchmail.org designates 135.181.149.255 as permitted sender) smtp.mailfrom=notmuch-bounces@notmuchmail.org X-Migadu-Queue-Id: 620898769 X-Spam-Score: -0.91 X-Migadu-Scanner: scn0.migadu.com X-TUID: 5EUaWDrXffuO This variable is important for people who want to change the default behaviour when displaying multipart/alternative messages. Previously it was undocumented. Add a defcustom to help users and copy some documentation from the wiki. The usual machinery of re-using docstrings is a bit tricky to use here because it mangles the example lisp code, and the link to the info node should not be in e.g. the html page. Add a simple test to make sure the switch from defvar to defcustom did not break something obvious. --- doc/notmuch-emacs.rst | 21 +++++++ emacs/notmuch-lib.el | 12 +++- test/T450-emacs-show.sh | 4 ++ .../notmuch-show-multipart-alternative | 62 +++++++++++++++++++ 4 files changed, 97 insertions(+), 2 deletions(-) create mode 100644 test/emacs-show.expected-output/notmuch-show-multipart-alternative diff --git a/doc/notmuch-emacs.rst b/doc/notmuch-emacs.rst index 41f62390..27437f35 100644 --- a/doc/notmuch-emacs.rst +++ b/doc/notmuch-emacs.rst @@ -235,6 +235,27 @@ Display of messages can be controlled by the following variables :index:`notmuch-show-header-line` |docstring::notmuch-show-header-line| +:index:`notmuch-multipart/alternative-discouraged` + + Which mime types to hide by default for multipart messages. + + Can either be a list of mime types (as strings) or a function + mapping a plist representing the current message to such a list. + The following example function would discourage `text/html` and + `multipart/related` generally, but discourage `text/plain` should + the message be sent from `whatever@example.com`. + + .. code:: lisp + + (defun my--determine-discouraged (msg) + (let* ((headers (plist-get msg :headers)) + (from (or (plist-get headers :From) ""))) + (cond + ((string-match "whatever@example.com" from) + (list "text/plain")) + (t + (list "text/html" "multipart/related"))))) + .. _show-copy: Copy to kill-ring diff --git a/emacs/notmuch-lib.el b/emacs/notmuch-lib.el index 6fc71cc7..ad884308 100644 --- a/emacs/notmuch-lib.el +++ b/emacs/notmuch-lib.el @@ -567,12 +567,20 @@ Take wildcards into account." (string= (downcase t1) (downcase t2)))))) -(defvar notmuch-multipart/alternative-discouraged +(defcustom notmuch-multipart/alternative-discouraged '(;; Avoid HTML parts. "text/html" ;; multipart/related usually contain a text/html part and some ;; associated graphics. - "multipart/related")) + "multipart/related") + "Which mime types to hide by default for multipart messages. + +Can either be a list of mime types (as strings) or a function +mapping a plist representing the current message to such a list. +See Info node `(notmuch-emacs) notmuch-show' for a sample function." + :group 'notmuch-show + :type '(radio (repeat :tag "MIME Types" string) + (function :tag "Function"))) (defun notmuch-multipart/alternative-determine-discouraged (msg) "Return the discouraged alternatives for the specified message." diff --git a/test/T450-emacs-show.sh b/test/T450-emacs-show.sh index 057ad37e..7a0002c4 100755 --- a/test/T450-emacs-show.sh +++ b/test/T450-emacs-show.sh @@ -209,6 +209,10 @@ test_emacs '(notmuch-show "id:'$gen_msg_id'") output=$(head -1 OUTPUT.raw|cut -f1-4 -d' ') test_expect_equal "$output" "Notmuch Test Suite " +test_begin_subtest "multipart/alternative hides html by default" +test_emacs '(notmuch-show "id:cf0c4d610911171136h1713aa59w9cf9aa31f052ad0a@mail.gmail.com") + (test-visible-output)' +test_expect_equal_file $EXPECTED/notmuch-show-multipart-alternative OUTPUT # switching to the crypto corpus, using gpg from here on: add_gnupg_home diff --git a/test/emacs-show.expected-output/notmuch-show-multipart-alternative b/test/emacs-show.expected-output/notmuch-show-multipart-alternative new file mode 100644 index 00000000..e44926bc --- /dev/null +++ b/test/emacs-show.expected-output/notmuch-show-multipart-alternative @@ -0,0 +1,62 @@ +Alex Botero-Lowry (2009-11-17) (attachment inbox) +Subject: [notmuch] preliminary FreeBSD support +To: notmuch@notmuchmail.org +Date: Tue, 17 Nov 2009 11:36:14 -0800 + +[ multipart/mixed ] +[ multipart/alternative ] +[ text/plain ] +I saw the announcement this morning, and was very excited, as I had been +hoping sup would be turned into a library, +since I like the concept more than the UI (I'd rather an emacs interface). + +I did a preliminary compile which worked out fine, but +sysconf(_SC_SC_GETPW_R_SIZE_MAX) returns -1 on +FreeBSD, so notmuch_config_open segfaulted. + +Attached is a patch that supplies a default buffer size of 64 in cases where +-1 is returned. + +http://www.opengroup.org/austin/docs/austin_328.txt - seems to indicate this +is acceptable behavior, +and +http://mail-index.netbsd.org/pkgsrc-bugs/2006/06/07/msg016808.htmlspecifically +uses 64 as the +buffer size. +[ text/html (hidden) ] +[ 0001-Deal-with-situation-where-sysconf-_SC_GETPW_R_SIZE_M.patch: application/octet-stream (as text/x-diff) ] +From e3bc4bbd7b9d0d086816ab5f8f2d6ffea1dd3ea4 Mon Sep 17 00:00:00 2001 +From: Alexander Botero-Lowry +Date: Tue, 17 Nov 2009 11:30:39 -0800 +Subject: [PATCH] Deal with situation where sysconf(_SC_GETPW_R_SIZE_MAX) returns -1 + +--- + notmuch-config.c | 2 ++ + 1 files changed, 2 insertions(+), 0 deletions(-) + +diff --git a/notmuch-config.c b/notmuch-config.c +index 248149c..e7220d8 100644 +--- a/notmuch-config.c ++++ b/notmuch-config.c +@@ -77,6 +77,7 @@ static char * + get_name_from_passwd_file (void *ctx) + { + long pw_buf_size = sysconf(_SC_GETPW_R_SIZE_MAX); ++ if (pw_buf_size == -1) pw_buf_size = 64; + char *pw_buf = talloc_zero_size (ctx, pw_buf_size); + struct passwd passwd, *ignored; + char *name; +@@ -101,6 +102,7 @@ static char * + get_username_from_passwd_file (void *ctx) + { + long pw_buf_size = sysconf(_SC_GETPW_R_SIZE_MAX); ++ if (pw_buf_size == -1) pw_buf_size = 64; + char *pw_buf = talloc_zero_size (ctx, pw_buf_size); + struct passwd passwd, *ignored; + char *name; +-- +1.6.5.2 + +[ text/plain ] +[ 4-line signature. Click/Enter to show. ] + Carl Worth (2009-11-17) (inbox unread) -- 2.35.2