Skip to content

Instantly share code, notes, and snippets.

@vishalbelsare
Created December 27, 2017 21:28
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save vishalbelsare/4f78722856a6bca7faf1f73353892025 to your computer and use it in GitHub Desktop.
Save vishalbelsare/4f78722856a6bca7faf1f73353892025 to your computer and use it in GitHub Desktop.
Emacs Lisp function to call Gnome Tracker's FTS Search via D-Bus and display results in a dired buffer
(require 'dbus)
(require 'dash)
(defun tracker-dbus-async (search-terms)
(interactive "sFulltext Search String: ")
;; mapcar 'car --> mapcar 'url-file-truename --> dired cons
(defun tracker-results-process (search-terms results)
(if
(-contains?
(mapcar (lambda (x) (frame-parameter x 'name)) (frame-list)) "*tracker-hello*")
(select-frame-by-name "*tracker-hello*")
(select-frame
(make-frame '((name . "*tracker-hello*") (unsplittable . t)))))
(dired (cons
(concat "*tracker-search* : " search-terms)
(mapcar (lambda (x) (url-file-truename (car x))) results)
))
(set-window-dedicated-p (get-buffer-window (current-buffer)) t)
)
(fset 'tracker-results-process-fix-search-terms
(apply-partially 'tracker-results-process search-terms))
(let ((search-query (concat "SELECT nie:url(?f) WHERE {
?f a nfo:Document . ?f fts:match '" search-terms "'
} ORDER BY
DESC (fts:rank(?f))")))
;; search-query
(dbus-call-method-asynchronously
:session "org.freedesktop.Tracker1"
"/org/freedesktop/Tracker1/Resources"
"org.freedesktop.Tracker1.Resources"
"SparqlQuery"
'tracker-results-process-fix-search-terms
search-query
)
)
)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment