diff options
-rw-r--r-- | hmm.el | 24 |
1 files changed, 17 insertions, 7 deletions
@@ -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) |