X-Git-Url: https://git.notmuchmail.org/git?a=blobdiff_plain;f=emacs%2Fnotmuch-lib.el;h=23bd81c1d0e7251d69506ea0564e5ab489b1c647;hb=87f1d68440c3126a585427443339ff4c8e3067ef;hp=75a3706fa9aae99b309d8ba8f0aafd1392a25ce0;hpb=c41d0db077f295c92b01b69ed001afa233b7d0f0;p=notmuch diff --git a/emacs/notmuch-lib.el b/emacs/notmuch-lib.el index 75a3706f..23bd81c1 100644 --- a/emacs/notmuch-lib.el +++ b/emacs/notmuch-lib.el @@ -1,4 +1,4 @@ -;; notmuch-lib.el --- common variables, functions and function declarations +;;; notmuch-lib.el --- common variables, functions and function declarations ;; ;; Copyright © Carl Worth ;; @@ -15,15 +15,19 @@ ;; General Public License for more details. ;; ;; You should have received a copy of the GNU General Public License -;; along with Notmuch. If not, see . +;; along with Notmuch. If not, see . ;; ;; Authors: Carl Worth ;; This is an part of an emacs-based interface to the notmuch mail system. +;;; Code: + +(require 'mm-util) (require 'mm-view) (require 'mm-decode) (require 'cl) +(require 'notmuch-compat) (unless (require 'notmuch-version nil t) (defconst notmuch-emacs-version "unknown" @@ -520,11 +524,23 @@ This replaces spaces, percents, and double quotes in STR with "multipart/related" )) -(defun notmuch-multipart/alternative-choose (types) - "Return a list of preferred types from the given list of types" +(defun notmuch-multipart/alternative-determine-discouraged (msg) + "Return the discouraged alternatives for the specified message." + ;; If a function, return the result of calling it. + (if (functionp notmuch-multipart/alternative-discouraged) + (funcall notmuch-multipart/alternative-discouraged msg) + ;; Otherwise simply return the value of the variable, which is + ;; assumed to be a list of discouraged alternatives. This is the + ;; default behaviour. + notmuch-multipart/alternative-discouraged)) + +(defun notmuch-multipart/alternative-choose (msg types) + "Return a list of preferred types from the given list of types +for this message, if present." ;; Based on `mm-preferred-alternative-precedence'. - (let ((seq types)) - (dolist (pref (reverse notmuch-multipart/alternative-discouraged)) + (let ((discouraged (notmuch-multipart/alternative-determine-discouraged msg)) + (seq types)) + (dolist (pref (reverse discouraged)) (dolist (elem (copy-sequence seq)) (when (string-match pref elem) (setq seq (nconc (delete elem seq) (list elem)))))) @@ -558,7 +574,20 @@ the given type." ,@(when process-crypto '("--decrypt")) ,(notmuch-id-to-query (plist-get msg :id)))) (coding-system-for-read - (if binaryp 'no-conversion 'utf-8))) + (if binaryp 'no-conversion + (let ((coding-system (mm-charset-to-coding-system + (plist-get part :content-charset)))) + ;; Sadly, + ;; `mm-charset-to-coding-system' seems + ;; to return things that are not + ;; considered acceptable values for + ;; `coding-system-for-read'. + (if (coding-system-p coding-system) + coding-system + ;; RFC 2047 says that the default + ;; charset is US-ASCII. RFC6657 + ;; complicates this somewhat. + 'us-ascii))))) (apply #'call-process notmuch-command nil '(t nil) nil args) (buffer-string)))))) (when (and cache data) @@ -762,9 +791,15 @@ You may need to restart Emacs or upgrade your notmuch package.")) (insert-file-contents err-file) (unless (eobp) (buffer-string))))) + (command-string + (mapconcat (lambda (arg) + (shell-quote-argument + (cond ((stringp arg) arg) + ((symbolp arg) (symbol-name arg)) + (t "*UNKNOWN ARGUMENT*")))) + command " ")) (extra - (concat - "command: " (mapconcat #'shell-quote-argument command " ") "\n" + (concat "command: " command-string "\n" (if (integerp exit-status) (format "exit status: %s\n" exit-status) (format "exit signal: %s\n" exit-status)) @@ -919,3 +954,5 @@ status." ;; Local Variables: ;; byte-compile-warnings: (not cl-functions) ;; End: + +;;; notmuch-lib.el ends here