+2008-08-20 Michael Albinus <michael.albinus@gmx.de>
+
+ * net/xesam.el (xesam-highlight-string): Precise doc string.
+ (xesam-highlight-buffer): New defun.
+ (xesam-refresh-entry): Use it. Better check for sourceModified.
+
2008-08-19 Chong Yidong <cyd@stupidchicken.com>
* edmacro.el (edmacro-parse-keys): Catch events with spaces in
(format "*%s/%s*" service search))
(defun xesam-highlight-string (string)
- "Highlight text enclosed by <b> and </b>."
+ "Highlight text enclosed by <b> and </b>.
+Return propertized STRING."
(while (string-match "\\(.*\\)\\(<b>\\)\\(.*\\)\\(</b>\\)\\(.*\\)" string)
(setq string
(format
(match-string 5 string))))
string)
+(defun xesam-highlight-buffer (regexp &optional buffer)
+ "Highlight text matching REGEXP in BUFFER.
+If BUFFER is nil, use the current buffer"
+ (with-current-buffer (or buffer (current-buffer))
+ (save-excursion
+ (let ((case-fold-search t))
+ (goto-char (point-min))
+ (while (re-search-forward regexp nil t)
+ (overlay-put
+ (make-overlay
+ (match-beginning 0) (match-end 0)) 'face 'xesam-highlight))))))
+
(defun xesam-refresh-entry (engine entry)
"Refreshes one entry in the search buffer."
(let* ((result (nth (1- xesam-current) xesam-objects))
widget :tag (xesam-highlight-string (widget-get widget :tag))))
;; Last Modified.
- (when (widget-member widget :xesam:sourceModified)
+ (when (and (widget-member widget :xesam:sourceModified)
+ (not
+ (zerop
+ (string-to-number (widget-get widget :xesam:sourceModified)))))
(widget-put
widget :tag
(format
(widget-put
widget :notify
(lambda (widget &rest ignore)
- (find-file
- (url-filename (url-generic-parse-url (widget-value widget))))))
+ (let ((query xesam-query))
+ (find-file
+ (url-filename (url-generic-parse-url (widget-value widget))))
+ (xesam-highlight-buffer (regexp-opt (split-string query nil t))))))
(widget-put
widget :value
(url-filename (url-generic-parse-url (widget-get widget :xesam:url))))))
;;; TODO:
+;; * Buffer highlighting needs better analysis of query string.
;; * Accept input while retrieving prefetched hits. `run-at-time'?
;; * With prefix, let's choose search engine.
;; * Minibuffer completion for user queries.