From 2509ef74d98b1f7f3308217a67a966e1a580735e Mon Sep 17 00:00:00 2001 From: Austin Clements Date: Wed, 23 Oct 2013 20:21:55 +2000 Subject: [PATCH] [PATCH v2 2/8] emacs: Take prompt and current tags in `notmuch-read-tag-changes' --- 02/eb64841962585a55d8e5e4897eae84cd5cf7a6 | 153 ++++++++++++++++++++++ 1 file changed, 153 insertions(+) create mode 100644 02/eb64841962585a55d8e5e4897eae84cd5cf7a6 diff --git a/02/eb64841962585a55d8e5e4897eae84cd5cf7a6 b/02/eb64841962585a55d8e5e4897eae84cd5cf7a6 new file mode 100644 index 000000000..09ece02f4 --- /dev/null +++ b/02/eb64841962585a55d8e5e4897eae84cd5cf7a6 @@ -0,0 +1,153 @@ +Return-Path: +X-Original-To: notmuch@notmuchmail.org +Delivered-To: notmuch@notmuchmail.org +Received: from localhost (localhost [127.0.0.1]) + by olra.theworths.org (Postfix) with ESMTP id B3E39431FAE + for ; Tue, 22 Oct 2013 17:22:31 -0700 (PDT) +X-Virus-Scanned: Debian amavisd-new at olra.theworths.org +X-Spam-Flag: NO +X-Spam-Score: -0.7 +X-Spam-Level: +X-Spam-Status: No, score=-0.7 tagged_above=-999 required=5 + tests=[RCVD_IN_DNSWL_LOW=-0.7] autolearn=disabled +Received: from olra.theworths.org ([127.0.0.1]) + by localhost (olra.theworths.org [127.0.0.1]) (amavisd-new, port 10024) + with ESMTP id JuWa5BY8Ep22 for ; + Tue, 22 Oct 2013 17:22:26 -0700 (PDT) +Received: from dmz-mailsec-scanner-5.mit.edu (dmz-mailsec-scanner-5.mit.edu + [18.7.68.34]) + by olra.theworths.org (Postfix) with ESMTP id 11059429E29 + for ; Tue, 22 Oct 2013 17:22:09 -0700 (PDT) +X-AuditID: 12074422-b7f5a8e000000a34-11-526716b0867f +Received: from mailhub-auth-3.mit.edu ( [18.9.21.43]) + by dmz-mailsec-scanner-5.mit.edu (Symantec Messaging Gateway) with SMTP + id AF.C5.02612.0B617625; Tue, 22 Oct 2013 20:22:08 -0400 (EDT) +Received: from outgoing.mit.edu (outgoing-auth-1.mit.edu [18.9.28.11]) + by mailhub-auth-3.mit.edu (8.13.8/8.9.2) with ESMTP id r9N0M5gN027447; + Tue, 22 Oct 2013 20:22:05 -0400 +Received: from drake.dyndns.org + (216-15-114-40.c3-0.arl-ubr1.sbo-arl.ma.cable.rcn.com + [216.15.114.40]) (authenticated bits=0) + (User authenticated as amdragon@ATHENA.MIT.EDU) + by outgoing.mit.edu (8.13.8/8.12.4) with ESMTP id r9N0M3ir005837 + (version=TLSv1/SSLv3 cipher=AES256-SHA bits=256 verify=NOT); + Tue, 22 Oct 2013 20:22:04 -0400 +Received: from amthrax by drake.dyndns.org with local (Exim 4.77) + (envelope-from ) + id 1VYmD5-0008KE-N2; Tue, 22 Oct 2013 20:22:03 -0400 +From: Austin Clements +To: notmuch@notmuchmail.org +Subject: [PATCH v2 2/8] emacs: Take prompt and current tags in + `notmuch-read-tag-changes' +Date: Tue, 22 Oct 2013 20:21:55 -0400 +Message-Id: <1382487721-31776-3-git-send-email-amdragon@mit.edu> +X-Mailer: git-send-email 1.8.4.rc3 +In-Reply-To: <1382487721-31776-1-git-send-email-amdragon@mit.edu> +References: <1382487721-31776-1-git-send-email-amdragon@mit.edu> +X-Brightmail-Tracker: + H4sIAAAAAAAAA+NgFtrNIsWRmVeSWpSXmKPExsUixCmqrbtBLD3IoOukscXquTwW12/OZHZg + 8tg56y67x7NVt5gDmKK4bFJSczLLUov07RK4Mvqm9jMXTJepWPP/DHMD4wTxLkZODgkBE4kN + LYdYIWwxiQv31rN1MXJxCAnsY5RY/bKdCcLZyCjxe8MGdgjnDpNE348NLCAtQgJzGSXau9RA + bDYBDYlt+5czgtgiAtISO+/OBhvLLOAo8Xn/IjYQW1ggUmLXx6dAcQ4OFgFViY6uMJAwr4CD + xN6bfcwQVyhJLDy1DayVE6j1zY4PbBCrHCSm7DzDMoGRfwEjwypG2ZTcKt3cxMyc4tRk3eLk + xLy81CJdU73czBK91JTSTYygMGJ3UdrB+POg0iFGAQ5GJR7eBy1pQUKsiWXFlbmHGCU5mJRE + edX504OE+JLyUyozEosz4otKc1KLDzFKcDArifA2+wKV86YkVlalFuXDpKQ5WJTEeW9x2AcJ + CaQnlqRmp6YWpBbBZGU4OJQkeLtEgYYKFqWmp1akZeaUIKSZODhBhvMADV8BUsNbXJCYW5yZ + DpE/xagoJc57BiQhAJLIKM2D64XF+StGcaBXhCHaeYApAq77FdBgJqDBU5aAXF1ckoiQkmpg + TDiQemLmi8mpC5/b75Ofr9u91ZzRfQNv7emL2z86nV3rGXLlmOIGvyTOlcfFnznoXd+qvX39 + 2XSLp8bC+TavzBsybzOZshnyTT/9tVnBUf/R7jcLGzdlPz7EYLb0nnu9cbNRbY/LqQO7nYvf + rd2/NXxO0jNNl0gfdYeCZW2R+cb7rh3cGLjlhBJLcUaioRZzUXEiAMhRcr3OAgAA +X-BeenThere: notmuch@notmuchmail.org +X-Mailman-Version: 2.1.13 +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: Wed, 23 Oct 2013 00:22:32 -0000 + +This modifies the interface of `notmuch-read-tag-changes' to take an +optional prompt string as well as a list of existing tags instead of a +query. This list of tags is used to populate the tag removal +completions and lets the caller compute these in a more +efficient/consistent manner than performing a potentially large or +complex query. This patch also updates the sole current caller of +`notmuch-read-tag-changes'. +--- + emacs/notmuch-tag.el | 29 ++++++++++++++++++++--------- + 1 file changed, 20 insertions(+), 9 deletions(-) + +diff --git a/emacs/notmuch-tag.el b/emacs/notmuch-tag.el +index 064cfa8..3ad53b2 100644 +--- a/emacs/notmuch-tag.el ++++ b/emacs/notmuch-tag.el +@@ -188,7 +188,10 @@ the messages that were tagged" + "Variable to store minibuffer history for + `notmuch-read-tag-changes' function.") + +-(defun notmuch-tag-completions (&optional search-terms) ++(defun notmuch-tag-completions (&rest search-terms) ++ "Return a list of tags for messages matching SEARCH-TERMS. ++ ++Returns all tags if no search terms are given." + (if (null search-terms) + (setq search-terms (list "*"))) + (split-string +@@ -199,17 +202,24 @@ the messages that were tagged" + "\n+" t)) + + (defun notmuch-select-tag-with-completion (prompt &rest search-terms) +- (let ((tag-list (notmuch-tag-completions search-terms))) ++ (let ((tag-list (apply #'notmuch-tag-completions search-terms))) + (completing-read prompt tag-list nil nil nil 'notmuch-select-tag-history))) + +-(defun notmuch-read-tag-changes (&optional initial-input &rest search-terms) ++(defun notmuch-read-tag-changes (current-tags &optional prompt initial-input) ++ "Prompt for tag changes in the minibuffer. ++ ++CURRENT-TAGS is a list of tags that are present on the message or ++messages to be changed. These are offered as tag removal ++completions. CURRENT-TAGS may contain duplicates. PROMPT, if ++non-nil, is the query string to present in the minibuffer. It ++defaults to \"Tags\". INITIAL-INPUT, if non-nil, will be the ++initial input in the minibuffer." ++ + (let* ((all-tag-list (notmuch-tag-completions)) + (add-tag-list (mapcar (apply-partially 'concat "+") all-tag-list)) +- (remove-tag-list (mapcar (apply-partially 'concat "-") +- (if (null search-terms) +- all-tag-list +- (notmuch-tag-completions search-terms)))) ++ (remove-tag-list (mapcar (apply-partially 'concat "-") current-tags)) + (tag-list (append add-tag-list remove-tag-list)) ++ (prompt (concat (or prompt "Tags") " (+add -drop): ")) + (crm-separator " ") + ;; By default, space is bound to "complete word" function. + ;; Re-bind it to insert a space instead. Note that +@@ -219,7 +229,7 @@ the messages that were tagged" + (set-keymap-parent map crm-local-completion-map) + (define-key map " " 'self-insert-command) + map))) +- (delete "" (completing-read-multiple "Tags (+add -drop): " ++ (delete "" (completing-read-multiple prompt + tag-list nil nil initial-input + 'notmuch-read-tag-changes-history)))) + +@@ -260,7 +270,8 @@ notmuch-after-tag-hook will be run." + ;; Perform some validation + (if (string-or-null-p tag-changes) + (if (or (string= tag-changes "-") (string= tag-changes "+") (null tag-changes)) +- (setq tag-changes (notmuch-read-tag-changes tag-changes query)) ++ (setq tag-changes (notmuch-read-tag-changes ++ (notmuch-tag-completions query) nil tag-changes)) + (setq tag-changes (list tag-changes)))) + (mapc (lambda (tag-change) + (unless (string-match-p "^[-+]\\S-+$" tag-change) +-- +1.8.4.rc3 + -- 2.26.2