emacs-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Emacs-diffs] Changes to emacs/lisp/net/xesam.el,v


From: Michael Albinus
Subject: [Emacs-diffs] Changes to emacs/lisp/net/xesam.el,v
Date: Thu, 31 Jul 2008 19:30:15 +0000

CVSROOT:        /sources/emacs
Module name:    emacs
Changes by:     Michael Albinus <albinus>       08/07/31 19:30:14

Index: xesam.el
===================================================================
RCS file: /sources/emacs/emacs/lisp/net/xesam.el,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -b -r1.3 -r1.4
--- xesam.el    26 Jul 2008 18:54:25 -0000      1.3
+++ xesam.el    31 Jul 2008 19:30:14 -0000      1.4
@@ -28,7 +28,7 @@
 ;;
 ;; xesam-glib 0.3.4, xesam-tools 0.6.1
 ;; beagle 0.3.7, beagle-xesam 0.2
-;; strigi 0.5.10
+;; strigi 0.5.11
 
 ;; The precondition for this package is a D-Bus aware Emacs.  This is
 ;; configured per default, when Emacs is built on a machine running
@@ -281,6 +281,9 @@
 ;; Pacify byte compiler.
 (defvar xesam-engine nil)
 (defvar xesam-search nil)
+(defvar xesam-type nil)
+(defvar xesam-query nil)
+(defvar xesam-xml-string nil)
 (defvar xesam-current nil)
 (defvar xesam-count nil)
 (defvar xesam-to nil)
@@ -368,18 +371,12 @@
 
 ;;; Search buffers.
 
-(define-derived-mode xesam-mode special-mode "Xesam"
+(define-derived-mode xesam-mode nil "Xesam"
   "Major mode for presenting search results of a Xesam search.
 In this mode, widgets represent the search results.
 
 \\{xesam-mode-map}
 Turning on Xesam mode runs the normal hook `xesam-mode-hook'."
-  (when (not (interactive-p))
-    ;; Initialize buffer.
-    (setq buffer-read-only t)
-    (let ((inhibit-read-only t))
-      (erase-buffer))
-
     ;; Keymap.
     (setq xesam-mode-map (copy-keymap special-mode-map))
     (set-keymap-parent xesam-mode-map widget-keymap)
@@ -387,9 +384,13 @@
 
     ;; Maybe we implement something useful, later on.
     (set (make-local-variable 'revert-buffer-function) 'ignore)
-    ;; `xesam-engine' and `xesam-search' will be set in `xesam-new-search'.
+  ;; `xesam-engine', `xesam-search', `xesam-type', `xesam-query', and
+  ;; `xesam-xml-string' will be set in `xesam-new-search'.
     (set (make-local-variable 'xesam-engine) nil)
     (set (make-local-variable 'xesam-search) nil)
+  (set (make-local-variable 'xesam-type) "")
+  (set (make-local-variable 'xesam-query) "")
+  (set (make-local-variable 'xesam-xml-string) "")
     ;; `xesam-current' is the last hit put into the search buffer,
     (set (make-local-variable 'xesam-current) 0)
     ;; `xesam-count' is the number of hits reported by the search engine.
@@ -403,7 +404,29 @@
     ;; Mode line position returns hit counters.
     (set (make-local-variable 'mode-line-position)
         (list '(-3 "%p%")
-              '(10 (:eval (format " (%d/%d)" xesam-current xesam-count)))))))
+            '(10 (:eval (format " (%d/%d)" xesam-current xesam-count)))))
+  ;; Header line contains the query string.
+  (set (make-local-variable 'header-line-format)
+       (list '(20
+              (:eval
+               (list "Type: "
+                     (propertize xesam-type 'face 'font-lock-type-face))))
+            '(10
+              (:eval
+               (list " Query: "
+                     (propertize
+                      xesam-query
+                      'face 'font-lock-type-face
+                      'help-echo xesam-xml-string))))))
+
+  (when (not (interactive-p))
+    ;; Initialize buffer.
+    (setq buffer-read-only t)
+    (let ((inhibit-read-only t))
+      (erase-buffer))))
+
+;; It doesn't make sense to call it interactively.
+(put 'xesam-mode 'disabled t)
 
 (defun xesam-buffer-name (service search)
   "Return the buffer name where to present search results.
@@ -583,16 +606,21 @@
                (propertize " Done" 'face 'font-lock-type-face))
          (force-mode-line-update)))))))
 
-(defun xesam-new-search (engine query)
+(defun xesam-new-search (engine type query)
   "Create a new search session.
-ENGINE identifies the search engine.  QUERY is a string in the
-Xesam user query language.  A string, identifying the search, is
-returned."
+ENGINE identifies the search engine.  TYPE is the query type, it
+can be either `fulltext-query', or `user-query'.  QUERY is a
+string in the Xesam query language.  A string, identifying the
+search, is returned."
   (let* ((service (car engine))
         (session (cdr engine))
+        (xml-string
+         (format
+          (if (eq type 'user-query) xesam-user-query xesam-fulltext-query)
+          query))
         (search (dbus-call-method
                  :session service xesam-path-search
-                 xesam-interface-search "NewSearch" session query)))
+                 xesam-interface-search "NewSearch" session xml-string)))
 
     ;; Let us notify for relevant signals.  We ignore "HitsRemoved",
     ;; "HitsModified" and "StateChanged"; there is nothing to do for
@@ -605,9 +633,6 @@
      :session service xesam-path-search
      xesam-interface-search "SearchDone"
      'xesam-signal-handler search)
-    (dbus-call-method
-     :session (car engine) xesam-path-search
-     xesam-interface-search "StartSearch" search)
 
     ;; Create the search buffer.
     (with-current-buffer
@@ -616,6 +641,11 @@
       (xesam-mode)
       (setq xesam-engine engine
            xesam-search search
+           ;; `xesam-type', `xesam-query' and `xesam-xml-string'
+           ;; are displayed in the header line.
+           xesam-type (symbol-name type)
+           xesam-query query
+           xesam-xml-string xml-string
            ;; The buffer identification shall indicate the search
            ;; engine.  The `help-echo' property is used for debug
            ;; information, when applicable.
@@ -632,7 +662,13 @@
                  "vendor.ontology.fields" "vendor.ontology.contents"
                  "vendor.ontology.sources" "vendor.extensions"
                  "vendor.ontologies" "vendor.maxhits")
-               "\n")))))
+               "\n"))))
+         (force-mode-line-update))
+
+    ;; Start the search.
+    (dbus-call-method
+     :session (car engine) xesam-path-search
+     xesam-interface-search "StartSearch" search)
 
     ;; Return search id.
     search))
@@ -670,18 +706,20 @@
         "Enter search string: " nil nil nil
         'xesam-minibuffer-query-history)))))
 
-  (if (and engine (stringp query))
-      (if (eq xesam-query-type 'user-query)
-         (xesam-new-search engine (format xesam-user-query query))
-       (xesam-new-search engine (format xesam-fulltext-query query)))
-    ;; There might be no search engine available ATM.
-    (message "No query applied")))
+  (if (null engine)
+      (message "No search engine running")
+    (if (zerop (length query))
+       (message "No query applied")
+      (xesam-new-search engine xesam-query-type query))))
 
 (provide 'xesam)
 
 ;;; TODO:
 
+;; * Solve error, that xesam-mode does not work the very first time.
 ;; * Retrieve several results at once.
+;; * Retrieve hits for the next page in advance.
+;; * With prefix, let's chosse search engine.
 ;; * Improve mode-line handling. Show search string etc.
 ;; * Minibuffer completion for user queries.
 ;; * `revert-buffer-function' implementation.




reply via email to

[Prev in Thread] Current Thread [Next in Thread]