>From 5cc4a9bdf491d9ef1ee4666467481bd106767b31 Mon Sep 17 00:00:00 2001 From: Leo Date: Fri, 30 Jul 2010 14:31:49 +0100 Subject: [PATCH 3/3] Read emall addresses with completion New function gnus-dired-read-email that uses bbdb-complete-name if available for email completion. Support adding Cc addresses. --- lisp/gnus/gnus-dired.el | 32 ++++++++++++++++++++++++++++---- 1 files changed, 28 insertions(+), 4 deletions(-) diff --git a/lisp/gnus/gnus-dired.el b/lisp/gnus/gnus-dired.el index cf2d177..9abb2e7 100644 --- a/lisp/gnus/gnus-dired.el +++ b/lisp/gnus/gnus-dired.el @@ -198,6 +198,14 @@ filenames." (declare-function message-send "message") (declare-function message-narrow-to-headers-or-head "message") +(defvar gnus-dired-read-email-map (make-sparse-keymap) + "Minibuffer keymap for `gnus-dired-read-email'.") +(set-keymap-parent gnus-dired-read-email-map minibuffer-local-map) +(when (fboundp 'bbdb-complete-name) + (define-key gnus-dired-read-email-map [tab] 'bbdb-complete-name)) +(defsubst gnus-dired-read-email (prompt) + (read-from-minibuffer prompt nil gnus-dired-read-email-map)) + (defun gnus-dired-map-over-mbox (function mbox-files) "Call FUNCTION for each email in MBOX-FILES." (require 'message) @@ -225,7 +233,7 @@ filenames." (interactive (dired-get-marked-files)) (assert (gnus-alive-p) nil "Gnus is not running") (gnus-agent-queue-setup "drafts") - (let (to-address) + (let (to-address cc-address) (gnus-dired-map-over-mbox (lambda () (message-mode) @@ -234,23 +242,39 @@ filenames." (nndraft-request-associate-buffer "drafts") (unless (message-fetch-field "to") (unless to-address - (setq to-address (read-string "To address: "))) + (setq to-address (gnus-dired-read-email "To: "))) (message-add-header (format "To: %s" to-address))) + (unless (or (message-fetch-field "cc") (eq cc-address 'no)) + (unless cc-address + (setq cc-address + (if (yes-or-no-p "Add Cc addresses? ") + (gnus-dired-read-email "Cc: ") + 'no))) + (unless (eq cc-address 'no) + (message-add-header (format "Cc: %s" cc-address)))) (save-buffer 0)) mbox-files))) (defun gnus-dired-send-mbox (&rest mbox-files) "Send all emails in MBOX-FILES." (interactive (dired-get-marked-files)) - (let (to-address) + (let (to-address cc-address) (gnus-dired-map-over-mbox (lambda () (message-mode) (message-narrow-to-headers-or-head) (unless (message-fetch-field "to") (unless to-address - (setq to-address (read-string "To address: "))) + (setq to-address (gnus-dired-read-email "To address: "))) (message-add-header (format "To: %s" to-address))) + (unless (or (message-fetch-field "cc") (eq cc-address 'no)) + (unless cc-address + (setq cc-address + (if (yes-or-no-p "Add Cc addresses? ") + (gnus-dired-read-email "Cc: ") + 'no))) + (unless (eq cc-address 'no) + (message-add-header (format "Cc: %s" cc-address)))) (message-send)) mbox-files))) -- 1.7.3