biome: improve presets

This commit is contained in:
Pavel Korytov 2024-03-10 22:33:52 +03:00
parent 36efbc122d
commit db0784e243
3 changed files with 39 additions and 11 deletions

View file

@ -25,10 +25,14 @@
;; Tools for doing multiple queries to Open Meteo. ;; Tools for doing multiple queries to Open Meteo.
;;; Code: ;;; Code:
(require 'biome-query)
(require 'font-lock) (require 'font-lock)
(require 'transient) (require 'transient)
(require 'biome-query)
;; XXX Recursive imports T_T
(declare-function biome-preset "biome")
(defvar biome-multi-query-current nil (defvar biome-multi-query-current nil
"Current query. "Current query.
@ -140,6 +144,7 @@ This is a list of forms as defined by `biome-query-current'.")
["Actions" ["Actions"
:class transient-row :class transient-row
("RET" "Run" biome-multi-exec) ("RET" "Run" biome-multi-exec)
("p" "Preset" biome-preset :transient transient--do-replace)
("P" "Generate preset definition" biome-multi--generate-preset) ("P" "Generate preset definition" biome-multi--generate-preset)
("R" "Reset" biome-multi-reset :transient t) ("R" "Reset" biome-multi-reset :transient t)
("q" "Quit" transient-quit-one)] ("q" "Quit" transient-quit-one)]

View file

@ -39,6 +39,10 @@
(require 'biome-api-data) (require 'biome-api-data)
;; XXX Recursive imports T_T
(declare-function biome-preset "biome")
(declare-function biome-multi "biome")
(defcustom biome-query-max-fields-in-row 20 (defcustom biome-query-max-fields-in-row 20
"Maximum number of fields in a row." "Maximum number of fields in a row."
:type 'integer :type 'integer
@ -438,7 +442,7 @@ number of options is more than
(mapconcat (mapconcat
(lambda (choice) (lambda (choice)
(propertize (cdr choice) 'face (propertize (cdr choice) 'face
(if (eq (car choice) value) (if (equal (car choice) value)
'transient-value 'transient-value
'transient-inactive-value))) 'transient-inactive-value)))
(oref obj options) (oref obj options)
@ -1038,6 +1042,8 @@ SECTION is a form as defined in `biome-api-parse--page'."
["Actions" ["Actions"
:class transient-row :class transient-row
("r" "Resume" biome-resume :transient transient--do-replace) ("r" "Resume" biome-resume :transient transient--do-replace)
("p" "Preset" biome-preset :transient transient--do-stack)
("u" "Join multiple queries" biome-multi :transient transient--do-stack)
("q" "Quit" transient-quit-one)] ("q" "Quit" transient-quit-one)]
(interactive (list nil)) (interactive (list nil))
(unless callback (unless callback

View file

@ -58,7 +58,17 @@ API."
:group 'biome) :group 'biome)
(defcustom biome-presets-alist nil (defcustom biome-presets-alist nil
"Presets for `biome' queries." "Presets for `biome' queries.
One item of the list is another list with three elements:
- preset name;
- `:normal' for normal `biome' or `:multi' for `biome-multi';
- parameters as defined by `biome-query-current' or
`biome-multi-query-current'.
Thus, preset names are the keys of the alist.
To generate expressions that add stuff to this list, run \"Generate
preset definition\" in `biome' or `biome-multi'."
:type '(repeat :type '(repeat
(list (list
(string :tag "Preset name") (string :tag "Preset name")
@ -128,7 +138,14 @@ PARAMS as query."
(call-interactively #'biome-multi))) (call-interactively #'biome-multi)))
(defun biome-preset (preset-def) (defun biome-preset (preset-def)
"Run PRESET-DEF." "Run `biome' with a preset.
PRESET-DEF is one preset as defined by `biome-presets-alist', sans the
name. If run interactively, prompt PRESET-DEF from
`biome-presets-alist'.
Run \"Generate preset definition\" in `biome' or `biome-multi' to
generate expressions that add stuff to `biome-presets-alist'."
(interactive (list (alist-get (interactive (list (alist-get
(completing-read "Preset" biome-presets-alist) (completing-read "Preset" biome-presets-alist)
biome-presets-alist nil nil #'equal))) biome-presets-alist nil nil #'equal)))
@ -138,10 +155,10 @@ PARAMS as query."
(setq biome-query--callback (setq biome-query--callback
(lambda (query) (lambda (query)
(biome-api-get query biome-frontend))) (biome-api-get query biome-frontend)))
(setq biome-query-current params) (setq biome-query-current (copy-tree params))
(biome-query--section-open (alist-get :name params))) (biome-query--section-open (alist-get :name params)))
(:multi (:multi
(setq biome-multi-query-current params) (setq biome-multi-query-current (copy-tree params))
(call-interactively #'biome-multi))))) (call-interactively #'biome-multi)))))
(provide 'biome) (provide 'biome)