Mercurial > emacs
annotate lisp/net/xesam.el @ 97311:2be7f5365285
Improve docstring.
author | Vinicius Jose Latorre <viniciusjl@ig.com.br> |
---|---|
date | Wed, 06 Aug 2008 03:35:04 +0000 |
parents | 6cec2902d7b8 |
children | 22514244a76d |
rev | line source |
---|---|
96989
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
1 ;;; xesam.el --- Xesam interface to search engines. |
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
2 |
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
3 ;; Copyright (C) 2008 Free Software Foundation, Inc. |
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
4 |
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
5 ;; Author: Michael Albinus <michael.albinus@gmx.de> |
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
6 ;; Keywords: tools, hypermedia |
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
7 |
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
8 ;; This file is part of GNU Emacs. |
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
9 |
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
10 ;; GNU Emacs is free software; you can redistribute it and/or modify |
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
11 ;; it under the terms of the GNU General Public License as published by |
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
12 ;; the Free Software Foundation; either version 3, or (at your option) |
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
13 ;; any later version. |
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
14 |
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
15 ;; GNU Emacs is distributed in the hope that it will be useful, |
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
16 ;; but WITHOUT ANY WARRANTY; without even the implied warranty of |
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
17 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
18 ;; GNU General Public License for more details. |
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
19 |
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
20 ;; You should have received a copy of the GNU General Public License |
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
21 ;; along with GNU Emacs; see the file COPYING. If not, see |
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
22 ;; <http://www.gnu.org/licenses/>. |
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
23 |
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
24 ;;; Commentary: |
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
25 |
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
26 ;; This package provides an interface to the Xesam, a D-Bus based "eXtEnsible |
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
27 ;; Search And Metadata specification". It has been tested with |
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
28 ;; |
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
29 ;; xesam-glib 0.3.4, xesam-tools 0.6.1 |
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
30 ;; beagle 0.3.7, beagle-xesam 0.2 |
97170
dfc12ea9589f
* net/xesam.el (xesam-type, xesam-query, xesam-xml-string): New
Michael Albinus <michael.albinus@gmx.de>
parents:
97038
diff
changeset
|
31 ;; strigi 0.5.11 |
96989
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
32 |
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
33 ;; The precondition for this package is a D-Bus aware Emacs. This is |
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
34 ;; configured per default, when Emacs is built on a machine running |
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
35 ;; D-Bus. Furthermore, there must be at least one search engine |
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
36 ;; running, which support the Xesam interface. Beagle and strigi have |
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
37 ;; been tested; tracker, pinot and recoll are also said to support |
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
38 ;; Xesam. You can check the existence of such a search engine by |
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
39 ;; |
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
40 ;; (dbus-list-queued-owners :session "org.freedesktop.xesam.searcher") |
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
41 |
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
42 ;; In order to start a search, you must load xesam.el: |
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
43 ;; |
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
44 ;; (require 'xesam) |
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
45 |
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
46 ;; xesam.el supports two types of queries, which are explained *very* short: |
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
47 ;; |
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
48 ;; * Full text queries. Just search keys shall be given, like |
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
49 ;; |
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
50 ;; hello world |
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
51 ;; |
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
52 ;; A full text query in xesam.el is restricted to files. |
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
53 ;; |
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
54 ;; * Xesam End User Search Language queries. The Xesam query language |
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
55 ;; is described at <http://xesam.org/main/XesamUserSearchLanguage>, |
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
56 ;; which must be consulted for the whole features. |
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
57 ;; |
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
58 ;; A query string consists of search keys, collectors, selectors, |
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
59 ;; and phrases. Search keys are words like in a full text query: |
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
60 ;; |
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
61 ;; hello word |
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
62 ;; |
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
63 ;; A selector is a tuple <keyword><relation>. <keyword> can be any |
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
64 ;; predefined Xesam keyword, the most common keywords are "ext" |
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
65 ;; (file name extension), "format " (mime type), "tag" (user |
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
66 ;; keywords) and "type" (types of items, like "audio", "file", |
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
67 ;; "picture", "attachment"). <relation> is a comparison to a value, |
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
68 ;; which must be a string (relation ":" or "=") or number (relation |
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
69 ;; "<=", ">=", "<", ">"): |
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
70 ;; |
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
71 ;; type:attachment ext=el |
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
72 ;; |
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
73 ;; A collector is one of the items "AND", "and", "&&", "OR", "or", |
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
74 ;; "||", or "-". The default collector on multiple terms is "AND"; |
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
75 ;; "-" means "AND NOT". |
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
76 ;; |
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
77 ;; albinus -type:file |
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
78 ;; |
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
79 ;; A phrase is a string enclosed in quotes, with appended modifiers |
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
80 ;; (single letters). Examples of modifiers are "c" (case |
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
81 ;; sensitive), "C" (case insensitive), "e" (exact match), "r" |
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
82 ;; (regular expression): |
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
83 ;; |
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
84 ;; "Hello world"c |
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
85 |
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
86 ;; You can customize, whether you want to apply a Xesam user query, or |
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
87 ;; a full text query. Note, that not every search engine supports |
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
88 ;; both query types. |
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
89 ;; |
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
90 ;; (setq xesam-query-type 'fulltext-query) |
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
91 ;; |
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
92 ;; Another option to be customised is the number of hits to be |
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
93 ;; presented at once. |
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
94 ;; |
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
95 ;; (setq xesam-hits-per-page 50) |
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
96 |
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
97 ;; A search can be started by the command |
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
98 ;; |
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
99 ;; M-x xesam-search |
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
100 ;; |
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
101 ;; When several search engines are registered, the engine to be used |
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
102 ;; can be selected via minibuffer completion. Afterwards, the query |
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
103 ;; shall be entered in the minibuffer. |
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
104 |
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
105 ;;; Code: |
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
106 |
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
107 ;; D-Bus support in the Emacs core can be disabled with configuration |
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
108 ;; option "--without-dbus". Declare used subroutines and variables. |
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
109 (declare-function dbus-call-method "dbusbind.c") |
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
110 (declare-function dbus-register-signal "dbusbind.c") |
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
111 |
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
112 (require 'dbus) |
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
113 |
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
114 ;; Pacify byte compiler. |
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
115 (eval-when-compile |
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
116 (require 'cl)) |
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
117 |
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
118 ;; Widgets are used to highlight the search results. |
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
119 (require 'widget) |
97289
6cec2902d7b8
* net/xesam.el (top): Require `wid-edit' always.
Michael Albinus <michael.albinus@gmx.de>
parents:
97214
diff
changeset
|
120 (require 'wid-edit) |
96989
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
121 |
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
122 ;; `run-at-time' is used in the signal handler. |
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
123 (require 'timer) |
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
124 |
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
125 ;; The default search field is "xesam:url". It must be inspected. |
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
126 (require 'url) |
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
127 |
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
128 (defgroup xesam nil |
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
129 "Xesam compatible interface to search engines." |
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
130 :group 'extensions |
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
131 :group 'hypermedia |
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
132 :version "23.1") |
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
133 |
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
134 (defcustom xesam-query-type 'user-query |
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
135 "Xesam query language type." |
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
136 :group 'xesam |
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
137 :type '(choice |
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
138 (const :tag "Xesam user query" user-query) |
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
139 (const :tag "Xesam fulltext query" fulltext-query))) |
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
140 |
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
141 (defcustom xesam-hits-per-page 20 |
97289
6cec2902d7b8
* net/xesam.el (top): Require `wid-edit' always.
Michael Albinus <michael.albinus@gmx.de>
parents:
97214
diff
changeset
|
142 "Number of search hits to be displayed in the result buffer." |
96989
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
143 :group 'xesam |
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
144 :type 'integer) |
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
145 |
97289
6cec2902d7b8
* net/xesam.el (top): Require `wid-edit' always.
Michael Albinus <michael.albinus@gmx.de>
parents:
97214
diff
changeset
|
146 (defface xesam-mode-line '((t :inherit mode-line-emphasis)) |
6cec2902d7b8
* net/xesam.el (top): Require `wid-edit' always.
Michael Albinus <michael.albinus@gmx.de>
parents:
97214
diff
changeset
|
147 "Face to highlight mode line." |
6cec2902d7b8
* net/xesam.el (top): Require `wid-edit' always.
Michael Albinus <michael.albinus@gmx.de>
parents:
97214
diff
changeset
|
148 :group 'xesam) |
6cec2902d7b8
* net/xesam.el (top): Require `wid-edit' always.
Michael Albinus <michael.albinus@gmx.de>
parents:
97214
diff
changeset
|
149 |
6cec2902d7b8
* net/xesam.el (top): Require `wid-edit' always.
Michael Albinus <michael.albinus@gmx.de>
parents:
97214
diff
changeset
|
150 (defface xesam-highlight '((t :inherit match)) |
6cec2902d7b8
* net/xesam.el (top): Require `wid-edit' always.
Michael Albinus <michael.albinus@gmx.de>
parents:
97214
diff
changeset
|
151 "Face to highlight query entries. |
6cec2902d7b8
* net/xesam.el (top): Require `wid-edit' always.
Michael Albinus <michael.albinus@gmx.de>
parents:
97214
diff
changeset
|
152 It will be overlayed by `widget-documentation-face', so it shall |
6cec2902d7b8
* net/xesam.el (top): Require `wid-edit' always.
Michael Albinus <michael.albinus@gmx.de>
parents:
97214
diff
changeset
|
153 be different at least in one face property not set in that face." |
6cec2902d7b8
* net/xesam.el (top): Require `wid-edit' always.
Michael Albinus <michael.albinus@gmx.de>
parents:
97214
diff
changeset
|
154 :group 'xesam) |
6cec2902d7b8
* net/xesam.el (top): Require `wid-edit' always.
Michael Albinus <michael.albinus@gmx.de>
parents:
97214
diff
changeset
|
155 |
96989
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
156 (defvar xesam-debug nil |
97038
b201d17750ad
* net/xesam.el (xesam-from): Remove defvar.
Michael Albinus <michael.albinus@gmx.de>
parents:
96996
diff
changeset
|
157 "Insert debug information in the help echo.") |
96989
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
158 |
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
159 (defconst xesam-service-search "org.freedesktop.xesam.searcher" |
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
160 "The D-Bus name used to talk to Xesam.") |
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
161 |
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
162 (defconst xesam-path-search "/org/freedesktop/xesam/searcher/main" |
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
163 "The D-Bus object path used to talk to Xesam.") |
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
164 |
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
165 ;; Methods: "NewSession", "SetProperty", "GetProperty", |
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
166 ;; "CloseSession", "NewSearch", "StartSearch", "GetHitCount", |
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
167 ;; "GetHits", "GetHitData", "CloseSearch" and "GetState". |
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
168 ;; Signals: "HitsAdded", "HitsRemoved", "HitsModified", "SearchDone" |
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
169 ;; and "StateChanged". |
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
170 (defconst xesam-interface-search "org.freedesktop.xesam.Search" |
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
171 "The D-Bus Xesam search interface.") |
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
172 |
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
173 (defconst xesam-all-fields |
97214
004f6dc1c1a0
* net/xesam.el (xesam-all-fields): Remove source and content
Michael Albinus <michael.albinus@gmx.de>
parents:
97170
diff
changeset
|
174 '("xesam:35mmEquivalent" "xesam:aimContactMedium" "xesam:aperture" |
004f6dc1c1a0
* net/xesam.el (xesam-all-fields): Remove source and content
Michael Albinus <michael.albinus@gmx.de>
parents:
97170
diff
changeset
|
175 "xesam:aspectRatio" "xesam:attachmentEncoding" "xesam:attendee" |
004f6dc1c1a0
* net/xesam.el (xesam-all-fields): Remove source and content
Michael Albinus <michael.albinus@gmx.de>
parents:
97170
diff
changeset
|
176 "xesam:audioBirate" "xesam:audioChannels" "xesam:audioCodec" |
004f6dc1c1a0
* net/xesam.el (xesam-all-fields): Remove source and content
Michael Albinus <michael.albinus@gmx.de>
parents:
97170
diff
changeset
|
177 "xesam:audioCodecType" "xesam:audioSampleFormat" "xesam:audioSampleRate" |
004f6dc1c1a0
* net/xesam.el (xesam-all-fields): Remove source and content
Michael Albinus <michael.albinus@gmx.de>
parents:
97170
diff
changeset
|
178 "xesam:author" "xesam:bcc" "xesam:birthDate" "xesam:blogContactURL" |
96989
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
179 "xesam:cameraManufacturer" "xesam:cameraModel" "xesam:cc" "xesam:ccdWidth" |
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
180 "xesam:cellPhoneNumber" "xesam:characterCount" "xesam:charset" |
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
181 "xesam:colorCount" "xesam:colorSpace" "xesam:columnCount" "xesam:comment" |
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
182 "xesam:commentCharacterCount" "xesam:conflicts" "xesam:contactMedium" |
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
183 "xesam:contactName" "xesam:contactNick" "xesam:contactPhoto" |
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
184 "xesam:contactURL" "xesam:contains" "xesam:contenKeyword" |
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
185 "xesam:contentComment" "xesam:contentCreated" "xesam:contentModified" |
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
186 "xesam:contentType" "xesam:contributor" "xesam:copyright" "xesam:creator" |
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
187 "xesam:definesClass" "xesam:definesFunction" "xesam:definesGlobalVariable" |
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
188 "xesam:deletionTime" "xesam:depends" "xesam:description" "xesam:device" |
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
189 "xesam:disclaimer" "xesam:documentCategory" "xesam:duration" |
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
190 "xesam:emailAddress" "xesam:eventEnd" "xesam:eventLocation" |
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
191 "xesam:eventStart" "xesam:exposureBias" "xesam:exposureProgram" |
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
192 "xesam:exposureTime" "xesam:faxPhoneNumber" "xesam:fileExtension" |
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
193 "xesam:fileSystemType" "xesam:flashUsed" "xesam:focalLength" |
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
194 "xesam:focusDistance" "xesam:formatSubtype" "xesam:frameCount" |
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
195 "xesam:frameRate" "xesam:freeSpace" "xesam:gender" "xesam:generator" |
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
196 "xesam:generatorOptions" "xesam:group" "xesam:hash" "xesam:hash" |
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
197 "xesam:height" "xesam:homeEmailAddress" "xesam:homePhoneNumber" |
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
198 "xesam:homePostalAddress" "xesam:homepageContactURL" |
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
199 "xesam:horizontalResolution" "xesam:icqContactMedium" "xesam:id" |
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
200 "xesam:imContactMedium" "xesam:interests" "xesam:interlaceMode" |
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
201 "xesam:isEncrypted" "xesam:isImportant" "xesam:isInProgress" |
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
202 "xesam:isPasswordProtected" "xesam:isRead" "xesam:isoEquivalent" |
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
203 "xesam:jabberContactMedium" "xesam:keyword" "xesam:language" "xesam:legal" |
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
204 "xesam:license" "xesam:licenseType" "xesam:lineCount" "xesam:links" |
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
205 "xesam:mailingPostalAddress" "xesam:maintainer" "xesam:md5Hash" |
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
206 "xesam:mediaCodec" "xesam:mediaCodecBitrate" "xesam:mediaCodecType" |
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
207 "xesam:meteringMode" "xesam:mimeType" "xesam:mountPoint" |
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
208 "xesam:msnContactMedium" "xesam:name" "xesam:occupiedSpace" |
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
209 "xesam:orientation" "xesam:originalLocation" "xesam:owner" |
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
210 "xesam:pageCount" "xesam:permissions" "xesam:phoneNumber" |
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
211 "xesam:physicalAddress" "xesam:pixelFormat" "xesam:primaryRecipient" |
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
212 "xesam:programmingLanguage" "xesam:rating" "xesam:receptionTime" |
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
213 "xesam:recipient" "xesam:related" "xesam:remoteUser" "xesam:rowCount" |
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
214 "xesam:sampleBitDepth" "xesam:sampleFormat" "xesam:secondaryRecipient" |
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
215 "xesam:sha1Hash" "xesam:size" "xesam:skypeContactMedium" |
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
216 "xesam:sourceCreated" "xesam:sourceModified" "xesam:storageSize" |
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
217 "xesam:subject" "xesam:supercedes" "xesam:title" "xesam:to" |
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
218 "xesam:totalSpace" "xesam:totalUncompressedSize" "xesam:url" |
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
219 "xesam:usageIntensity" "xesam:userComment" "xesam:userKeyword" |
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
220 "xesam:uuid" "xesam:version" "xesam:verticalResolution" "xesam:videoBirate" |
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
221 "xesam:videoCodec" "xesam:videoCodecType" "xesam:whiteBalance" |
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
222 "xesam:width" "xesam:wordCount" "xesam:workEmailAddress" |
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
223 "xesam:workPhoneNumber" "xesam:workPostalAddress" |
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
224 "xesam:yahooContactMedium") |
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
225 "All fields from the Xesam Core Ontology. |
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
226 This defconst can be used to check for a new search engine, which |
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
227 fields are supported.") |
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
228 |
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
229 (defconst xesam-user-query |
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
230 "<?xml version=\"1.0\" encoding=\"UTF-8\"?> |
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
231 <request xmlns=\"http://freedesktop.org/standards/xesam/1.0/query\"> |
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
232 <userQuery> |
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
233 %s |
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
234 </userQuery> |
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
235 </request>" |
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
236 "The Xesam user query XML.") |
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
237 |
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
238 (defconst xesam-fulltext-query |
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
239 "<?xml version=\"1.0\" encoding=\"UTF-8\"?> |
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
240 <request xmlns=\"http://freedesktop.org/standards/xesam/1.0/query\"> |
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
241 <query content=\"xesam:Document\" source=\"xesam:File\"> |
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
242 <fullText> |
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
243 <string>%s</string> |
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
244 </fullText> |
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
245 </query> |
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
246 </request>" |
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
247 "The Xesam fulltext query XML.") |
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
248 |
97214
004f6dc1c1a0
* net/xesam.el (xesam-all-fields): Remove source and content
Michael Albinus <michael.albinus@gmx.de>
parents:
97170
diff
changeset
|
249 (defvar xesam-dbus-unique-names |
004f6dc1c1a0
* net/xesam.el (xesam-all-fields): Remove source and content
Michael Albinus <michael.albinus@gmx.de>
parents:
97170
diff
changeset
|
250 (list (cons :system (dbus-get-unique-name :system)) |
004f6dc1c1a0
* net/xesam.el (xesam-all-fields): Remove source and content
Michael Albinus <michael.albinus@gmx.de>
parents:
97170
diff
changeset
|
251 (cons :session (dbus-get-unique-name :session))) |
004f6dc1c1a0
* net/xesam.el (xesam-all-fields): Remove source and content
Michael Albinus <michael.albinus@gmx.de>
parents:
97170
diff
changeset
|
252 "The unique names, under which Emacs is registered at D-Bus.") |
004f6dc1c1a0
* net/xesam.el (xesam-all-fields): Remove source and content
Michael Albinus <michael.albinus@gmx.de>
parents:
97170
diff
changeset
|
253 |
004f6dc1c1a0
* net/xesam.el (xesam-all-fields): Remove source and content
Michael Albinus <michael.albinus@gmx.de>
parents:
97170
diff
changeset
|
254 (defun xesam-dbus-call-method (&rest args) |
004f6dc1c1a0
* net/xesam.el (xesam-all-fields): Remove source and content
Michael Albinus <michael.albinus@gmx.de>
parents:
97170
diff
changeset
|
255 "Apply a D-Bus method call. |
004f6dc1c1a0
* net/xesam.el (xesam-all-fields): Remove source and content
Michael Albinus <michael.albinus@gmx.de>
parents:
97170
diff
changeset
|
256 `dbus-call-method' is to be preferred, because it is more |
004f6dc1c1a0
* net/xesam.el (xesam-all-fields): Remove source and content
Michael Albinus <michael.albinus@gmx.de>
parents:
97170
diff
changeset
|
257 performant. If the target D-Bus service is owned by Emacs, this |
004f6dc1c1a0
* net/xesam.el (xesam-all-fields): Remove source and content
Michael Albinus <michael.albinus@gmx.de>
parents:
97170
diff
changeset
|
258 is not applicable, and `dbus-call-method-non-blocking' must be |
004f6dc1c1a0
* net/xesam.el (xesam-all-fields): Remove source and content
Michael Albinus <michael.albinus@gmx.de>
parents:
97170
diff
changeset
|
259 used instead. ARGS are identical to the argument list of both |
004f6dc1c1a0
* net/xesam.el (xesam-all-fields): Remove source and content
Michael Albinus <michael.albinus@gmx.de>
parents:
97170
diff
changeset
|
260 functions." |
004f6dc1c1a0
* net/xesam.el (xesam-all-fields): Remove source and content
Michael Albinus <michael.albinus@gmx.de>
parents:
97170
diff
changeset
|
261 (apply |
004f6dc1c1a0
* net/xesam.el (xesam-all-fields): Remove source and content
Michael Albinus <michael.albinus@gmx.de>
parents:
97170
diff
changeset
|
262 ;; The first argument is the bus, the second argument the targt service. |
004f6dc1c1a0
* net/xesam.el (xesam-all-fields): Remove source and content
Michael Albinus <michael.albinus@gmx.de>
parents:
97170
diff
changeset
|
263 (if (string-equal (cdr (assoc (car args) xesam-dbus-unique-names)) |
004f6dc1c1a0
* net/xesam.el (xesam-all-fields): Remove source and content
Michael Albinus <michael.albinus@gmx.de>
parents:
97170
diff
changeset
|
264 (cadr args)) |
004f6dc1c1a0
* net/xesam.el (xesam-all-fields): Remove source and content
Michael Albinus <michael.albinus@gmx.de>
parents:
97170
diff
changeset
|
265 'dbus-call-method-non-blocking 'dbus-call-method) |
004f6dc1c1a0
* net/xesam.el (xesam-all-fields): Remove source and content
Michael Albinus <michael.albinus@gmx.de>
parents:
97170
diff
changeset
|
266 args)) |
004f6dc1c1a0
* net/xesam.el (xesam-all-fields): Remove source and content
Michael Albinus <michael.albinus@gmx.de>
parents:
97170
diff
changeset
|
267 |
96989
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
268 (defun xesam-get-property (engine property) |
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
269 "Return the PROPERTY value of ENGINE." |
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
270 ;; "GetProperty" returns a variant, so we must use the car. |
97214
004f6dc1c1a0
* net/xesam.el (xesam-all-fields): Remove source and content
Michael Albinus <michael.albinus@gmx.de>
parents:
97170
diff
changeset
|
271 (car (xesam-dbus-call-method |
96989
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
272 :session (car engine) xesam-path-search |
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
273 xesam-interface-search "GetProperty" |
97214
004f6dc1c1a0
* net/xesam.el (xesam-all-fields): Remove source and content
Michael Albinus <michael.albinus@gmx.de>
parents:
97170
diff
changeset
|
274 (xesam-get-cached-property engine "session") property))) |
96989
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
275 |
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
276 (defun xesam-set-property (engine property value) |
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
277 "Set the PROPERTY of ENGINE to VALUE. |
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
278 VALUE can be a string, a non-negative integer, a boolean |
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
279 value (nil or t), or a list of them. It returns the new value of |
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
280 PROPERTY in the search engine. This new value can be different |
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
281 from VALUE, depending on what the search engine accepts." |
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
282 ;; "SetProperty" returns a variant, so we must use the car. |
97214
004f6dc1c1a0
* net/xesam.el (xesam-all-fields): Remove source and content
Michael Albinus <michael.albinus@gmx.de>
parents:
97170
diff
changeset
|
283 (car (xesam-dbus-call-method |
96989
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
284 :session (car engine) xesam-path-search |
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
285 xesam-interface-search "SetProperty" |
97214
004f6dc1c1a0
* net/xesam.el (xesam-all-fields): Remove source and content
Michael Albinus <michael.albinus@gmx.de>
parents:
97170
diff
changeset
|
286 (xesam-get-cached-property engine "session") property |
96989
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
287 ;; The value must be a variant. It can be only a string, an |
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
288 ;; unsigned int, a boolean, or an array of them. So we need |
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
289 ;; no type keyword; we let the type check to the search |
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
290 ;; engine. |
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
291 (list :variant value)))) |
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
292 |
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
293 (defvar xesam-minibuffer-vendor-history nil |
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
294 "Interactive vendor history.") |
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
295 |
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
296 (defvar xesam-minibuffer-query-history nil |
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
297 "Interactive query history.") |
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
298 |
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
299 ;; Pacify byte compiler. |
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
300 (defvar xesam-engine nil) |
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
301 (defvar xesam-search nil) |
97170
dfc12ea9589f
* net/xesam.el (xesam-type, xesam-query, xesam-xml-string): New
Michael Albinus <michael.albinus@gmx.de>
parents:
97038
diff
changeset
|
302 (defvar xesam-type nil) |
dfc12ea9589f
* net/xesam.el (xesam-type, xesam-query, xesam-xml-string): New
Michael Albinus <michael.albinus@gmx.de>
parents:
97038
diff
changeset
|
303 (defvar xesam-query nil) |
dfc12ea9589f
* net/xesam.el (xesam-type, xesam-query, xesam-xml-string): New
Michael Albinus <michael.albinus@gmx.de>
parents:
97038
diff
changeset
|
304 (defvar xesam-xml-string nil) |
97289
6cec2902d7b8
* net/xesam.el (top): Require `wid-edit' always.
Michael Albinus <michael.albinus@gmx.de>
parents:
97214
diff
changeset
|
305 (defvar xesam-objects nil) |
96989
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
306 (defvar xesam-current nil) |
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
307 (defvar xesam-count nil) |
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
308 (defvar xesam-to nil) |
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
309 (defvar xesam-refreshing nil) |
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
310 |
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
311 |
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
312 ;;; Search engines. |
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
313 |
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
314 (defvar xesam-search-engines nil |
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
315 "List of available Xesam search engines. |
97214
004f6dc1c1a0
* net/xesam.el (xesam-all-fields): Remove source and content
Michael Albinus <michael.albinus@gmx.de>
parents:
97170
diff
changeset
|
316 Every entry is an association list, with a car denoting the |
004f6dc1c1a0
* net/xesam.el (xesam-all-fields): Remove source and content
Michael Albinus <michael.albinus@gmx.de>
parents:
97170
diff
changeset
|
317 unique D-Bus service name of the engine. The rest of the entry |
004f6dc1c1a0
* net/xesam.el (xesam-all-fields): Remove source and content
Michael Albinus <michael.albinus@gmx.de>
parents:
97170
diff
changeset
|
318 are cached associations of engine attributes, like the session |
004f6dc1c1a0
* net/xesam.el (xesam-all-fields): Remove source and content
Michael Albinus <michael.albinus@gmx.de>
parents:
97170
diff
changeset
|
319 identifier, and the display name. Example: |
96989
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
320 |
97214
004f6dc1c1a0
* net/xesam.el (xesam-all-fields): Remove source and content
Michael Albinus <michael.albinus@gmx.de>
parents:
97170
diff
changeset
|
321 \(\(\":1.59\" |
004f6dc1c1a0
* net/xesam.el (xesam-all-fields): Remove source and content
Michael Albinus <michael.albinus@gmx.de>
parents:
97170
diff
changeset
|
322 \(\"session\" . \"0t1214948020ut358230u0p2698r3912347765k3213849828\") |
004f6dc1c1a0
* net/xesam.el (xesam-all-fields): Remove source and content
Michael Albinus <michael.albinus@gmx.de>
parents:
97170
diff
changeset
|
323 \(\"vendor.display\" . \"Tracker Xesam Service\")) |
004f6dc1c1a0
* net/xesam.el (xesam-all-fields): Remove source and content
Michael Albinus <michael.albinus@gmx.de>
parents:
97170
diff
changeset
|
324 \(\":1.27\" |
004f6dc1c1a0
* net/xesam.el (xesam-all-fields): Remove source and content
Michael Albinus <michael.albinus@gmx.de>
parents:
97170
diff
changeset
|
325 \(\"session\" . \"strigisession1369133069\") |
004f6dc1c1a0
* net/xesam.el (xesam-all-fields): Remove source and content
Michael Albinus <michael.albinus@gmx.de>
parents:
97170
diff
changeset
|
326 \(\"vendor.display\" . \"Strigi Desktop Search\"))) |
96989
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
327 |
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
328 A Xesam-compatible search engine is identified as a queued D-Bus |
97214
004f6dc1c1a0
* net/xesam.el (xesam-all-fields): Remove source and content
Michael Albinus <michael.albinus@gmx.de>
parents:
97170
diff
changeset
|
329 service of the known service `xesam-service-search'.") |
004f6dc1c1a0
* net/xesam.el (xesam-all-fields): Remove source and content
Michael Albinus <michael.albinus@gmx.de>
parents:
97170
diff
changeset
|
330 |
004f6dc1c1a0
* net/xesam.el (xesam-all-fields): Remove source and content
Michael Albinus <michael.albinus@gmx.de>
parents:
97170
diff
changeset
|
331 (defun xesam-get-cached-property (engine property) |
004f6dc1c1a0
* net/xesam.el (xesam-all-fields): Remove source and content
Michael Albinus <michael.albinus@gmx.de>
parents:
97170
diff
changeset
|
332 "Return the PROPERTY value of ENGINE from the cache. |
004f6dc1c1a0
* net/xesam.el (xesam-all-fields): Remove source and content
Michael Albinus <michael.albinus@gmx.de>
parents:
97170
diff
changeset
|
333 If PROPERTY is not existing, retrieve it from ENGINE first." |
004f6dc1c1a0
* net/xesam.el (xesam-all-fields): Remove source and content
Michael Albinus <michael.albinus@gmx.de>
parents:
97170
diff
changeset
|
334 ;; If the property has not been cached yet, we retrieve it from the |
004f6dc1c1a0
* net/xesam.el (xesam-all-fields): Remove source and content
Michael Albinus <michael.albinus@gmx.de>
parents:
97170
diff
changeset
|
335 ;; engine, and cache it. |
004f6dc1c1a0
* net/xesam.el (xesam-all-fields): Remove source and content
Michael Albinus <michael.albinus@gmx.de>
parents:
97170
diff
changeset
|
336 (unless (assoc property engine) |
004f6dc1c1a0
* net/xesam.el (xesam-all-fields): Remove source and content
Michael Albinus <michael.albinus@gmx.de>
parents:
97170
diff
changeset
|
337 (xesam-set-cached-property |
004f6dc1c1a0
* net/xesam.el (xesam-all-fields): Remove source and content
Michael Albinus <michael.albinus@gmx.de>
parents:
97170
diff
changeset
|
338 engine property (xesam-get-property engine property))) |
004f6dc1c1a0
* net/xesam.el (xesam-all-fields): Remove source and content
Michael Albinus <michael.albinus@gmx.de>
parents:
97170
diff
changeset
|
339 (cdr (assoc property engine))) |
004f6dc1c1a0
* net/xesam.el (xesam-all-fields): Remove source and content
Michael Albinus <michael.albinus@gmx.de>
parents:
97170
diff
changeset
|
340 |
004f6dc1c1a0
* net/xesam.el (xesam-all-fields): Remove source and content
Michael Albinus <michael.albinus@gmx.de>
parents:
97170
diff
changeset
|
341 (defun xesam-set-cached-property (engine property value) |
004f6dc1c1a0
* net/xesam.el (xesam-all-fields): Remove source and content
Michael Albinus <michael.albinus@gmx.de>
parents:
97170
diff
changeset
|
342 "Set the PROPERTY of ENGINE to VALUE in the cache." |
004f6dc1c1a0
* net/xesam.el (xesam-all-fields): Remove source and content
Michael Albinus <michael.albinus@gmx.de>
parents:
97170
diff
changeset
|
343 (setcdr engine (append (cdr engine) (list (cons property value))))) |
96989
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
344 |
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
345 (defun xesam-delete-search-engine (&rest args) |
97214
004f6dc1c1a0
* net/xesam.el (xesam-all-fields): Remove source and content
Michael Albinus <michael.albinus@gmx.de>
parents:
97170
diff
changeset
|
346 "Remove service from `xesam-search-engines'." |
004f6dc1c1a0
* net/xesam.el (xesam-all-fields): Remove source and content
Michael Albinus <michael.albinus@gmx.de>
parents:
97170
diff
changeset
|
347 (setq xesam-search-engines |
004f6dc1c1a0
* net/xesam.el (xesam-all-fields): Remove source and content
Michael Albinus <michael.albinus@gmx.de>
parents:
97170
diff
changeset
|
348 (delete (assoc (car args) xesam-search-engines) xesam-search-engines))) |
96989
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
349 |
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
350 (defun xesam-search-engines () |
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
351 "Return Xesam search engines, stored in `xesam-search-engines'. |
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
352 The first search engine is the name owner of `xesam-service-search'. |
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
353 If there is no registered search engine at all, the function returns `nil'." |
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
354 (let ((services (dbus-ignore-errors |
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
355 (dbus-list-queued-owners |
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
356 :session xesam-service-search))) |
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
357 engine vendor-id hit-fields) |
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
358 (dolist (service services) |
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
359 (unless (assoc-string service xesam-search-engines) |
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
360 |
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
361 ;; Open a new session, and add it to the search engines list. |
97214
004f6dc1c1a0
* net/xesam.el (xesam-all-fields): Remove source and content
Michael Albinus <michael.albinus@gmx.de>
parents:
97170
diff
changeset
|
362 (add-to-list 'xesam-search-engines (list service) 'append) |
004f6dc1c1a0
* net/xesam.el (xesam-all-fields): Remove source and content
Michael Albinus <michael.albinus@gmx.de>
parents:
97170
diff
changeset
|
363 (setq engine (assoc service xesam-search-engines)) |
96989
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
364 |
97214
004f6dc1c1a0
* net/xesam.el (xesam-all-fields): Remove source and content
Michael Albinus <michael.albinus@gmx.de>
parents:
97170
diff
changeset
|
365 ;; Add the session string. |
004f6dc1c1a0
* net/xesam.el (xesam-all-fields): Remove source and content
Michael Albinus <michael.albinus@gmx.de>
parents:
97170
diff
changeset
|
366 (xesam-set-cached-property |
004f6dc1c1a0
* net/xesam.el (xesam-all-fields): Remove source and content
Michael Albinus <michael.albinus@gmx.de>
parents:
97170
diff
changeset
|
367 engine "session" |
004f6dc1c1a0
* net/xesam.el (xesam-all-fields): Remove source and content
Michael Albinus <michael.albinus@gmx.de>
parents:
97170
diff
changeset
|
368 (xesam-dbus-call-method |
004f6dc1c1a0
* net/xesam.el (xesam-all-fields): Remove source and content
Michael Albinus <michael.albinus@gmx.de>
parents:
97170
diff
changeset
|
369 :session service xesam-path-search |
004f6dc1c1a0
* net/xesam.el (xesam-all-fields): Remove source and content
Michael Albinus <michael.albinus@gmx.de>
parents:
97170
diff
changeset
|
370 xesam-interface-search "NewSession")) |
004f6dc1c1a0
* net/xesam.el (xesam-all-fields): Remove source and content
Michael Albinus <michael.albinus@gmx.de>
parents:
97170
diff
changeset
|
371 |
004f6dc1c1a0
* net/xesam.el (xesam-all-fields): Remove source and content
Michael Albinus <michael.albinus@gmx.de>
parents:
97170
diff
changeset
|
372 ;; Unset the "search.live" property; we don't want to be |
004f6dc1c1a0
* net/xesam.el (xesam-all-fields): Remove source and content
Michael Albinus <michael.albinus@gmx.de>
parents:
97170
diff
changeset
|
373 ;; informed by changed results. |
004f6dc1c1a0
* net/xesam.el (xesam-all-fields): Remove source and content
Michael Albinus <michael.albinus@gmx.de>
parents:
97170
diff
changeset
|
374 (xesam-set-property engine "search.live" nil) |
96989
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
375 |
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
376 ;; Check the vendor properties. |
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
377 (setq vendor-id (xesam-get-property engine "vendor.id") |
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
378 hit-fields (xesam-get-property engine "hit.fields")) |
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
379 |
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
380 ;; Ususally, `hit.fields' shall describe supported fields. |
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
381 ;; That is not the case now, so we set it ourselves. |
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
382 ;; Hopefully, this will change later. |
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
383 (setq hit-fields |
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
384 (cond |
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
385 ((string-equal vendor-id "Beagle") |
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
386 '("xesam:mimeType" "xesam:url")) |
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
387 ((string-equal vendor-id "Strigi") |
97289
6cec2902d7b8
* net/xesam.el (top): Require `wid-edit' always.
Michael Albinus <michael.albinus@gmx.de>
parents:
97214
diff
changeset
|
388 '("xesam:author" "xesam:cc" "xesam:charset" |
96989
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
389 "xesam:contentType" "xesam:fileExtension" "xesam:id" |
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
390 "xesam:lineCount" "xesam:links" "xesam:mimeType" "xesam:name" |
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
391 "xesam:size" "xesam:sourceModified" "xesam:subject" |
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
392 "xesam:to" "xesam:url")) |
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
393 ((string-equal vendor-id "TrackerXesamSession") |
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
394 '("xesam:relevancyRating" "xesam:url")) |
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
395 ;; xesam-tools yahoo service. |
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
396 (t '("xesam:contentModified" "xesam:mimeType" "xesam:summary" |
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
397 "xesam:title" "xesam:url" "yahoo:displayUrl")))) |
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
398 |
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
399 (xesam-set-property engine "hit.fields" hit-fields) |
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
400 (xesam-set-property engine "hit.fields.extended" '("xesam:snippet")) |
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
401 |
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
402 ;; Let us notify, when the search engine disappears. |
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
403 (dbus-register-signal |
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
404 :session dbus-service-dbus dbus-path-dbus |
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
405 dbus-interface-dbus "NameOwnerChanged" |
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
406 'xesam-delete-search-engine service)))) |
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
407 xesam-search-engines) |
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
408 |
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
409 |
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
410 ;;; Search buffers. |
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
411 |
97170
dfc12ea9589f
* net/xesam.el (xesam-type, xesam-query, xesam-xml-string): New
Michael Albinus <michael.albinus@gmx.de>
parents:
97038
diff
changeset
|
412 (define-derived-mode xesam-mode nil "Xesam" |
96989
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
413 "Major mode for presenting search results of a Xesam search. |
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
414 In this mode, widgets represent the search results. |
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
415 |
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
416 \\{xesam-mode-map} |
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
417 Turning on Xesam mode runs the normal hook `xesam-mode-hook'." |
97170
dfc12ea9589f
* net/xesam.el (xesam-type, xesam-query, xesam-xml-string): New
Michael Albinus <michael.albinus@gmx.de>
parents:
97038
diff
changeset
|
418 ;; Keymap. |
dfc12ea9589f
* net/xesam.el (xesam-type, xesam-query, xesam-xml-string): New
Michael Albinus <michael.albinus@gmx.de>
parents:
97038
diff
changeset
|
419 (setq xesam-mode-map (copy-keymap special-mode-map)) |
dfc12ea9589f
* net/xesam.el (xesam-type, xesam-query, xesam-xml-string): New
Michael Albinus <michael.albinus@gmx.de>
parents:
97038
diff
changeset
|
420 (set-keymap-parent xesam-mode-map widget-keymap) |
dfc12ea9589f
* net/xesam.el (xesam-type, xesam-query, xesam-xml-string): New
Michael Albinus <michael.albinus@gmx.de>
parents:
97038
diff
changeset
|
421 (define-key xesam-mode-map "z" 'kill-this-buffer) |
dfc12ea9589f
* net/xesam.el (xesam-type, xesam-query, xesam-xml-string): New
Michael Albinus <michael.albinus@gmx.de>
parents:
97038
diff
changeset
|
422 |
dfc12ea9589f
* net/xesam.el (xesam-type, xesam-query, xesam-xml-string): New
Michael Albinus <michael.albinus@gmx.de>
parents:
97038
diff
changeset
|
423 ;; Maybe we implement something useful, later on. |
dfc12ea9589f
* net/xesam.el (xesam-type, xesam-query, xesam-xml-string): New
Michael Albinus <michael.albinus@gmx.de>
parents:
97038
diff
changeset
|
424 (set (make-local-variable 'revert-buffer-function) 'ignore) |
dfc12ea9589f
* net/xesam.el (xesam-type, xesam-query, xesam-xml-string): New
Michael Albinus <michael.albinus@gmx.de>
parents:
97038
diff
changeset
|
425 ;; `xesam-engine', `xesam-search', `xesam-type', `xesam-query', and |
dfc12ea9589f
* net/xesam.el (xesam-type, xesam-query, xesam-xml-string): New
Michael Albinus <michael.albinus@gmx.de>
parents:
97038
diff
changeset
|
426 ;; `xesam-xml-string' will be set in `xesam-new-search'. |
dfc12ea9589f
* net/xesam.el (xesam-type, xesam-query, xesam-xml-string): New
Michael Albinus <michael.albinus@gmx.de>
parents:
97038
diff
changeset
|
427 (set (make-local-variable 'xesam-engine) nil) |
dfc12ea9589f
* net/xesam.el (xesam-type, xesam-query, xesam-xml-string): New
Michael Albinus <michael.albinus@gmx.de>
parents:
97038
diff
changeset
|
428 (set (make-local-variable 'xesam-search) nil) |
dfc12ea9589f
* net/xesam.el (xesam-type, xesam-query, xesam-xml-string): New
Michael Albinus <michael.albinus@gmx.de>
parents:
97038
diff
changeset
|
429 (set (make-local-variable 'xesam-type) "") |
dfc12ea9589f
* net/xesam.el (xesam-type, xesam-query, xesam-xml-string): New
Michael Albinus <michael.albinus@gmx.de>
parents:
97038
diff
changeset
|
430 (set (make-local-variable 'xesam-query) "") |
dfc12ea9589f
* net/xesam.el (xesam-type, xesam-query, xesam-xml-string): New
Michael Albinus <michael.albinus@gmx.de>
parents:
97038
diff
changeset
|
431 (set (make-local-variable 'xesam-xml-string) "") |
97289
6cec2902d7b8
* net/xesam.el (top): Require `wid-edit' always.
Michael Albinus <michael.albinus@gmx.de>
parents:
97214
diff
changeset
|
432 (set (make-local-variable 'xesam-objects) nil) |
97170
dfc12ea9589f
* net/xesam.el (xesam-type, xesam-query, xesam-xml-string): New
Michael Albinus <michael.albinus@gmx.de>
parents:
97038
diff
changeset
|
433 ;; `xesam-current' is the last hit put into the search buffer, |
dfc12ea9589f
* net/xesam.el (xesam-type, xesam-query, xesam-xml-string): New
Michael Albinus <michael.albinus@gmx.de>
parents:
97038
diff
changeset
|
434 (set (make-local-variable 'xesam-current) 0) |
dfc12ea9589f
* net/xesam.el (xesam-type, xesam-query, xesam-xml-string): New
Michael Albinus <michael.albinus@gmx.de>
parents:
97038
diff
changeset
|
435 ;; `xesam-count' is the number of hits reported by the search engine. |
dfc12ea9589f
* net/xesam.el (xesam-type, xesam-query, xesam-xml-string): New
Michael Albinus <michael.albinus@gmx.de>
parents:
97038
diff
changeset
|
436 (set (make-local-variable 'xesam-count) 0) |
dfc12ea9589f
* net/xesam.el (xesam-type, xesam-query, xesam-xml-string): New
Michael Albinus <michael.albinus@gmx.de>
parents:
97038
diff
changeset
|
437 ;; `xesam-to' is the upper hit number to be presented. |
dfc12ea9589f
* net/xesam.el (xesam-type, xesam-query, xesam-xml-string): New
Michael Albinus <michael.albinus@gmx.de>
parents:
97038
diff
changeset
|
438 (set (make-local-variable 'xesam-to) xesam-hits-per-page) |
dfc12ea9589f
* net/xesam.el (xesam-type, xesam-query, xesam-xml-string): New
Michael Albinus <michael.albinus@gmx.de>
parents:
97038
diff
changeset
|
439 ;; `xesam-refreshing' is an indicator, whether the buffer is just |
dfc12ea9589f
* net/xesam.el (xesam-type, xesam-query, xesam-xml-string): New
Michael Albinus <michael.albinus@gmx.de>
parents:
97038
diff
changeset
|
440 ;; being updated. Needed, because `xesam-refresh-search-buffer' |
dfc12ea9589f
* net/xesam.el (xesam-type, xesam-query, xesam-xml-string): New
Michael Albinus <michael.albinus@gmx.de>
parents:
97038
diff
changeset
|
441 ;; can be triggered by an event. |
dfc12ea9589f
* net/xesam.el (xesam-type, xesam-query, xesam-xml-string): New
Michael Albinus <michael.albinus@gmx.de>
parents:
97038
diff
changeset
|
442 (set (make-local-variable 'xesam-refreshing) nil) |
dfc12ea9589f
* net/xesam.el (xesam-type, xesam-query, xesam-xml-string): New
Michael Albinus <michael.albinus@gmx.de>
parents:
97038
diff
changeset
|
443 ;; Mode line position returns hit counters. |
dfc12ea9589f
* net/xesam.el (xesam-type, xesam-query, xesam-xml-string): New
Michael Albinus <michael.albinus@gmx.de>
parents:
97038
diff
changeset
|
444 (set (make-local-variable 'mode-line-position) |
dfc12ea9589f
* net/xesam.el (xesam-type, xesam-query, xesam-xml-string): New
Michael Albinus <michael.albinus@gmx.de>
parents:
97038
diff
changeset
|
445 (list '(-3 "%p%") |
dfc12ea9589f
* net/xesam.el (xesam-type, xesam-query, xesam-xml-string): New
Michael Albinus <michael.albinus@gmx.de>
parents:
97038
diff
changeset
|
446 '(10 (:eval (format " (%d/%d)" xesam-current xesam-count))))) |
dfc12ea9589f
* net/xesam.el (xesam-type, xesam-query, xesam-xml-string): New
Michael Albinus <michael.albinus@gmx.de>
parents:
97038
diff
changeset
|
447 ;; Header line contains the query string. |
dfc12ea9589f
* net/xesam.el (xesam-type, xesam-query, xesam-xml-string): New
Michael Albinus <michael.albinus@gmx.de>
parents:
97038
diff
changeset
|
448 (set (make-local-variable 'header-line-format) |
dfc12ea9589f
* net/xesam.el (xesam-type, xesam-query, xesam-xml-string): New
Michael Albinus <michael.albinus@gmx.de>
parents:
97038
diff
changeset
|
449 (list '(20 |
dfc12ea9589f
* net/xesam.el (xesam-type, xesam-query, xesam-xml-string): New
Michael Albinus <michael.albinus@gmx.de>
parents:
97038
diff
changeset
|
450 (:eval |
dfc12ea9589f
* net/xesam.el (xesam-type, xesam-query, xesam-xml-string): New
Michael Albinus <michael.albinus@gmx.de>
parents:
97038
diff
changeset
|
451 (list "Type: " |
97289
6cec2902d7b8
* net/xesam.el (top): Require `wid-edit' always.
Michael Albinus <michael.albinus@gmx.de>
parents:
97214
diff
changeset
|
452 (propertize xesam-type 'face 'xesam-mode-line)))) |
97170
dfc12ea9589f
* net/xesam.el (xesam-type, xesam-query, xesam-xml-string): New
Michael Albinus <michael.albinus@gmx.de>
parents:
97038
diff
changeset
|
453 '(10 |
dfc12ea9589f
* net/xesam.el (xesam-type, xesam-query, xesam-xml-string): New
Michael Albinus <michael.albinus@gmx.de>
parents:
97038
diff
changeset
|
454 (:eval |
dfc12ea9589f
* net/xesam.el (xesam-type, xesam-query, xesam-xml-string): New
Michael Albinus <michael.albinus@gmx.de>
parents:
97038
diff
changeset
|
455 (list " Query: " |
dfc12ea9589f
* net/xesam.el (xesam-type, xesam-query, xesam-xml-string): New
Michael Albinus <michael.albinus@gmx.de>
parents:
97038
diff
changeset
|
456 (propertize |
dfc12ea9589f
* net/xesam.el (xesam-type, xesam-query, xesam-xml-string): New
Michael Albinus <michael.albinus@gmx.de>
parents:
97038
diff
changeset
|
457 xesam-query |
97289
6cec2902d7b8
* net/xesam.el (top): Require `wid-edit' always.
Michael Albinus <michael.albinus@gmx.de>
parents:
97214
diff
changeset
|
458 'face 'xesam-mode-line |
97214
004f6dc1c1a0
* net/xesam.el (xesam-all-fields): Remove source and content
Michael Albinus <michael.albinus@gmx.de>
parents:
97170
diff
changeset
|
459 'help-echo (when xesam-debug xesam-xml-string))))))) |
97170
dfc12ea9589f
* net/xesam.el (xesam-type, xesam-query, xesam-xml-string): New
Michael Albinus <michael.albinus@gmx.de>
parents:
97038
diff
changeset
|
460 |
97038
b201d17750ad
* net/xesam.el (xesam-from): Remove defvar.
Michael Albinus <michael.albinus@gmx.de>
parents:
96996
diff
changeset
|
461 (when (not (interactive-p)) |
b201d17750ad
* net/xesam.el (xesam-from): Remove defvar.
Michael Albinus <michael.albinus@gmx.de>
parents:
96996
diff
changeset
|
462 ;; Initialize buffer. |
b201d17750ad
* net/xesam.el (xesam-from): Remove defvar.
Michael Albinus <michael.albinus@gmx.de>
parents:
96996
diff
changeset
|
463 (setq buffer-read-only t) |
b201d17750ad
* net/xesam.el (xesam-from): Remove defvar.
Michael Albinus <michael.albinus@gmx.de>
parents:
96996
diff
changeset
|
464 (let ((inhibit-read-only t)) |
97170
dfc12ea9589f
* net/xesam.el (xesam-type, xesam-query, xesam-xml-string): New
Michael Albinus <michael.albinus@gmx.de>
parents:
97038
diff
changeset
|
465 (erase-buffer)))) |
96989
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
466 |
97170
dfc12ea9589f
* net/xesam.el (xesam-type, xesam-query, xesam-xml-string): New
Michael Albinus <michael.albinus@gmx.de>
parents:
97038
diff
changeset
|
467 ;; It doesn't make sense to call it interactively. |
dfc12ea9589f
* net/xesam.el (xesam-type, xesam-query, xesam-xml-string): New
Michael Albinus <michael.albinus@gmx.de>
parents:
97038
diff
changeset
|
468 (put 'xesam-mode 'disabled t) |
96989
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
469 |
97289
6cec2902d7b8
* net/xesam.el (top): Require `wid-edit' always.
Michael Albinus <michael.albinus@gmx.de>
parents:
97214
diff
changeset
|
470 ;; The very first buffer created with `xesam-mode' does not have the |
6cec2902d7b8
* net/xesam.el (top): Require `wid-edit' always.
Michael Albinus <michael.albinus@gmx.de>
parents:
97214
diff
changeset
|
471 ;; keymap etc. So we create a dummy buffer. Stupid. |
6cec2902d7b8
* net/xesam.el (top): Require `wid-edit' always.
Michael Albinus <michael.albinus@gmx.de>
parents:
97214
diff
changeset
|
472 (with-temp-buffer (xesam-mode)) |
6cec2902d7b8
* net/xesam.el (top): Require `wid-edit' always.
Michael Albinus <michael.albinus@gmx.de>
parents:
97214
diff
changeset
|
473 |
96989
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
474 (defun xesam-buffer-name (service search) |
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
475 "Return the buffer name where to present search results. |
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
476 SERVICE is the D-Bus unique service name of the Xesam search engine. |
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
477 SEARCH is the search identification in that engine. Both must be strings." |
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
478 (format "*%s/%s*" service search)) |
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
479 |
97289
6cec2902d7b8
* net/xesam.el (top): Require `wid-edit' always.
Michael Albinus <michael.albinus@gmx.de>
parents:
97214
diff
changeset
|
480 (defun xesam-highlight-string (string) |
6cec2902d7b8
* net/xesam.el (top): Require `wid-edit' always.
Michael Albinus <michael.albinus@gmx.de>
parents:
97214
diff
changeset
|
481 "Highlight text enclosed by <b> and </b>." |
6cec2902d7b8
* net/xesam.el (top): Require `wid-edit' always.
Michael Albinus <michael.albinus@gmx.de>
parents:
97214
diff
changeset
|
482 (while (string-match "\\(.*\\)\\(<b>\\)\\(.*\\)\\(</b>\\)\\(.*\\)" string) |
6cec2902d7b8
* net/xesam.el (top): Require `wid-edit' always.
Michael Albinus <michael.albinus@gmx.de>
parents:
97214
diff
changeset
|
483 (setq string |
6cec2902d7b8
* net/xesam.el (top): Require `wid-edit' always.
Michael Albinus <michael.albinus@gmx.de>
parents:
97214
diff
changeset
|
484 (format |
6cec2902d7b8
* net/xesam.el (top): Require `wid-edit' always.
Michael Albinus <michael.albinus@gmx.de>
parents:
97214
diff
changeset
|
485 "%s%s%s" |
6cec2902d7b8
* net/xesam.el (top): Require `wid-edit' always.
Michael Albinus <michael.albinus@gmx.de>
parents:
97214
diff
changeset
|
486 (match-string 1 string) |
6cec2902d7b8
* net/xesam.el (top): Require `wid-edit' always.
Michael Albinus <michael.albinus@gmx.de>
parents:
97214
diff
changeset
|
487 (propertize (match-string 3 string) 'face 'xesam-highlight) |
6cec2902d7b8
* net/xesam.el (top): Require `wid-edit' always.
Michael Albinus <michael.albinus@gmx.de>
parents:
97214
diff
changeset
|
488 (match-string 5 string)))) |
6cec2902d7b8
* net/xesam.el (top): Require `wid-edit' always.
Michael Albinus <michael.albinus@gmx.de>
parents:
97214
diff
changeset
|
489 string) |
6cec2902d7b8
* net/xesam.el (top): Require `wid-edit' always.
Michael Albinus <michael.albinus@gmx.de>
parents:
97214
diff
changeset
|
490 |
6cec2902d7b8
* net/xesam.el (top): Require `wid-edit' always.
Michael Albinus <michael.albinus@gmx.de>
parents:
97214
diff
changeset
|
491 (defun xesam-refresh-entry (engine entry) |
96989
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
492 "Refreshes one entry in the search buffer." |
97289
6cec2902d7b8
* net/xesam.el (top): Require `wid-edit' always.
Michael Albinus <michael.albinus@gmx.de>
parents:
97214
diff
changeset
|
493 (let* ((result (nth (1- xesam-current) xesam-objects)) |
96989
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
494 widget) |
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
495 |
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
496 ;; Create widget. |
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
497 (setq widget (widget-convert 'link)) |
97038
b201d17750ad
* net/xesam.el (xesam-from): Remove defvar.
Michael Albinus <michael.albinus@gmx.de>
parents:
96996
diff
changeset
|
498 (when xesam-debug |
b201d17750ad
* net/xesam.el (xesam-from): Remove defvar.
Michael Albinus <michael.albinus@gmx.de>
parents:
96996
diff
changeset
|
499 (widget-put widget :help-echo "")) |
96989
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
500 |
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
501 ;; Take all results. |
97214
004f6dc1c1a0
* net/xesam.el (xesam-all-fields): Remove source and content
Michael Albinus <michael.albinus@gmx.de>
parents:
97170
diff
changeset
|
502 (dolist (field (xesam-get-cached-property engine "hit.fields")) |
97289
6cec2902d7b8
* net/xesam.el (top): Require `wid-edit' always.
Michael Albinus <michael.albinus@gmx.de>
parents:
97214
diff
changeset
|
503 (when (cond |
6cec2902d7b8
* net/xesam.el (top): Require `wid-edit' always.
Michael Albinus <michael.albinus@gmx.de>
parents:
97214
diff
changeset
|
504 ((stringp (caar result)) (not (zerop (length (caar result))))) |
6cec2902d7b8
* net/xesam.el (top): Require `wid-edit' always.
Michael Albinus <michael.albinus@gmx.de>
parents:
97214
diff
changeset
|
505 ((numberp (caar result)) (not (zerop (caar result)))) |
6cec2902d7b8
* net/xesam.el (top): Require `wid-edit' always.
Michael Albinus <michael.albinus@gmx.de>
parents:
97214
diff
changeset
|
506 ((caar result) t)) |
96989
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
507 (when xesam-debug |
97038
b201d17750ad
* net/xesam.el (xesam-from): Remove defvar.
Michael Albinus <michael.albinus@gmx.de>
parents:
96996
diff
changeset
|
508 (widget-put |
b201d17750ad
* net/xesam.el (xesam-from): Remove defvar.
Michael Albinus <michael.albinus@gmx.de>
parents:
96996
diff
changeset
|
509 widget :help-echo |
b201d17750ad
* net/xesam.el (xesam-from): Remove defvar.
Michael Albinus <michael.albinus@gmx.de>
parents:
96996
diff
changeset
|
510 (format "%s%s: %s\n" |
b201d17750ad
* net/xesam.el (xesam-from): Remove defvar.
Michael Albinus <michael.albinus@gmx.de>
parents:
96996
diff
changeset
|
511 (widget-get widget :help-echo) field (caar result)))) |
96989
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
512 (widget-put widget (intern (concat ":" field)) (caar result))) |
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
513 (setq result (cdr result))) |
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
514 |
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
515 ;; Strigi doesn't return URLs in xesam:url. We must fix this. |
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
516 (when |
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
517 (not (url-type (url-generic-parse-url (widget-get widget :xesam:url)))) |
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
518 (widget-put |
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
519 widget :xesam:url (concat "file://" (widget-get widget :xesam:url)))) |
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
520 |
97289
6cec2902d7b8
* net/xesam.el (top): Require `wid-edit' always.
Michael Albinus <michael.albinus@gmx.de>
parents:
97214
diff
changeset
|
521 ;; Strigi returns xesam:size as string. We must fix this. |
6cec2902d7b8
* net/xesam.el (top): Require `wid-edit' always.
Michael Albinus <michael.albinus@gmx.de>
parents:
97214
diff
changeset
|
522 (when (and (widget-member widget :xesam:size) |
6cec2902d7b8
* net/xesam.el (top): Require `wid-edit' always.
Michael Albinus <michael.albinus@gmx.de>
parents:
97214
diff
changeset
|
523 (stringp (widget-get widget :xesam:size))) |
6cec2902d7b8
* net/xesam.el (top): Require `wid-edit' always.
Michael Albinus <michael.albinus@gmx.de>
parents:
97214
diff
changeset
|
524 (widget-put |
6cec2902d7b8
* net/xesam.el (top): Require `wid-edit' always.
Michael Albinus <michael.albinus@gmx.de>
parents:
97214
diff
changeset
|
525 widget :xesam:size (string-to-number (widget-get widget :xesam:url)))) |
6cec2902d7b8
* net/xesam.el (top): Require `wid-edit' always.
Michael Albinus <michael.albinus@gmx.de>
parents:
97214
diff
changeset
|
526 |
96989
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
527 ;; First line: :tag. |
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
528 (cond |
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
529 ((widget-member widget :xesam:title) |
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
530 (widget-put widget :tag (widget-get widget :xesam:title))) |
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
531 ((widget-member widget :xesam:subject) |
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
532 (widget-put widget :tag (widget-get widget :xesam:subject))) |
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
533 ((widget-member widget :xesam:mimeType) |
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
534 (widget-put widget :tag (widget-get widget :xesam:mimeType))) |
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
535 ((widget-member widget :xesam:name) |
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
536 (widget-put widget :tag (widget-get widget :xesam:name)))) |
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
537 |
97289
6cec2902d7b8
* net/xesam.el (top): Require `wid-edit' always.
Michael Albinus <michael.albinus@gmx.de>
parents:
97214
diff
changeset
|
538 ;; Highlight the search items. |
6cec2902d7b8
* net/xesam.el (top): Require `wid-edit' always.
Michael Albinus <michael.albinus@gmx.de>
parents:
97214
diff
changeset
|
539 (when (widget-member widget :tag) |
6cec2902d7b8
* net/xesam.el (top): Require `wid-edit' always.
Michael Albinus <michael.albinus@gmx.de>
parents:
97214
diff
changeset
|
540 (widget-put |
6cec2902d7b8
* net/xesam.el (top): Require `wid-edit' always.
Michael Albinus <michael.albinus@gmx.de>
parents:
97214
diff
changeset
|
541 widget :tag (xesam-highlight-string (widget-get widget :tag)))) |
6cec2902d7b8
* net/xesam.el (top): Require `wid-edit' always.
Michael Albinus <michael.albinus@gmx.de>
parents:
97214
diff
changeset
|
542 |
96989
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
543 ;; Last Modified. |
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
544 (when (widget-member widget :xesam:sourceModified) |
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
545 (widget-put |
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
546 widget :tag |
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
547 (format |
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
548 "%s\nLast Modified: %s" |
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
549 (or (widget-get widget :tag) "") |
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
550 (format-time-string |
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
551 "%d %B %Y, %T" |
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
552 (seconds-to-time |
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
553 (string-to-number (widget-get widget :xesam:sourceModified))))))) |
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
554 |
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
555 ;; Second line: :value. |
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
556 (widget-put widget :value (widget-get widget :xesam:url)) |
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
557 |
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
558 (cond |
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
559 ;; In case of HTML, we use a URL link. |
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
560 ((and (widget-member widget :xesam:mimeType) |
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
561 (string-equal "text/html" (widget-get widget :xesam:mimeType))) |
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
562 (setcar widget 'url-link)) |
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
563 |
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
564 ;; For local files, we will open the file as default action. |
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
565 ((string-match "file" |
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
566 (url-type (url-generic-parse-url |
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
567 (widget-get widget :xesam:url)))) |
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
568 (widget-put |
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
569 widget :notify |
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
570 '(lambda (widget &rest ignore) |
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
571 (find-file |
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
572 (url-filename (url-generic-parse-url (widget-value widget)))))) |
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
573 (widget-put |
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
574 widget :value |
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
575 (url-filename (url-generic-parse-url (widget-get widget :xesam:url)))))) |
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
576 |
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
577 ;; Third line: :doc. |
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
578 (cond |
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
579 ((widget-member widget :xesam:summary) |
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
580 (widget-put widget :doc (widget-get widget :xesam:summary))) |
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
581 ((widget-member widget :xesam:snippet) |
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
582 (widget-put widget :doc (widget-get widget :xesam:snippet)))) |
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
583 |
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
584 (when (widget-member widget :doc) |
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
585 (with-temp-buffer |
97289
6cec2902d7b8
* net/xesam.el (top): Require `wid-edit' always.
Michael Albinus <michael.albinus@gmx.de>
parents:
97214
diff
changeset
|
586 (insert |
6cec2902d7b8
* net/xesam.el (top): Require `wid-edit' always.
Michael Albinus <michael.albinus@gmx.de>
parents:
97214
diff
changeset
|
587 (xesam-highlight-string (widget-get widget :doc))) |
96989
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
588 (fill-region-as-paragraph (point-min) (point-max)) |
97289
6cec2902d7b8
* net/xesam.el (top): Require `wid-edit' always.
Michael Albinus <michael.albinus@gmx.de>
parents:
97214
diff
changeset
|
589 (widget-put widget :doc (buffer-string))) |
6cec2902d7b8
* net/xesam.el (top): Require `wid-edit' always.
Michael Albinus <michael.albinus@gmx.de>
parents:
97214
diff
changeset
|
590 (widget-put widget :help-echo (widget-get widget :doc))) |
96989
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
591 |
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
592 ;; Format the widget. |
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
593 (widget-put |
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
594 widget :format |
97038
b201d17750ad
* net/xesam.el (xesam-from): Remove defvar.
Michael Albinus <michael.albinus@gmx.de>
parents:
96996
diff
changeset
|
595 (format "%d. %s%%[%%v%%]\n%s\n" xesam-current |
96989
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
596 (if (widget-member widget :tag) "%{%t%}\n" "") |
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
597 (if (widget-member widget :doc) "%h" ""))) |
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
598 |
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
599 ;; Write widget. |
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
600 (goto-char (point-max)) |
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
601 (widget-default-create widget) |
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
602 (set-buffer-modified-p nil) |
97038
b201d17750ad
* net/xesam.el (xesam-from): Remove defvar.
Michael Albinus <michael.albinus@gmx.de>
parents:
96996
diff
changeset
|
603 (force-mode-line-update) |
96989
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
604 (redisplay))) |
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
605 |
97289
6cec2902d7b8
* net/xesam.el (top): Require `wid-edit' always.
Michael Albinus <michael.albinus@gmx.de>
parents:
97214
diff
changeset
|
606 (defun xesam-get-hits (engine search hits) |
6cec2902d7b8
* net/xesam.el (top): Require `wid-edit' always.
Michael Albinus <michael.albinus@gmx.de>
parents:
97214
diff
changeset
|
607 "Retrieve hits from ENGINE." |
6cec2902d7b8
* net/xesam.el (top): Require `wid-edit' always.
Michael Albinus <michael.albinus@gmx.de>
parents:
97214
diff
changeset
|
608 (with-current-buffer (xesam-buffer-name (car engine) search) |
6cec2902d7b8
* net/xesam.el (top): Require `wid-edit' always.
Michael Albinus <michael.albinus@gmx.de>
parents:
97214
diff
changeset
|
609 (setq xesam-objects |
6cec2902d7b8
* net/xesam.el (top): Require `wid-edit' always.
Michael Albinus <michael.albinus@gmx.de>
parents:
97214
diff
changeset
|
610 (append xesam-objects |
6cec2902d7b8
* net/xesam.el (top): Require `wid-edit' always.
Michael Albinus <michael.albinus@gmx.de>
parents:
97214
diff
changeset
|
611 (xesam-dbus-call-method |
6cec2902d7b8
* net/xesam.el (top): Require `wid-edit' always.
Michael Albinus <michael.albinus@gmx.de>
parents:
97214
diff
changeset
|
612 :session (car engine) xesam-path-search |
6cec2902d7b8
* net/xesam.el (top): Require `wid-edit' always.
Michael Albinus <michael.albinus@gmx.de>
parents:
97214
diff
changeset
|
613 xesam-interface-search "GetHits" search hits))))) |
6cec2902d7b8
* net/xesam.el (top): Require `wid-edit' always.
Michael Albinus <michael.albinus@gmx.de>
parents:
97214
diff
changeset
|
614 |
96989
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
615 (defun xesam-refresh-search-buffer (engine search) |
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
616 "Refreshes the buffer, presenting results of SEARCH." |
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
617 (with-current-buffer (xesam-buffer-name (car engine) search) |
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
618 ;; Work only if nobody else is here. |
97289
6cec2902d7b8
* net/xesam.el (top): Require `wid-edit' always.
Michael Albinus <michael.albinus@gmx.de>
parents:
97214
diff
changeset
|
619 (unless (or xesam-refreshing (>= xesam-current xesam-to)) |
96989
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
620 (setq xesam-refreshing t) |
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
621 (unwind-protect |
97289
6cec2902d7b8
* net/xesam.el (top): Require `wid-edit' always.
Michael Albinus <michael.albinus@gmx.de>
parents:
97214
diff
changeset
|
622 (let (widget) |
6cec2902d7b8
* net/xesam.el (top): Require `wid-edit' always.
Michael Albinus <michael.albinus@gmx.de>
parents:
97214
diff
changeset
|
623 |
6cec2902d7b8
* net/xesam.el (top): Require `wid-edit' always.
Michael Albinus <michael.albinus@gmx.de>
parents:
97214
diff
changeset
|
624 ;; Retrieve needed hits for visualization. |
6cec2902d7b8
* net/xesam.el (top): Require `wid-edit' always.
Michael Albinus <michael.albinus@gmx.de>
parents:
97214
diff
changeset
|
625 (while (> (min xesam-to xesam-count) (length xesam-objects)) |
6cec2902d7b8
* net/xesam.el (top): Require `wid-edit' always.
Michael Albinus <michael.albinus@gmx.de>
parents:
97214
diff
changeset
|
626 (xesam-get-hits |
6cec2902d7b8
* net/xesam.el (top): Require `wid-edit' always.
Michael Albinus <michael.albinus@gmx.de>
parents:
97214
diff
changeset
|
627 engine search |
6cec2902d7b8
* net/xesam.el (top): Require `wid-edit' always.
Michael Albinus <michael.albinus@gmx.de>
parents:
97214
diff
changeset
|
628 (min xesam-hits-per-page |
6cec2902d7b8
* net/xesam.el (top): Require `wid-edit' always.
Michael Albinus <michael.albinus@gmx.de>
parents:
97214
diff
changeset
|
629 (- (min xesam-to xesam-count) (length xesam-objects))))) |
6cec2902d7b8
* net/xesam.el (top): Require `wid-edit' always.
Michael Albinus <michael.albinus@gmx.de>
parents:
97214
diff
changeset
|
630 |
6cec2902d7b8
* net/xesam.el (top): Require `wid-edit' always.
Michael Albinus <michael.albinus@gmx.de>
parents:
97214
diff
changeset
|
631 ;; Add all result widgets. |
97038
b201d17750ad
* net/xesam.el (xesam-from): Remove defvar.
Michael Albinus <michael.albinus@gmx.de>
parents:
96996
diff
changeset
|
632 (while (< xesam-current (min xesam-to xesam-count)) |
97289
6cec2902d7b8
* net/xesam.el (top): Require `wid-edit' always.
Michael Albinus <michael.albinus@gmx.de>
parents:
97214
diff
changeset
|
633 (setq xesam-current (1+ xesam-current)) |
97038
b201d17750ad
* net/xesam.el (xesam-from): Remove defvar.
Michael Albinus <michael.albinus@gmx.de>
parents:
96996
diff
changeset
|
634 (xesam-refresh-entry engine search)) |
96989
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
635 |
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
636 ;; Add "NEXT" widget. |
97289
6cec2902d7b8
* net/xesam.el (top): Require `wid-edit' always.
Michael Albinus <michael.albinus@gmx.de>
parents:
97214
diff
changeset
|
637 (when (> xesam-count xesam-to) |
96989
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
638 (goto-char (point-max)) |
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
639 (widget-create |
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
640 'link |
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
641 :notify |
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
642 '(lambda (widget &rest ignore) |
97038
b201d17750ad
* net/xesam.el (xesam-from): Remove defvar.
Michael Albinus <michael.albinus@gmx.de>
parents:
96996
diff
changeset
|
643 (setq xesam-to (+ xesam-to xesam-hits-per-page)) |
96989
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
644 (widget-delete widget) |
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
645 (xesam-refresh-search-buffer xesam-engine xesam-search)) |
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
646 "NEXT") |
97289
6cec2902d7b8
* net/xesam.el (top): Require `wid-edit' always.
Michael Albinus <michael.albinus@gmx.de>
parents:
97214
diff
changeset
|
647 (widget-beginning-of-line)) |
6cec2902d7b8
* net/xesam.el (top): Require `wid-edit' always.
Michael Albinus <michael.albinus@gmx.de>
parents:
97214
diff
changeset
|
648 |
6cec2902d7b8
* net/xesam.el (top): Require `wid-edit' always.
Michael Albinus <michael.albinus@gmx.de>
parents:
97214
diff
changeset
|
649 ;; Prefetch next hits. |
6cec2902d7b8
* net/xesam.el (top): Require `wid-edit' always.
Michael Albinus <michael.albinus@gmx.de>
parents:
97214
diff
changeset
|
650 (when (> (min (+ xesam-hits-per-page xesam-to) xesam-count) |
6cec2902d7b8
* net/xesam.el (top): Require `wid-edit' always.
Michael Albinus <michael.albinus@gmx.de>
parents:
97214
diff
changeset
|
651 (length xesam-objects)) |
6cec2902d7b8
* net/xesam.el (top): Require `wid-edit' always.
Michael Albinus <michael.albinus@gmx.de>
parents:
97214
diff
changeset
|
652 (xesam-get-hits |
6cec2902d7b8
* net/xesam.el (top): Require `wid-edit' always.
Michael Albinus <michael.albinus@gmx.de>
parents:
97214
diff
changeset
|
653 engine search |
6cec2902d7b8
* net/xesam.el (top): Require `wid-edit' always.
Michael Albinus <michael.albinus@gmx.de>
parents:
97214
diff
changeset
|
654 (min xesam-hits-per-page |
6cec2902d7b8
* net/xesam.el (top): Require `wid-edit' always.
Michael Albinus <michael.albinus@gmx.de>
parents:
97214
diff
changeset
|
655 (- (min (+ xesam-hits-per-page xesam-to) xesam-count) |
6cec2902d7b8
* net/xesam.el (top): Require `wid-edit' always.
Michael Albinus <michael.albinus@gmx.de>
parents:
97214
diff
changeset
|
656 (length xesam-objects)))))) |
96989
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
657 |
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
658 ;; Return with save settings. |
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
659 (setq xesam-refreshing nil))))) |
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
660 |
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
661 |
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
662 ;;; Search functions. |
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
663 |
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
664 (defun xesam-signal-handler (&rest args) |
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
665 "Handles the different D-Bus signals of a Xesam search." |
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
666 (let* ((service (dbus-event-service-name last-input-event)) |
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
667 (member (dbus-event-member-name last-input-event)) |
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
668 (search (nth 0 args)) |
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
669 (buffer (xesam-buffer-name service search))) |
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
670 |
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
671 (when (get-buffer buffer) |
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
672 (with-current-buffer buffer |
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
673 (cond |
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
674 |
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
675 ((string-equal member "HitsAdded") |
97038
b201d17750ad
* net/xesam.el (xesam-from): Remove defvar.
Michael Albinus <michael.albinus@gmx.de>
parents:
96996
diff
changeset
|
676 (setq xesam-count (+ xesam-count (nth 1 args))) |
96989
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
677 ;; We use `run-at-time' in order to not block the event queue. |
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
678 (run-at-time |
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
679 0 nil |
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
680 'xesam-refresh-search-buffer |
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
681 (assoc service xesam-search-engines) search)) |
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
682 |
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
683 ((string-equal member "SearchDone") |
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
684 (setq mode-line-process |
97289
6cec2902d7b8
* net/xesam.el (top): Require `wid-edit' always.
Michael Albinus <michael.albinus@gmx.de>
parents:
97214
diff
changeset
|
685 (propertize " Done" 'face 'xesam-mode-line)) |
96989
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
686 (force-mode-line-update))))))) |
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
687 |
97289
6cec2902d7b8
* net/xesam.el (top): Require `wid-edit' always.
Michael Albinus <michael.albinus@gmx.de>
parents:
97214
diff
changeset
|
688 (defun xesam-kill-buffer-function () |
6cec2902d7b8
* net/xesam.el (top): Require `wid-edit' always.
Michael Albinus <michael.albinus@gmx.de>
parents:
97214
diff
changeset
|
689 "Send the CloseSearch indication." |
6cec2902d7b8
* net/xesam.el (top): Require `wid-edit' always.
Michael Albinus <michael.albinus@gmx.de>
parents:
97214
diff
changeset
|
690 (when (and (eq major-mode 'xesam-mode) (stringp xesam-search)) |
6cec2902d7b8
* net/xesam.el (top): Require `wid-edit' always.
Michael Albinus <michael.albinus@gmx.de>
parents:
97214
diff
changeset
|
691 (xesam-dbus-call-method |
6cec2902d7b8
* net/xesam.el (top): Require `wid-edit' always.
Michael Albinus <michael.albinus@gmx.de>
parents:
97214
diff
changeset
|
692 :session (car xesam-engine) xesam-path-search |
6cec2902d7b8
* net/xesam.el (top): Require `wid-edit' always.
Michael Albinus <michael.albinus@gmx.de>
parents:
97214
diff
changeset
|
693 xesam-interface-search "CloseSearch" xesam-search))) |
6cec2902d7b8
* net/xesam.el (top): Require `wid-edit' always.
Michael Albinus <michael.albinus@gmx.de>
parents:
97214
diff
changeset
|
694 |
97170
dfc12ea9589f
* net/xesam.el (xesam-type, xesam-query, xesam-xml-string): New
Michael Albinus <michael.albinus@gmx.de>
parents:
97038
diff
changeset
|
695 (defun xesam-new-search (engine type query) |
96989
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
696 "Create a new search session. |
97170
dfc12ea9589f
* net/xesam.el (xesam-type, xesam-query, xesam-xml-string): New
Michael Albinus <michael.albinus@gmx.de>
parents:
97038
diff
changeset
|
697 ENGINE identifies the search engine. TYPE is the query type, it |
dfc12ea9589f
* net/xesam.el (xesam-type, xesam-query, xesam-xml-string): New
Michael Albinus <michael.albinus@gmx.de>
parents:
97038
diff
changeset
|
698 can be either `fulltext-query', or `user-query'. QUERY is a |
dfc12ea9589f
* net/xesam.el (xesam-type, xesam-query, xesam-xml-string): New
Michael Albinus <michael.albinus@gmx.de>
parents:
97038
diff
changeset
|
699 string in the Xesam query language. A string, identifying the |
dfc12ea9589f
* net/xesam.el (xesam-type, xesam-query, xesam-xml-string): New
Michael Albinus <michael.albinus@gmx.de>
parents:
97038
diff
changeset
|
700 search, is returned." |
96989
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
701 (let* ((service (car engine)) |
97214
004f6dc1c1a0
* net/xesam.el (xesam-all-fields): Remove source and content
Michael Albinus <michael.albinus@gmx.de>
parents:
97170
diff
changeset
|
702 (session (xesam-get-cached-property engine "session")) |
97170
dfc12ea9589f
* net/xesam.el (xesam-type, xesam-query, xesam-xml-string): New
Michael Albinus <michael.albinus@gmx.de>
parents:
97038
diff
changeset
|
703 (xml-string |
dfc12ea9589f
* net/xesam.el (xesam-type, xesam-query, xesam-xml-string): New
Michael Albinus <michael.albinus@gmx.de>
parents:
97038
diff
changeset
|
704 (format |
dfc12ea9589f
* net/xesam.el (xesam-type, xesam-query, xesam-xml-string): New
Michael Albinus <michael.albinus@gmx.de>
parents:
97038
diff
changeset
|
705 (if (eq type 'user-query) xesam-user-query xesam-fulltext-query) |
dfc12ea9589f
* net/xesam.el (xesam-type, xesam-query, xesam-xml-string): New
Michael Albinus <michael.albinus@gmx.de>
parents:
97038
diff
changeset
|
706 query)) |
97214
004f6dc1c1a0
* net/xesam.el (xesam-all-fields): Remove source and content
Michael Albinus <michael.albinus@gmx.de>
parents:
97170
diff
changeset
|
707 (search (xesam-dbus-call-method |
96989
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
708 :session service xesam-path-search |
97170
dfc12ea9589f
* net/xesam.el (xesam-type, xesam-query, xesam-xml-string): New
Michael Albinus <michael.albinus@gmx.de>
parents:
97038
diff
changeset
|
709 xesam-interface-search "NewSearch" session xml-string))) |
97038
b201d17750ad
* net/xesam.el (xesam-from): Remove defvar.
Michael Albinus <michael.albinus@gmx.de>
parents:
96996
diff
changeset
|
710 |
96989
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
711 ;; Let us notify for relevant signals. We ignore "HitsRemoved", |
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
712 ;; "HitsModified" and "StateChanged"; there is nothing to do for |
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
713 ;; us. |
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
714 (dbus-register-signal |
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
715 :session service xesam-path-search |
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
716 xesam-interface-search "HitsAdded" |
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
717 'xesam-signal-handler search) |
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
718 (dbus-register-signal |
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
719 :session service xesam-path-search |
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
720 xesam-interface-search "SearchDone" |
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
721 'xesam-signal-handler search) |
97038
b201d17750ad
* net/xesam.el (xesam-from): Remove defvar.
Michael Albinus <michael.albinus@gmx.de>
parents:
96996
diff
changeset
|
722 |
96989
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
723 ;; Create the search buffer. |
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
724 (with-current-buffer |
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
725 (generate-new-buffer (xesam-buffer-name service search)) |
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
726 (switch-to-buffer-other-window (current-buffer)) |
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
727 (xesam-mode) |
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
728 (setq xesam-engine engine |
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
729 xesam-search search |
97170
dfc12ea9589f
* net/xesam.el (xesam-type, xesam-query, xesam-xml-string): New
Michael Albinus <michael.albinus@gmx.de>
parents:
97038
diff
changeset
|
730 ;; `xesam-type', `xesam-query' and `xesam-xml-string' |
dfc12ea9589f
* net/xesam.el (xesam-type, xesam-query, xesam-xml-string): New
Michael Albinus <michael.albinus@gmx.de>
parents:
97038
diff
changeset
|
731 ;; are displayed in the header line. |
dfc12ea9589f
* net/xesam.el (xesam-type, xesam-query, xesam-xml-string): New
Michael Albinus <michael.albinus@gmx.de>
parents:
97038
diff
changeset
|
732 xesam-type (symbol-name type) |
dfc12ea9589f
* net/xesam.el (xesam-type, xesam-query, xesam-xml-string): New
Michael Albinus <michael.albinus@gmx.de>
parents:
97038
diff
changeset
|
733 xesam-query query |
dfc12ea9589f
* net/xesam.el (xesam-type, xesam-query, xesam-xml-string): New
Michael Albinus <michael.albinus@gmx.de>
parents:
97038
diff
changeset
|
734 xesam-xml-string xml-string |
97289
6cec2902d7b8
* net/xesam.el (top): Require `wid-edit' always.
Michael Albinus <michael.albinus@gmx.de>
parents:
97214
diff
changeset
|
735 xesam-objects nil |
97038
b201d17750ad
* net/xesam.el (xesam-from): Remove defvar.
Michael Albinus <michael.albinus@gmx.de>
parents:
96996
diff
changeset
|
736 ;; The buffer identification shall indicate the search |
b201d17750ad
* net/xesam.el (xesam-from): Remove defvar.
Michael Albinus <michael.albinus@gmx.de>
parents:
96996
diff
changeset
|
737 ;; engine. The `help-echo' property is used for debug |
b201d17750ad
* net/xesam.el (xesam-from): Remove defvar.
Michael Albinus <michael.albinus@gmx.de>
parents:
96996
diff
changeset
|
738 ;; information, when applicable. |
96989
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
739 mode-line-buffer-identification |
97038
b201d17750ad
* net/xesam.el (xesam-from): Remove defvar.
Michael Albinus <michael.albinus@gmx.de>
parents:
96996
diff
changeset
|
740 (if (not xesam-debug) |
b201d17750ad
* net/xesam.el (xesam-from): Remove defvar.
Michael Albinus <michael.albinus@gmx.de>
parents:
96996
diff
changeset
|
741 (list |
b201d17750ad
* net/xesam.el (xesam-from): Remove defvar.
Michael Albinus <michael.albinus@gmx.de>
parents:
96996
diff
changeset
|
742 12 (propertized-buffer-identification |
97214
004f6dc1c1a0
* net/xesam.el (xesam-all-fields): Remove source and content
Michael Albinus <michael.albinus@gmx.de>
parents:
97170
diff
changeset
|
743 (xesam-get-cached-property engine "vendor.id"))) |
97038
b201d17750ad
* net/xesam.el (xesam-from): Remove defvar.
Michael Albinus <michael.albinus@gmx.de>
parents:
96996
diff
changeset
|
744 (propertize |
97214
004f6dc1c1a0
* net/xesam.el (xesam-all-fields): Remove source and content
Michael Albinus <michael.albinus@gmx.de>
parents:
97170
diff
changeset
|
745 (xesam-get-cached-property engine "vendor.id") |
004f6dc1c1a0
* net/xesam.el (xesam-all-fields): Remove source and content
Michael Albinus <michael.albinus@gmx.de>
parents:
97170
diff
changeset
|
746 'help-echo |
97038
b201d17750ad
* net/xesam.el (xesam-from): Remove defvar.
Michael Albinus <michael.albinus@gmx.de>
parents:
96996
diff
changeset
|
747 (mapconcat |
97214
004f6dc1c1a0
* net/xesam.el (xesam-all-fields): Remove source and content
Michael Albinus <michael.albinus@gmx.de>
parents:
97170
diff
changeset
|
748 '(lambda (x) |
004f6dc1c1a0
* net/xesam.el (xesam-all-fields): Remove source and content
Michael Albinus <michael.albinus@gmx.de>
parents:
97170
diff
changeset
|
749 (format "%s: %s" x (xesam-get-cached-property engine x))) |
97038
b201d17750ad
* net/xesam.el (xesam-from): Remove defvar.
Michael Albinus <michael.albinus@gmx.de>
parents:
96996
diff
changeset
|
750 '("vendor.id" "vendor.version" "vendor.display" "vendor.xesam" |
b201d17750ad
* net/xesam.el (xesam-from): Remove defvar.
Michael Albinus <michael.albinus@gmx.de>
parents:
96996
diff
changeset
|
751 "vendor.ontology.fields" "vendor.ontology.contents" |
b201d17750ad
* net/xesam.el (xesam-from): Remove defvar.
Michael Albinus <michael.albinus@gmx.de>
parents:
96996
diff
changeset
|
752 "vendor.ontology.sources" "vendor.extensions" |
b201d17750ad
* net/xesam.el (xesam-from): Remove defvar.
Michael Albinus <michael.albinus@gmx.de>
parents:
96996
diff
changeset
|
753 "vendor.ontologies" "vendor.maxhits") |
97170
dfc12ea9589f
* net/xesam.el (xesam-type, xesam-query, xesam-xml-string): New
Michael Albinus <michael.albinus@gmx.de>
parents:
97038
diff
changeset
|
754 "\n")))) |
97289
6cec2902d7b8
* net/xesam.el (top): Require `wid-edit' always.
Michael Albinus <michael.albinus@gmx.de>
parents:
97214
diff
changeset
|
755 (add-hook 'kill-buffer-hook 'xesam-kill-buffer-function) |
6cec2902d7b8
* net/xesam.el (top): Require `wid-edit' always.
Michael Albinus <michael.albinus@gmx.de>
parents:
97214
diff
changeset
|
756 (force-mode-line-update)) |
97170
dfc12ea9589f
* net/xesam.el (xesam-type, xesam-query, xesam-xml-string): New
Michael Albinus <michael.albinus@gmx.de>
parents:
97038
diff
changeset
|
757 |
dfc12ea9589f
* net/xesam.el (xesam-type, xesam-query, xesam-xml-string): New
Michael Albinus <michael.albinus@gmx.de>
parents:
97038
diff
changeset
|
758 ;; Start the search. |
97214
004f6dc1c1a0
* net/xesam.el (xesam-all-fields): Remove source and content
Michael Albinus <michael.albinus@gmx.de>
parents:
97170
diff
changeset
|
759 (xesam-dbus-call-method |
97170
dfc12ea9589f
* net/xesam.el (xesam-type, xesam-query, xesam-xml-string): New
Michael Albinus <michael.albinus@gmx.de>
parents:
97038
diff
changeset
|
760 :session (car engine) xesam-path-search |
dfc12ea9589f
* net/xesam.el (xesam-type, xesam-query, xesam-xml-string): New
Michael Albinus <michael.albinus@gmx.de>
parents:
97038
diff
changeset
|
761 xesam-interface-search "StartSearch" search) |
96989
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
762 |
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
763 ;; Return search id. |
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
764 search)) |
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
765 |
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
766 (defun xesam-search (engine query) |
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
767 "Perform an interactive search. |
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
768 ENGINE is the Xesam search engine to be applied, it must be one of the |
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
769 entries of `xesam-search-engines'. QUERY is the search string in the |
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
770 Xesam user query language. If the search engine does not support |
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
771 the Xesam user query language, a Xesam fulltext search is applied. |
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
772 |
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
773 The default search engine is the first entry in `xesam-search-engines'. |
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
774 Example: |
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
775 |
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
776 (xesam-search (car (xesam-search-engines)) \"emacs\")" |
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
777 (interactive |
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
778 (let* ((vendors (mapcar |
97214
004f6dc1c1a0
* net/xesam.el (xesam-all-fields): Remove source and content
Michael Albinus <michael.albinus@gmx.de>
parents:
97170
diff
changeset
|
779 '(lambda (x) (xesam-get-cached-property x "vendor.display")) |
96989
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
780 (xesam-search-engines))) |
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
781 (vendor |
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
782 (if (> (length vendors) 1) |
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
783 (completing-read |
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
784 "Enter search engine: " vendors nil t |
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
785 (try-completion "" vendors) 'xesam-minibuffer-vendor-history) |
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
786 (car vendors)))) |
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
787 (list |
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
788 ;; ENGINE. |
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
789 (when vendor |
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
790 (dolist (elt (xesam-search-engines) engine) |
97214
004f6dc1c1a0
* net/xesam.el (xesam-all-fields): Remove source and content
Michael Albinus <michael.albinus@gmx.de>
parents:
97170
diff
changeset
|
791 (when (string-equal |
004f6dc1c1a0
* net/xesam.el (xesam-all-fields): Remove source and content
Michael Albinus <michael.albinus@gmx.de>
parents:
97170
diff
changeset
|
792 (xesam-get-cached-property elt "vendor.display") vendor) |
96989
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
793 (setq engine elt)))) |
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
794 ;; QUERY. |
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
795 (when vendor |
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
796 (read-from-minibuffer |
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
797 "Enter search string: " nil nil nil |
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
798 'xesam-minibuffer-query-history))))) |
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
799 |
97170
dfc12ea9589f
* net/xesam.el (xesam-type, xesam-query, xesam-xml-string): New
Michael Albinus <michael.albinus@gmx.de>
parents:
97038
diff
changeset
|
800 (if (null engine) |
dfc12ea9589f
* net/xesam.el (xesam-type, xesam-query, xesam-xml-string): New
Michael Albinus <michael.albinus@gmx.de>
parents:
97038
diff
changeset
|
801 (message "No search engine running") |
dfc12ea9589f
* net/xesam.el (xesam-type, xesam-query, xesam-xml-string): New
Michael Albinus <michael.albinus@gmx.de>
parents:
97038
diff
changeset
|
802 (if (zerop (length query)) |
dfc12ea9589f
* net/xesam.el (xesam-type, xesam-query, xesam-xml-string): New
Michael Albinus <michael.albinus@gmx.de>
parents:
97038
diff
changeset
|
803 (message "No query applied") |
dfc12ea9589f
* net/xesam.el (xesam-type, xesam-query, xesam-xml-string): New
Michael Albinus <michael.albinus@gmx.de>
parents:
97038
diff
changeset
|
804 (xesam-new-search engine xesam-query-type query)))) |
96989
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
805 |
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
806 (provide 'xesam) |
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
807 |
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
808 ;;; TODO: |
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
809 |
97289
6cec2902d7b8
* net/xesam.el (top): Require `wid-edit' always.
Michael Albinus <michael.albinus@gmx.de>
parents:
97214
diff
changeset
|
810 ;; * Accept input while retrieving prefetched hits. `run-at-time'? |
97214
004f6dc1c1a0
* net/xesam.el (xesam-all-fields): Remove source and content
Michael Albinus <michael.albinus@gmx.de>
parents:
97170
diff
changeset
|
811 ;; * With prefix, let's choose search engine. |
96989
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
812 ;; * Minibuffer completion for user queries. |
97038
b201d17750ad
* net/xesam.el (xesam-from): Remove defvar.
Michael Albinus <michael.albinus@gmx.de>
parents:
96996
diff
changeset
|
813 ;; * `revert-buffer-function' implementation. |
b201d17750ad
* net/xesam.el (xesam-from): Remove defvar.
Michael Albinus <michael.albinus@gmx.de>
parents:
96996
diff
changeset
|
814 ;; |
96989
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
815 ;; * Mid term |
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
816 ;; - If available, use ontologies for field selection. |
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
817 ;; - Search engines for Emacs bugs database, wikipedia, google, |
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
818 ;; yahoo, ebay, ... |
97289
6cec2902d7b8
* net/xesam.el (top): Require `wid-edit' always.
Michael Albinus <michael.albinus@gmx.de>
parents:
97214
diff
changeset
|
819 ;; - Construct complex queries via widgets, like in mairix.el. |
96989
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
820 |
96996 | 821 ;; arch-tag: 7fb9fc6c-c2ff-4bc7-bb42-bacb80cce2b2 |
96989
691e8bf892cb
* net/xesam.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff
changeset
|
822 ;;; xesam.el ends here |