From 52020e40cd7a06a074ec1a2a130cb2c4211ac762 Mon Sep 17 00:00:00 2001 From: Yuchen Pei Date: Mon, 17 Oct 2022 16:36:54 +1100 Subject: make external handler independent of xdg --- hmm.el | 36 +++++++++++++++++------------------- 1 file changed, 17 insertions(+), 19 deletions(-) diff --git a/hmm.el b/hmm.el index fd3e919..b78d85e 100644 --- a/hmm.el +++ b/hmm.el @@ -17,25 +17,23 @@ (format ,(plist-get engine :format) query))) (hmm-add-handler '(:command ,function-name) :query)))) -(defmacro hmm-define-external-xdg-handler (xdg-handler) +(defmacro hmm-define-external-handler (handler) (let* ((description (format "%s - %s" - (plist-get xdg-handler :name) - (plist-get xdg-handler :description))) - (function-name (intern - (format "hmm-%s" - (plist-get xdg-handler :xdg-desktop-name)))) + (plist-get handler :display-name) + (plist-get handler :description))) + (function-name (intern (format "hmm-%s" (plist-get handler :name)))) + (display-name (plist-get handler :display-name)) (external-command (mapcar (lambda (token) (if (string-match "^%[fFuU]$" token) `arg token)) - (split-string (plist-get xdg-handler :external-command)))) - (name (plist-get xdg-handler :name)) - (handler (plist-put xdg-handler :command function-name))) + (split-string (plist-get handler :external-command)))) + (handler (plist-put handler :command function-name))) `(progn (defun ,function-name (arg) ,description - (interactive ,(format "sRun %s with: " name)) + (interactive ,(format "sRun %s with: " display-name)) (apply 'start-process (append (list (format ,(format "%s-%%s" function-name) arg) @@ -129,10 +127,9 @@ If it is a url, display a list of url handlers." (lambda (handler) (and (hmm-thing-match thing type handler) - (or (member mimetype - (plist-get handler :mimetypes)) - (and (null (plist-get handler :mimetypes)) - (not (plist-get handler :xdg-desktop-name)))))) + (or (null (plist-get handler :mimetypes)) + (member mimetype + (plist-get handler :mimetypes))))) (plist-get hmm-handlers type))))) (defun hmm-thing-match (thing type handler) @@ -160,7 +157,7 @@ If it is a url, display a list of url handlers." (dolist (browser hmm-web-browsers) (eval `(hmm-define-web-search-engine ,engine ,browser)))) (dolist (xdg-handler (hmm-get-xdg-handlers)) - (eval `(hmm-define-external-xdg-handler ,xdg-handler))) + (eval `(hmm-define-external-handler ,xdg-handler))) (dolist (browser hmm-web-browsers) (hmm-add-handler (list :command (plist-get browser :command) @@ -169,16 +166,17 @@ If it is a url, display a list of url handlers." (defun hmm-get-xdg-handlers () (seq-filter - 'identity + (lambda (handler) + (and handler (plist-get handler :mimetypes))) (mapcar (lambda (desktop-file) (condition-case nil (let ((parsed (xdg-desktop-read-file desktop-file))) (list - :name (gethash "Name" parsed) + :name (intern (concat "xdg-desktop-" + (file-name-base desktop-file))) + :display-name (gethash "Name" parsed) :description (gethash "Comment" parsed) - :xdg-desktop-name (intern (concat "xdg-desktop-" - (file-name-base desktop-file))) :external-command (gethash "Exec" parsed) :mimetypes (seq-filter (lambda (s) (not (string-empty-p s))) (split-string (gethash "MimeType" parsed) ";")))) -- cgit v1.2.3