mirror of
https://github.com/SqrtMinusOne/biome.git
synced 2025-12-10 14:35:13 +03:00
biome-query: presets
This commit is contained in:
parent
5eb2b84592
commit
f3717600ec
2 changed files with 54 additions and 9 deletions
|
|
@ -892,6 +892,16 @@ SUFFIXES is a list of suffix definitions."
|
|||
(user-error "Biome-query--callback is not set"))
|
||||
(funcall biome-query--callback biome-query-current))
|
||||
|
||||
(defun biome-query--generate-preset ()
|
||||
(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-preset ,(gensym "biome-query-preset-")
|
||||
,biome-query-current))))
|
||||
(switch-to-buffer buf)))
|
||||
|
||||
(transient-define-prefix biome-query--section (section &optional parents)
|
||||
"Render transient for SECTION.
|
||||
|
||||
|
|
@ -912,13 +922,26 @@ SECTION is a form as defined in `biome-api-parse--page'."
|
|||
("RET" "Run" biome-query--on-return)
|
||||
("q" "Up" transient-quit-one)
|
||||
("Q" "Quit" transient-quit-all)
|
||||
,(unless parents
|
||||
'("R" "Reset" biome-query--reset-report :transient t))])))
|
||||
,@(unless parents
|
||||
'(("P" "Generate preset defition" biome-query--generate-preset)
|
||||
("R" "Reset" biome-query--reset-report :transient t)))])))
|
||||
(transient-setup 'biome-query--section nil nil :scope
|
||||
`((:section . ,section)
|
||||
(:parents . ,parents))))
|
||||
(put 'biome-query-section 'transient--layout nil)))
|
||||
|
||||
(defun biome-query--section-open (name)
|
||||
(let ((params (alist-get name biome-api-data nil nil #'equal)))
|
||||
(unless params
|
||||
(error "No such section: %s" name))
|
||||
(setq biome-query--current-section params)
|
||||
(when (and biome-query-current
|
||||
(not (equal name (alist-get :name biome-query-current))))
|
||||
(setq biome-query-current nil))
|
||||
(unless biome-query-current
|
||||
(biome-query--reset-report))
|
||||
(biome-query--section params)))
|
||||
|
||||
(transient-define-prefix biome-query (callback)
|
||||
["Open Meteo Data"
|
||||
:setup-children
|
||||
|
|
@ -929,15 +952,11 @@ SECTION is a form as defined in `biome-api-parse--page'."
|
|||
`(,(alist-get :key params)
|
||||
,name
|
||||
(lambda () (interactive)
|
||||
(setq biome-query--current-section ',params)
|
||||
(when (and biome-query-current
|
||||
(not (equal ,name (alist-get :name biome-query-current))))
|
||||
(setq biome-query-current nil))
|
||||
(unless biome-query-current
|
||||
(biome-query--reset-report))
|
||||
(biome-query--section ',params))
|
||||
(biome-query--section-open ,name))
|
||||
:transient transient--do-replace))))]
|
||||
["Actions"
|
||||
:class transient-row
|
||||
("r" "Resume" biome-resume :transient transient--do-replace)
|
||||
("q" "Quit" transient-quit-one)]
|
||||
(interactive (list nil))
|
||||
(unless callback
|
||||
|
|
|
|||
26
biome.el
26
biome.el
|
|
@ -52,5 +52,31 @@ API."
|
|||
(lambda (query)
|
||||
(biome-api-get query biome-frontend))))
|
||||
|
||||
(defun biome-resume ()
|
||||
"Resume the last query."
|
||||
(interactive)
|
||||
(unless biome-query-current
|
||||
(user-error "Nothing to resume"))
|
||||
;; `biome-query--callback' should have been already set by the
|
||||
;; previous invocation of `biome'
|
||||
(biome-query--section-open (alist-get :name biome-query-current)))
|
||||
|
||||
(defmacro biome-def-preset (name params)
|
||||
"Declare a query preset.
|
||||
|
||||
NAME is the name of the target function. PARAMS is a form as defined
|
||||
by `biome-query-current'.
|
||||
|
||||
This macro creates an interactive function that runs `biome'with
|
||||
PARAMS as query."
|
||||
(declare (indent 1))
|
||||
`(defun ,name ()
|
||||
(interactive)
|
||||
(setq biome-query--callback
|
||||
(lambda (query)
|
||||
(biome-api-get query biome-frontend)))
|
||||
(setq biome-query-current ',params)
|
||||
(biome-query--section-open (alist-get :name ',params))))
|
||||
|
||||
(provide 'biome)
|
||||
;;; biome.el ends here
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue