diff --git a/biome-api.el b/biome-api.el index 4766f54..31e7294 100644 --- a/biome-api.el +++ b/biome-api.el @@ -143,7 +143,7 @@ called with QUERIES and the data returned by the API as arguments." :params (biome-api--get-params query) :parser #'json-read :success (cl-function - (lambda (&key data &allow-other-keys) + (lambda (&allow-other-keys) ;; I'm not sure why, but `request-response-done-p' for ;; the current request returns nil. I don't ;; know how stable this is, so... diff --git a/biome-multi.el b/biome-multi.el index 8794436..22c19a6 100644 --- a/biome-multi.el +++ b/biome-multi.el @@ -65,7 +65,8 @@ This is a list of forms as defined by `biome-query-current'.") (defun biome-multi-add-query () "Add new query to `biome-multi'." (interactive) - (biome-query + (funcall-interactively + #'biome-query (lambda (query) (if (seq-empty-p biome-multi-query-current) (setq biome-multi-query-current (list (copy-tree query))) @@ -109,17 +110,29 @@ This is a list of forms as defined by `biome-query-current'.") (user-error "No queries to execute")) (funcall biome-multi--callback biome-multi-query-current)) +(defun biome-multi--generate-preset () + "Generate a preset for the current multi-query." + (interactive) + (let ((buf (generate-new-buffer "*biome-preset*"))) + (with-current-buffer buf + (emacs-lisp-mode) + (insert ";; Add this to your config\n") + (insert (pp-to-string `(biome-def-multi-preset ,(gensym "biome-query-preset-") + ,biome-multi-query-current)))) + (switch-to-buffer buf))) + (transient-define-prefix biome-multi-query (callback) ["Open Meteo Multi Query" (biome-multi--transient-report-infix)] ["Queries" :class transient-row - ("a" "Add query" biome-multi-add-query) + ("a" "Add query" biome-multi-add-query :transient transient--do-replace) ("e" "Edit query" biome-multi-edit :transient t) ("d" "Delete query" biome-multi-remove :transient t)] ["Actions" :class transient-row ("RET" "Run" biome-multi-exec) + ("P" "Generate preset definition" biome-multi--generate-preset) ("R" "Reset" biome-multi-reset :transient t) ("q" "Quit" transient-quit-one)] (interactive (list nil)) diff --git a/biome.el b/biome.el index 2958ccb..f1e2b9a 100644 --- a/biome.el +++ b/biome.el @@ -77,7 +77,9 @@ API." (defun biome-multi () "Run multiple queries to Open Meteo and join the results." (interactive) - (biome-multi-query + (funcall-interactively + #'biome-multi-query + biome-multi-query (lambda (query) (biome-api-get-multiple query @@ -102,5 +104,19 @@ PARAMS as query." (setq biome-query-current ',params) (biome-query--section-open (alist-get :name ',params)))) +(defmacro biome-def-multi-preset (name params) + "Declare a multi-query preset. + +NAME is the name of the target function. PARAMS is a form as defined +by `biome-multi-query-current'. + +This macro creates an interactive function that runs `biome-multi' with +PARAMS as query." + (declare (indent 1)) + `(defun ,name () + (interactive) + (setq biome-multi-query-current ',params) + (call-interactively #'biome-multi))) + (provide 'biome) ;;; biome.el ends here