(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" '(:string "" :string (zeitgeist-event-timestamp) :string 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)