mirror of
https://git.notmuchmail.org/git/notmuch
synced 2024-11-25 04:18:08 +01:00
emacs: Improve notmuch-message-mode initialization
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.
This commit is contained in:
parent
b645f41605
commit
570c0aeb40
1 changed files with 42 additions and 5 deletions
|
@ -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-c") #'notmuch-mua-send-and-exit)
|
||||||
(define-key notmuch-message-mode-map (kbd "C-c C-s") #'notmuch-mua-send)
|
(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)
|
(defun notmuch-mua-pop-to-buffer (name)
|
||||||
"Invoke the notmuch mail composition window.
|
"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)))
|
||||||
|
|
||||||
OTHER-ARGS are passed through to `message-mail'."
|
(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)
|
(interactive)
|
||||||
|
|
||||||
(when notmuch-mua-user-agent-function
|
(when notmuch-mua-user-agent-function
|
||||||
|
@ -293,8 +319,19 @@ OTHER-ARGS are passed through to `message-mail'."
|
||||||
(push (cons 'From (concat
|
(push (cons 'From (concat
|
||||||
(notmuch-user-name) " <" (notmuch-user-primary-email) ">")) other-headers))
|
(notmuch-user-name) " <" (notmuch-user-primary-email) ">")) other-headers))
|
||||||
|
|
||||||
(apply #'message-mail to subject other-headers other-args)
|
(notmuch-mua-pop-to-buffer (message-buffer-name "mail" to))
|
||||||
(notmuch-message-mode)
|
(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)
|
(notmuch-fcc-header-setup)
|
||||||
(message-sort-headers)
|
(message-sort-headers)
|
||||||
(message-hide-headers)
|
(message-hide-headers)
|
||||||
|
|
Loading…
Reference in a new issue