aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorYuchen Pei <hi@ypei.me>2022-10-17 16:36:54 +1100
committerYuchen Pei <hi@ypei.me>2022-10-17 16:36:54 +1100
commit52020e40cd7a06a074ec1a2a130cb2c4211ac762 (patch)
tree26cab87d37af79d9b85c2b1760762cdd8faf09de
parentfba0274c23070fc007350b6221fc7c9dd0108bb4 (diff)
make external handler independent of xdg
-rw-r--r--hmm.el36
1 files 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) ";"))))