[PATCH 1/3] emacs: Introduce generic boolean term escaping function

Austin Clements amdragon at MIT.EDU
Fri Oct 26 13:18:10 PDT 2012


Currently, we only properly escape stashed id queries, but there are
other places where the Emacs UI constructs queries for boolean terms.
Since this escaping function is meant to be used in other places, it
avoids escaping strings that don't need escaping.
---
 emacs/notmuch-lib.el |   16 +++++++++++++++-
 test/emacs           |    2 +-
 2 files changed, 16 insertions(+), 2 deletions(-)

diff --git a/emacs/notmuch-lib.el b/emacs/notmuch-lib.el
index 69867ad..eeb005f 100644
--- a/emacs/notmuch-lib.el
+++ b/emacs/notmuch-lib.el
@@ -161,9 +161,23 @@ the user hasn't set this variable with the old or new value."
 	"[No Subject]"
       subject)))
 
+(defun notmuch-escape-boolean-term (term)
+  "Escape a boolean term for use in a query.
+
+The caller is responsible for prepending the term prefix and a
+colon.  This performs minimal escaping in order to produce
+user-friendly queries."
+
+  (save-match-data
+    (if (or (equal term "")
+	    (string-match "[ ()]\\|^\"" term))
+	;; Requires escaping
+	(concat "\"" (replace-regexp-in-string "\"" "\"\"" term t t) "\"")
+      term)))
+
 (defun notmuch-id-to-query (id)
   "Return a query that matches the message with id ID."
-  (concat "id:\"" (replace-regexp-in-string "\"" "\"\"" id t t) "\""))
+  (concat "id:" (notmuch-escape-boolean-term id)))
 
 ;;
 
diff --git a/test/emacs b/test/emacs
index 21f1d16..44f641e 100755
--- a/test/emacs
+++ b/test/emacs
@@ -667,7 +667,7 @@ Some One <someone at somewhere.org>
 Some One Else <notsomeone at somewhere.org>
 Notmuch <notmuch at notmuchmail.org>
 Stash my stashables
-id:"bought"
+id:bought
 bought
 inbox,stashtest
 ${gen_msg_filename}
-- 
1.7.10



More information about the notmuch mailing list