From de13d91196ca16475ea44133bc1a82871d5944fc Mon Sep 17 00:00:00 2001 From: Yuchen Pei Date: Mon, 17 Oct 2022 17:15:42 +1100 Subject: fixing external handler macro for url --- hmm.el | 24 +++++++++++++++++------- 1 file 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) -- cgit v1.2.3