From 4a287a217ce9f59d3372a9fa2d8417ba4f7771d6 Mon Sep 17 00:00:00 2001 From: Michal Sojka Date: Mon, 21 Dec 2015 10:41:15 +0100 Subject: [PATCH] [PATCH v2] emacs: Improve notmuch-message-mode initialization --- 07/a589aff47952fc6971b51f4a41392db68c3bec | 149 ++++++++++++++++++++++ 1 file changed, 149 insertions(+) create mode 100644 07/a589aff47952fc6971b51f4a41392db68c3bec diff --git a/07/a589aff47952fc6971b51f4a41392db68c3bec b/07/a589aff47952fc6971b51f4a41392db68c3bec new file mode 100644 index 000000000..c40734285 --- /dev/null +++ b/07/a589aff47952fc6971b51f4a41392db68c3bec @@ -0,0 +1,149 @@ +Return-Path: +X-Original-To: notmuch@notmuchmail.org +Delivered-To: notmuch@notmuchmail.org +Received: from localhost (localhost [127.0.0.1]) + by arlo.cworth.org (Postfix) with ESMTP id 196096DE0244 + for ; Mon, 21 Dec 2015 01:50:19 -0800 (PST) +X-Virus-Scanned: Debian amavisd-new at cworth.org +X-Spam-Flag: NO +X-Spam-Score: -1.209 +X-Spam-Level: +X-Spam-Status: No, score=-1.209 tagged_above=-999 required=5 tests=[AWL=1.641, + RCVD_IN_DNSWL_MED=-2.3, RP_MATCHES_RCVD=-0.55] autolearn=disabled +Received: from arlo.cworth.org ([127.0.0.1]) + by localhost (arlo.cworth.org [127.0.0.1]) (amavisd-new, port 10024) + with ESMTP id W55gUB2-nRaA for ; + Mon, 21 Dec 2015 01:50:16 -0800 (PST) +Received: from max.feld.cvut.cz (max.feld.cvut.cz [147.32.192.36]) + by arlo.cworth.org (Postfix) with ESMTP id 4F74B6DE0BF6 + for ; Mon, 21 Dec 2015 01:50:16 -0800 (PST) +Received: from localhost (unknown [192.168.200.7]) + by max.feld.cvut.cz (Postfix) with ESMTP id 9E3D019F41EC + for ; Mon, 21 Dec 2015 10:41:34 +0100 (CET) +X-Virus-Scanned: IMAP STYX AMAVIS +Received: from max.feld.cvut.cz ([192.168.200.1]) + by localhost (styx.feld.cvut.cz [192.168.200.7]) (amavisd-new, port 10044) + with ESMTP id 77BayyHw4VNk for ; + Mon, 21 Dec 2015 10:41:32 +0100 (CET) +Received: from imap.feld.cvut.cz (imap.feld.cvut.cz [147.32.192.34]) + by max.feld.cvut.cz (Postfix) with ESMTP id B8DD819F43F9 + for ; Mon, 21 Dec 2015 10:41:32 +0100 (CET) +Received: from wsh by steelpick.2x.cz with local (Exim 4.86) + (envelope-from ) + id 1aAwyB-0000Yo-5i; Mon, 21 Dec 2015 10:41:31 +0100 +From: Michal Sojka +To: notmuch@notmuchmail.org +Subject: [PATCH v2] emacs: Improve notmuch-message-mode initialization +Date: Mon, 21 Dec 2015 10:41:15 +0100 +Message-Id: <1450690875-2111-2-git-send-email-sojkam1@fel.cvut.cz> +X-Mailer: git-send-email 2.6.4 +In-Reply-To: <1450690875-2111-1-git-send-email-sojkam1@fel.cvut.cz> +References: <1450690875-2111-1-git-send-email-sojkam1@fel.cvut.cz> +X-BeenThere: notmuch@notmuchmail.org +X-Mailman-Version: 2.1.20 +Precedence: list +List-Id: "Use and development of the notmuch mail system." + +List-Unsubscribe: , + +List-Archive: +List-Post: +List-Help: +List-Subscribe: , + +X-List-Received-Date: Mon, 21 Dec 2015 09:50:19 -0000 + +Recent addition of notmuch-message-mode introduced several problems: + +1. When message-setup-hook is used to set buffer local variables, + these settings are not effective, because all buffer local + variables are immediately erased by notmuch-message-mode + initialization. + +2. message-mode-hook gets invoked twice - first when message-mail + invokes message-mode and second when notmuch-mua-mail invokes + notmuch-message-mode. + +This commit fixes these problems by replacing a call to message-mail +with notmuch-specific code that is (hopefully) equivalent to +message-mail functionality before introduction of +notmuch-message-mode. + +We first initialize notmuch-message-mode with +notmuch-mua-pop-to-buffer, which is a modified version of +message-pop-to-buffer and then call message-setup-1, which is the only +functionality of message-mail that is needed for notmuch. +--- + emacs/notmuch-mua.el | 49 +++++++++++++++++++++++++++++++++++++++++++------ + 1 file changed, 43 insertions(+), 6 deletions(-) + +diff --git a/emacs/notmuch-mua.el b/emacs/notmuch-mua.el +index 466edd7..a66a306 100644 +--- a/emacs/notmuch-mua.el ++++ b/emacs/notmuch-mua.el +@@ -278,10 +278,36 @@ Note that these functions use `mail-citation-hook' if that is non-nil." + (define-key notmuch-message-mode-map (kbd "C-c C-c") #'notmuch-mua-send-and-exit) + (define-key notmuch-message-mode-map (kbd "C-c C-s") #'notmuch-mua-send) + +-(defun notmuch-mua-mail (&optional to subject other-headers &rest other-args) +- "Invoke the notmuch mail composition window. +- +-OTHER-ARGS are passed through to `message-mail'." ++(defun notmuch-mua-pop-to-buffer (name) ++ "Pop to buffer NAME, and warn if it already exists and is ++modified. This function is notmuch addaptation of ++`message-pop-to-buffer'." ++ (let ((buffer (get-buffer name))) ++ (if (and buffer ++ (buffer-name buffer)) ++ (let ((window (get-buffer-window buffer 0))) ++ (if window ++ ;; Raise the frame already displaying the message buffer. ++ (progn ++ (gnus-select-frame-set-input-focus (window-frame window)) ++ (select-window window)) ++ (funcall (notmuch-mua-get-switch-function) buffer) ++ (set-buffer buffer)) ++ (when (and (buffer-modified-p) ++ (not (prog1 ++ (y-or-n-p ++ "Message already being composed; erase? ") ++ (message nil)))) ++ (error "Message being composed"))) ++ (funcall (notmuch-mua-get-switch-function) name) ++ (set-buffer name)) ++ (erase-buffer) ++ (notmuch-message-mode))) ++ ++(defun notmuch-mua-mail (&optional to subject other-headers continue ++ switch-function yank-action send-actions ++ return-action &rest ignored) ++ "Invoke the notmuch mail composition window." + (interactive) + + (when notmuch-mua-user-agent-function +@@ -293,8 +319,19 @@ OTHER-ARGS are passed through to `message-mail'." + (push (cons 'From (concat + (notmuch-user-name) " <" (notmuch-user-primary-email) ">")) other-headers)) + +- (apply #'message-mail to subject other-headers other-args) +- (notmuch-message-mode) ++ (notmuch-mua-pop-to-buffer (message-buffer-name "mail" to)) ++ (message-setup-1 ++ ;; The following sexp is copied from `message-mail' ++ (nconc ++ `((To . ,(or to "")) (Subject . ,(or subject ""))) ++ ;; C-h f compose-mail says that headers should be specified as ++ ;; (string . value); however all the rest of message expects ++ ;; headers to be symbols, not strings (eg message-header-format-alist). ++ ;; http://lists.gnu.org/archive/html/emacs-devel/2011-01/msg00337.html ++ ;; We need to convert any string input, eg from rmail-start-mail. ++ (dolist (h other-headers other-headers) ++ (if (stringp (car h)) (setcar h (intern (capitalize (car h))))))) ++ yank-action send-actions return-action) + (notmuch-fcc-header-setup) + (message-sort-headers) + (message-hide-headers) +-- +2.6.4 + -- 2.26.2