aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorYuchen Pei <hi@ypei.me>2022-10-17 17:15:42 +1100
committerYuchen Pei <hi@ypei.me>2022-10-17 17:15:42 +1100
commitde13d91196ca16475ea44133bc1a82871d5944fc (patch)
treea093e1e724b2dabed608768d61d74b8906cf66e4
parent52020e40cd7a06a074ec1a2a130cb2c4211ac762 (diff)
fixing external handler macro for url
-rw-r--r--hmm.el24
1 files changed, 17 insertions, 7 deletions
diff --git a/hmm.el b/hmm.el
index b78d85e..6063ec2 100644
--- a/hmm.el
+++ b/hmm.el
@@ -17,29 +17,37 @@
(format ,(plist-get engine :format) query)))
(hmm-add-handler '(:command ,function-name) :query))))
-(defmacro hmm-define-external-handler (handler)
+(defmacro hmm-define-external-handler (handler type)
(let* ((description (format "%s - %s"
(plist-get handler :display-name)
(plist-get handler :description)))
- (function-name (intern (format "hmm-%s" (plist-get handler :name))))
+ (function-name (intern (format "hmm-external-%s"
+ (plist-get handler :name))))
(display-name (plist-get handler :display-name))
(external-command
(mapcar (lambda (token)
(if (string-match "^%[fFuU]$" token)
- `arg
+ (if (eq type :file)
+ `(expand-file-name arg)
+ `arg)
token))
(split-string (plist-get handler :external-command))))
- (handler (plist-put handler :command function-name)))
+ (handler (plist-put handler :command function-name))
+ (interactive-form
+ (if (eq type :file)
+ `(list
+ (read-file-name ,(format "Run %s with file: " display-name)))
+ (format "sRun %s with: " display-name))))
`(progn
(defun ,function-name (arg)
,description
- (interactive ,(format "sRun %s with: " display-name))
+ (interactive ,interactive-form)
(apply 'start-process
(append
(list (format ,(format "%s-%%s" function-name) arg)
(format ,(format "*%s-%%s*" function-name) arg))
,(cons 'list external-command))))
- (hmm-add-handler ',handler :file))))
+ (hmm-add-handler ',handler ,type))))
(defun hmm-add-handler (handler handling)
(let ((handlers (plist-get hmm-handlers handling)))
@@ -157,7 +165,9 @@ 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-handler ,xdg-handler)))
+ (eval `(hmm-define-external-handler ,xdg-handler :file)))
+ (dolist (handler hmm-external-handlers)
+ (eval `(hmm-define-external-handler ,handler ,(plist-get handler :handling))))
(dolist (browser hmm-web-browsers)
(hmm-add-handler
(list :command (plist-get browser :command)