[PATCH] emacs: Let the user choose where to compose new mails

Tomi Ollila tomi.ollila at iki.fi
Sat Apr 28 00:23:05 PDT 2012


On Sat, Apr 14 2012, Jameson Graef Rollins <jrollins at finestructure.net> wrote:

> From: Thomas Jost <schnouki at schnouki.net>
>
> Introduce a new defcustom notmuch-mua-compose-in that allows users to
> specify where new mails are composed., either in the current window or
> in a new window or frame.
>
> Signed-off-by: Jameson Rollins <jrollins at finestructure.net>
> ---
> This is a rebase of this original patch against the current master,
> with an expanded commit message.

+1

Tomi

>
>  emacs/notmuch-mua.el |   42 +++++++++++++++++++++++++++++++++++++++---
>  1 file changed, 39 insertions(+), 3 deletions(-)
>
> diff --git a/emacs/notmuch-mua.el b/emacs/notmuch-mua.el
> index 87bd88d..a96ac3d 100644
> --- a/emacs/notmuch-mua.el
> +++ b/emacs/notmuch-mua.el
> @@ -36,6 +36,21 @@
>    :group 'notmuch-send
>    :group 'notmuch-hooks)
>  
> +(defcustom notmuch-mua-compose-in 'current-window
> +  "Where to create the mail buffer used to compose a new message.
> +  Possible values are `current-window' (default), `new-window'
> +  and `new-frame'. If set to `current-window', the mail buffer
> +  will be displayed in the current window, so the old buffer will
> +  be restored when the mail buffer is killed. If set to
> +  `new-window' or `new-frame', the mail buffer will be displayed
> +  in a new window/frame that will be destroyed when the buffer is
> +  killed. You may want to customize `message-kill-buffer-on-exit'
> +  accordingly."
> +  :group 'notmuch
> +  :type '(choice (const :tag "Compose in the current window" current-window)
> +		 (const :tag "Compose mail in a new window"  new-window)
> +		 (const :tag "Compose mail in a new frame"   new-frame)))
> +
>  (defcustom notmuch-mua-user-agent-function 'notmuch-mua-user-agent-full
>    "Function used to generate a `User-Agent:' string. If this is
>  `nil' then no `User-Agent:' will be generated."
> @@ -55,6 +70,23 @@ list."
>  
>  ;;
>  
> +(defun notmuch-mua-get-switch-function ()
> +  "Get a switch function according to `notmuch-mua-compose-in'."
> +  (cond ((eq notmuch-mua-compose-in 'current-window)
> +	 'switch-to-buffer)
> +	((eq notmuch-mua-compose-in 'new-window)
> +	 'switch-to-buffer-other-window)
> +	((eq notmuch-mua-compose-in 'new-frame)
> +	 'switch-to-buffer-other-frame)
> +	(t (error "Invalid value for `notmuch-mua-compose-in'"))))
> +
> +(defun notmuch-mua-maybe-set-window-dedicated ()
> +  "Set the selected window as dedicated according to
> +`notmuch-mua-compose-in'."
> +  (when (or (eq notmuch-mua-compose-in 'new-frame)
> +	    (eq notmuch-mua-compose-in 'new-window))
> +    (set-window-dedicated-p (selected-window) t)))
> +
>  (defun notmuch-mua-user-agent-full ()
>    "Generate a `User-Agent:' string suitable for notmuch."
>    (concat (notmuch-mua-user-agent-notmuch)
> @@ -148,7 +180,8 @@ list."
>  		     collect pair)))
>  	  (notmuch-mua-mail (plist-get reply-headers :To)
>  			    (plist-get reply-headers :Subject)
> -			    (notmuch-headers-plist-to-alist reply-headers))))
> +			    (notmuch-headers-plist-to-alist reply-headers)
> +			    nil (notmuch-mua-get-switch-function))))
>  
>        ;; Insert the message body - but put it in front of the signature
>        ;; if one is present
> @@ -186,6 +219,7 @@ list."
>    (set-buffer-modified-p nil))
>  
>  (defun notmuch-mua-forward-message ()
> +  (funcall (notmuch-mua-get-switch-function) (current-buffer))
>    (message-forward)
>  
>    (when notmuch-mua-user-agent-function
> @@ -195,6 +229,7 @@ list."
>    (message-sort-headers)
>    (message-hide-headers)
>    (set-buffer-modified-p nil)
> +  (notmuch-mua-maybe-set-window-dedicated)
>  
>    (message-goto-to))
>  
> @@ -217,6 +252,7 @@ OTHER-ARGS are passed through to `message-mail'."
>    (message-sort-headers)
>    (message-hide-headers)
>    (set-buffer-modified-p nil)
> +  (notmuch-mua-maybe-set-window-dedicated)
>  
>    (message-goto-to))
>  
> @@ -272,8 +308,8 @@ the From: address first."
>    (interactive "P")
>    (let ((other-headers
>  	 (when (or prompt-for-sender notmuch-always-prompt-for-sender)
> -	   (list (cons 'From (notmuch-mua-prompt-for-sender))))))
> -    (notmuch-mua-mail nil nil other-headers)))
> +	   (list (cons "From" (notmuch-mua-prompt-for-sender))))))
> +    (notmuch-mua-mail nil nil other-headers nil (notmuch-mua-get-switch-function))))
>  
>  (defun notmuch-mua-new-forward-message (&optional prompt-for-sender)
>    "Invoke the notmuch message forwarding window.
> -- 
> 1.7.9.5
>
> _______________________________________________
> notmuch mailing list
> notmuch at notmuchmail.org
> http://notmuchmail.org/mailman/listinfo/notmuch


More information about the notmuch mailing list