From 36efbc122db62c6ffe6b1271d84c6f92c94bc9d6 Mon Sep 17 00:00:00 2001 From: SqrtMinusOne Date: Sun, 10 Mar 2024 17:47:22 +0300 Subject: [PATCH] biome: add biome-preset --- biome-multi.el | 14 +++++++++++--- biome-query.el | 14 +++++++++++--- biome.el | 27 +++++++++++++++++++++++++++ 3 files changed, 49 insertions(+), 6 deletions(-) diff --git a/biome-multi.el b/biome-multi.el index b116ac8..63700fa 100644 --- a/biome-multi.el +++ b/biome-multi.el @@ -113,12 +113,20 @@ This is a list of forms as defined by `biome-query-current'.") (defun biome-multi--generate-preset () "Generate a preset for the current multi-query." (interactive) - (let ((buf (generate-new-buffer "*biome-preset*"))) + (let ((buf (generate-new-buffer "*biome-preset*")) + (preset-symbol (gensym "biome-query-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)))) + (insert (pp-to-string `(biome-def-multi-preset ,preset-symbol + ,biome-multi-query-current))) + (insert ";; invoke with M-x " (symbol-name preset-symbol)) + (insert "\n\n;; Or:\n") + (insert (pp-to-string `(add-to-list 'biome-presets-alist + '(,(symbol-name preset-symbol) + :multi + ,biome-multi-query-current)))) + (insert ";; invoke with M-x biome-preset")) (switch-to-buffer buf))) (transient-define-prefix biome-multi-query (callback) diff --git a/biome-query.el b/biome-query.el index d82d11c..67e0b69 100644 --- a/biome-query.el +++ b/biome-query.el @@ -965,12 +965,20 @@ SUFFIXES is a list of suffix definitions." (defun biome-query--generate-preset () "Generate a preset for the current query." (interactive) - (let ((buf (generate-new-buffer "*biome-preset*"))) + (let ((buf (generate-new-buffer "*biome-preset*")) + (preset-symbol (gensym "biome-query-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)))) + (insert (pp-to-string `(biome-def-preset ,preset-symbol + ,biome-query-current))) + (insert ";; invoke with M-x " (symbol-name preset-symbol)) + (insert "\n\n;; Or:\n") + (insert (pp-to-string `(add-to-list 'biome-presets-alist + '(,(symbol-name preset-symbol) + :normal + ,biome-query-current)))) + (insert ";; invoke with M-x biome-preset")) (switch-to-buffer buf))) (transient-define-prefix biome-query--section (section &optional parents) diff --git a/biome.el b/biome.el index f0af0ca..538a664 100644 --- a/biome.el +++ b/biome.el @@ -57,6 +57,16 @@ API." :type 'function :group 'biome) +(defcustom biome-presets-alist nil + "Presets for `biome' queries." + :type '(repeat + (list + (string :tag "Preset name") + (choice (const :tag "Normal" :normal) + (const :tag "Multi" :multi)) + (sexp :tag "Parameters"))) + :group 'biome) + (defun biome () "Bountiful Interface to Open Meteo for Emacs." (interactive) @@ -117,5 +127,22 @@ PARAMS as query." (setq biome-multi-query-current ',params) (call-interactively #'biome-multi))) +(defun biome-preset (preset-def) + "Run PRESET-DEF." + (interactive (list (alist-get + (completing-read "Preset" biome-presets-alist) + biome-presets-alist nil nil #'equal))) + (pcase-let ((`(,kind ,params) preset-def)) + (pcase kind + (:normal + (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))) + (:multi + (setq biome-multi-query-current params) + (call-interactively #'biome-multi))))) + (provide 'biome) ;;; biome.el ends here