2010-07-01 7 views
4

J'écris un fichier elisp pour intégrer GNU Emacs avec Zeitgeist sur dbus. En raison de l'absence d'une bonne documentation sur dbus dans emacs et mon manque d'expérience avec elisp avancée, je viens avec l'erreur suivante dans ma méthode zeitgeist-send:Erreur de type incorrect dans la méthode dbus (GNU Emacs)

Wrong type argument: D-Bus, (zeitgeist-event-timestamp)

J'ai essayé de corriger le problème en plaçant :string avant tous les arguments, mais cela m'a donné l'erreur:

Wrong type argument: stringp, (zeitgeist-event-timestamp)

Cela n'a aucun sens, car je suis convaincu que la valeur de (Zeitgeist-événement horodatage) est une chaîne.

Si vous en avez besoin, la documentation de dbus pour zeitgeist est here. Le format est asaasay.

Voici le code:

(require 'dbus) 
(defun zeitgeist-call (method &rest args) 
    "Call the zeitgeist method METHOD with ARGS over dbus" 
    (apply 'dbus-call-method 
    :session       ; use the session (not system) bus 
    "org.gnome.zeitgeist.Engine"  ; service name 
    "/org/gnome/zeitgeist/log/activity" ; path name 
    "org.gnome.zeitgeist.Log"   ; interface name 
    method args)) 

(defun zeitgeist-event-timestamp() 
    "Get the timestamp in zeitgeist format." 
    (let* ((now-time (current-time)) 
     (hi  (car now-time)) 
     (lo  (car (cdr now-time))) 
     (msecs (car (cdr (cdr now-time))))) ; This is *micro*seconds. 

    (number-to-string (+ (/ msecs 1000) 
     (* (+ lo (* hi 65536))  1000))))) ; Convert system time to milliseconds. 

(defun zeitgeist-event-interpretation (event) 
    "Get the Event Interpretation of EVENT." 
    (case event 
    ('zeitgeist-open-event 
     "http://zeitgeist-project.com/ontologies/2010/01/27/zg#AccessEvent") 
    ('zeitgeist-close-event 
     "http://zeitgeist-project.com/schema/1.0/core#CloseEvent") 
    ('zeitgeist-create-event 
     "http://zeitgeist-project.com/schema/1.0/core#CreateEvent") 
    ('zeitgeist-modify-event 
     "http://zeitgeist-project.com/schema/1.0/core#ModifyEvent") 
    (otherwise nil))) 

(defun zeitgeist-send (event fileurl filemime) 
    "Send zeitgeist an event EVENT using the list FILEINFO." 
    (let ((event-interpretation (zeitgeist-event-interpretation event))) 
    (if (eq nil event-interpretation) 
     (message "YOU FAIL") 
     (zeitgeist-call "InsertEvents" 
     '("" 
     (zeitgeist-event-timestamp) 
     event-interpretation 
     "http://zeitgeist-project.com/schema/1.0/core#UserActivity" 
     "app://emacs.desktop") 
     '((fileurl 
     "http://www.semanticdesktop.org/ontologies/2007/03/22/nfo/#Document" 
     "http://www.semanticdesktop.org/ontologies/nfo/#FileDataObject" 
     fileurl 
     filemime 
     (file-name-sans-versions fileurl) 
     "")) ; Some black magic later 
     '(:array))))) 

(defun zeitgeist-open-file() 
    "Tell zeitgeist we openned a file!" 
    (if (eq nil (buffer-file-name)) 
    (message "You are not on a file.") 
    (zeitgeist-send 'zeitgeist-open-event buffer-file-name "text/plain"))) 

(zeitgeist-open-file) 

Merci pour toute aide! Patrick Niedzielski

+0

Il est étrange parce que (type de (horodatage-zeitgeist-event)) est certainement une chaîne. Si je remplace (zeitgeist-event-timestamp) par "", l'appel se plaint du paramètre suivant. – stsquad

+0

J'ai demandé sur la liste de diffusion, et on m'a dit que puisque j'utilise (quote ...), la fonction (zeitgeist-event-timestamp) n'est pas appelée. Les variables ne sont pas non plus évaluées. Je l'ai testé avec (liste ...), et maintenant il fonctionne très bien. Laissez-moi répondre à cette question. –

Répondre

4

J'ai demandé sur la liste de diffusion, et j'ai découvert que puisque j'utilisais (quote ...) au lieu de (list ...), les variables et les fonctions n'étaient pas évaluées. Une erreur LISP stupide.

Aussi, si quelqu'un est intéressé, je vais envoyer ce patch dans le projet Zeitgeist.

Cheers, Patrick

+0

S'il vous plaît faire! J'ai aussi pensé à l'intégration d'Emacs-Zeitgeist. –

+0

Je posterai sur mon blog (http://freesoftwarehacker.blogspot.com/), quand je trouverai la procédure exacte.^_ ^ –

Questions connexes