[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[elpa] externals/ebdb d88f6a9 08/11: New function ebdb-parse-search-stri
From: |
Eric Abrahamsen |
Subject: |
[elpa] externals/ebdb d88f6a9 08/11: New function ebdb-parse-search-string |
Date: |
Wed, 19 Dec 2018 13:47:55 -0500 (EST) |
branch: externals/ebdb
commit d88f6a9cf85a3ce6bc73cb6bb5f67dadfe0be572
Author: Eric Abrahamsen <address@hidden>
Commit: Eric Abrahamsen <address@hidden>
New function ebdb-parse-search-string
* ebdb.el (ebdb-parse-search-string): New function that parses a
string containing multiple field values to search against into a
list of search cells. Don't actually do anything with this yet.
At some point, when we support AND searches, this will be handy.
---
ebdb.el | 31 +++++++++++++++++++++++++++++++
1 file changed, 31 insertions(+)
diff --git a/ebdb.el b/ebdb.el
index 64ab609..0d5af8f 100644
--- a/ebdb.el
+++ b/ebdb.el
@@ -5142,6 +5142,37 @@ additionally prompt to save each database individually."
(defvar ebdb-search-invert nil
"Bind to t to invert the result of `ebdb-search'.")
+(defun ebdb-parse-search-string (str)
+ "Parse STR as a search on multiple fields.
+STR should contain some number of <key>:<value> pairs, where key
+is the name of a field class, or a field class shortcut such as
+\"name\" or \"mail\", and the value is an arbitrary string value
+to search on.
+
+Values containing spaces should be enclosed in double quotes.
+
+Returns a list of (field value) pairs suitable for searching."
+ (let (parsed)
+ (with-temp-buffer
+ (insert str)
+ (goto-char (point-min))
+ (skip-syntax-forward " ")
+ (while (re-search-forward
+
"\\([[:ascii:]-]+\\):\\(?:\"\\(?2:[^\"]+\\)\"\\|\\(?2:[^[:space:]]+\\)\\)"
+ (point-max) t)
+ (let* ((key-string (match-string 1))
+ (sym (or (and (string-match-p "ebdb-field-" key-string)
+ (intern-soft key-string))
+ (intern-soft (format "ebdb-field-%s" key-string)))))
+ (if (and (class-p sym)
+ (child-of-class-p sym 'ebdb-field))
+ (push (list sym
+ (match-string 2))
+ parsed)
+ (signal 'ebdb-unparseable
+ (list "Invalid search key" key-string))))))
+ parsed))
+
;; Char folding: a simplified version of what happens in char-fold.el.
(defconst ebdb-char-fold-table
- [elpa] externals/ebdb updated (61403ee -> 3289ad4), Eric Abrahamsen, 2018/12/19
- [elpa] externals/ebdb 5e8bdfc 03/11: Adding too many newlines in multiline view, Eric Abrahamsen, 2018/12/19
- [elpa] externals/ebdb 0300dfe 02/11: Use org-tags-history when reading org tags fields, Eric Abrahamsen, 2018/12/19
- [elpa] externals/ebdb 994b52c 05/11: Call signal correctly, Eric Abrahamsen, 2018/12/19
- [elpa] externals/ebdb 5861f67 06/11: Use nth 2 instead of caddr, Eric Abrahamsen, 2018/12/19
- [elpa] externals/ebdb d88f6a9 08/11: New function ebdb-parse-search-string,
Eric Abrahamsen <=
- [elpa] externals/ebdb db6685d 09/11: Remove reference to ebdb-fill-column, Eric Abrahamsen, 2018/12/19
- [elpa] externals/ebdb 3365af9 04/11: Move ebdb-format-to-tmp-buffer from ebdb-format.el to ebdb-com.el, Eric Abrahamsen, 2018/12/19
- [elpa] externals/ebdb 3289ad4 11/11: Bump to 0.6.2, Eric Abrahamsen, 2018/12/19
- [elpa] externals/ebdb 4cb0dd2 01/11: Refactor record formatting, Eric Abrahamsen, 2018/12/19
- [elpa] externals/ebdb 2d9649e 10/11: defvar bbdb-time-stamp-format, Eric Abrahamsen, 2018/12/19
- [elpa] externals/ebdb 21d4521 07/11: Update migration process to handle BBDB file format 9, Eric Abrahamsen, 2018/12/19