branch: externals/emms
commit 0e5fdf5dea8b174ff758489a2e1c84096935d2b0
Author: Fran Burstall <[email protected]>
Commit: Fran Burstall <[email protected]>
* emms-radio-browser.el: define prefix according to Emacs version
---
emms-radio-browser.el | 130 ++++++++++++++++++++++++++++++++++----------------
1 file changed, 90 insertions(+), 40 deletions(-)
diff --git a/emms-radio-browser.el b/emms-radio-browser.el
index 7d9c2f9d36..81d4ae9049 100644
--- a/emms-radio-browser.el
+++ b/emms-radio-browser.el
@@ -233,8 +233,90 @@ Switches to an EMMS playlist containing the results."
(interactive (list (transient-args transient-current-command)))
(message "%S" args))
-;; Look in the "Entry points" section for the prefix that uses all
-;; this.
+;; Finally, we define the prefix. Sadly emacs-29, ships with a
+;; prehistoric version of transient which misses both a level-toggling
+;; command and the transient-information class. So we use a macro to
+;; give different defintions of the prefix accordinding to emacs version.
+
+(defmacro emms-radio-browser--make-full-search ()
+ "Define a transient with features conditional on Emacs version."
+ (if (< emacs-major-version 30)
+ '(transient-define-prefix emms-radio-browser-full-search-prefix ()
+ "Construct a search query by filling in a form.
+
+Optionally dispatch it to the radio-browser server and switch to an
+EMMS playlist of results."
+ ["EMMS radio browser full search: hit coloured letters to set/unset
fields\n"
+ ["Search terms:"
+ ("n" "Name" "Station name" :alist-key name :class
emms-radio-browser-field)
+ ("t" "Tags" "Tags (comma separated)" :alist-key tagList :class
emms-radio-browser-field)
+ ("c" "Country" "Country" :alist-key country :class
emms-radio-browser-field)
+ ("l" "Language" "Language" :alist-key language :class
emms-radio-browser-field)]
+ ["Exact matches for:"
+ ("xn" "Name" "Exact names" :alist-key nameExact :class
emms-radio-browser-bool)
+ ("xt" "Tags" "Exact tags" :alist-key tagExact :class
emms-radio-browser-bool)
+ ("xc" "Country" "Exact country" :alist-key countryExact :class
emms-radio-browser-bool)
+ ("xl" "Language" "Exact language" :alist-key languageExact :class
emms-radio-browser-bool)]
+ ["Advanced search terms:" :pad-keys t
+ ("C" "Codec" "Codec" :alist-key codec :class
emms-radio-browser-field)
+ ("bn" "Minimum bitrate" "Minimum bitrate (kb/s)" :alist-key
bitrateMin :class emms-radio-browser-field
+ :reader transient-read-number-N0)
+ ("bz" "Maximum bitrate" "Maximum bitrate (kb/s)" :alist-key
bitrateMin :class emms-radio-browser-field
+ :reader transient-read-number-N0)
+ ("k" "Country code" "Country code" :alist-key countrycode :class
emms-radio-browser-field)]]
+ ["Search parameters:"
+ ("m" "Maximum hits" "Maximum Hits" :alist-key limit :class
emms-radio-browser-field
+ :reader transient-read-number-N+ :always-read t)
+ ("o" "Order by" "Order by" :alist-key order :class
emms-radio-browser-field
+ :choices (lambda () emms-radio-browser-order-fields) :always-read t)
+ ("d" "Descending" "Descending order" :alist-key reverse :class
emms-radio-browser-bool)]
+ [:class transient-row "Actions:"
+ ("C-c C-c" "Execute search"
emms-radio-browser-execute-full-search)
+ ("C-c C-k" "Abandon search" ignore)
+ ])
+ '(transient-define-prefix emms-radio-browser-full-search-prefix ()
+ "Construct a search query by filling in a form.
+
+Optionally dispatch it to the radio-browser server and switch to an
+EMMS playlist of results."
+ :column-widths '(30 20 30)
+ [:description "EMMS radio browser full search"
+ (:info "Hit coloured letters to set/unset fields")
+ (:info '(lambda () (concat (propertize "C-x a" 'face
'help-key-binding)
+ " to toggle advanced search")))
+ (:info '(lambda () (concat (propertize "C-c C-c" 'face
'help-key-binding)
+ " to execute the search")))
+ (:info '(lambda () (concat (propertize "C-c C-k" 'face
'help-key-binding)
+ " to abandon the search")))]
+ [["Search terms:"
+ ("n" "Name" "Station name" :alist-key name :class
emms-radio-browser-field)
+ ("t" "Tags" "Tags (comma separated)" :alist-key tagList :class
emms-radio-browser-field)
+ ("c" "Country" "Country" :alist-key country :class
emms-radio-browser-field)
+ ("l" "Language" "Language" :alist-key language :class
emms-radio-browser-field)]
+ [5 "Exact matches for:"
+ ("xn" "Name" "Exact names" :alist-key nameExact :class
emms-radio-browser-bool)
+ ("xt" "Tags" "Exact tags" :alist-key tagExact :class
emms-radio-browser-bool)
+ ("xc" "Country" "Exact country" :alist-key countryExact :class
emms-radio-browser-bool)
+ ("xl" "Language" "Exact language" :alist-key languageExact :class
emms-radio-browser-bool)]
+ [5 "Advanced search terms:" :pad-keys t
+ ("C" "Codec" "Codec" :alist-key codec :class
emms-radio-browser-field)
+ ("bn" "Minimum bitrate" "Minimum bitrate (kb/s)" :alist-key
bitrateMin :class emms-radio-browser-field
+ :reader transient-read-number-N0)
+ ("bz" "Maximum bitrate" "Maximum bitrate (kb/s)" :alist-key
bitrateMin :class emms-radio-browser-field
+ :reader transient-read-number-N0)
+ ("k" "Country code" "Country code" :alist-key countrycode :class
emms-radio-browser-field)]]
+ ["Search parameters:"
+ ("m" "Maximum hits" "Maximum Hits" :alist-key limit :class
emms-radio-browser-field
+ :reader transient-read-number-N+ :always-read t)
+ ("o" "Order by" "Order by" :alist-key order :class
emms-radio-browser-field
+ :choices (lambda () emms-radio-browser-order-fields) :always-read t)
+ ("d" "Descending" "Descending order" :alist-key reverse :class
emms-radio-browser-bool)]
+ [:class transient-row "Actions:"
+ ("C-c C-c" "Execute search"
emms-radio-browser-execute-full-search)
+ ("C-c C-k" "Abandon search" ignore)
+ (6 "s" "Show search" emms-radio-browser-show-full-search)])))
+
+(emms-radio-browser--make-full-search)
;;** Query the server
@@ -331,49 +413,17 @@ Switches to an EMMS playlist containing the results."
(emms-radio-browser-query-api (list (cons 'url url))
emms-radio-browser-url-endpoint))
-;; Finally here is the transient prefix for making a full search.
+;; Finally load the transient for making a full search. This was
+;;conditionally defined above. We wrap in in a function to get the autoload.
;;;###autoload
-(transient-define-prefix emms-radio-browser-full-search ()
+(defun emms-radio-browser-full-search ()
"Construct a search query by filling in a form.
Optionally dispatch it to the radio-browser server and switch to an
EMMS playlist of results."
- :column-widths '(30 20 30)
- [:description "EMMS radio browser full search"
- (:info "Hit coloured letters to set/unset fields")
- (:info '(lambda () (concat (propertize "C-x a" 'face
'help-key-binding)
- " to toggle advanced search")))
- (:info '(lambda () (concat (propertize "C-c C-c" 'face
'help-key-binding)
- " to execute the search")))
- (:info '(lambda () (concat (propertize "C-c C-k" 'face
'help-key-binding)
- " to abandon the search")))]
- [["Search terms:"
- ("n" "Name" "Station name" :alist-key name :class emms-radio-browser-field)
- ("t" "Tags" "Tags (comma separated)" :alist-key tagList :class
emms-radio-browser-field)
- ("c" "Country" "Country" :alist-key country :class
emms-radio-browser-field)
- ("l" "Language" "Language" :alist-key language :class
emms-radio-browser-field)]
- [5 "Exact matches for:"
- ("xn" "Name" "Exact names" :alist-key nameExact :class
emms-radio-browser-bool)
- ("xt" "Tags" "Exact tags" :alist-key tagExact :class
emms-radio-browser-bool)
- ("xc" "Country" "Exact country" :alist-key countryExact :class
emms-radio-browser-bool)
- ("xl" "Language" "Exact language" :alist-key languageExact :class
emms-radio-browser-bool)]
- [5 "Advanced search terms:" :pad-keys t
- ("C" "Codec" "Codec" :alist-key codec :class emms-radio-browser-field)
- ("bn" "Minimum bitrate" "Minimum bitrate (kb/s)" :alist-key bitrateMin
:class emms-radio-browser-field
- :reader transient-read-number-N0)
- ("bz" "Maximum bitrate" "Maximum bitrate (kb/s)" :alist-key bitrateMin
:class emms-radio-browser-field
- :reader transient-read-number-N0)
- ("k" "Country code" "Country code" :alist-key countrycode :class
emms-radio-browser-field)]]
- ["Search parameters:"
- ("m" "Maximum hits" "Maximum Hits" :alist-key limit :class
emms-radio-browser-field
- :reader transient-read-number-N+ :always-read t)
- ("o" "Order by" "Order by" :alist-key order :class emms-radio-browser-field
- :choices (lambda () emms-radio-browser-order-fields) :always-read t)
- ("d" "Descending" "Descending order" :alist-key reverse :class
emms-radio-browser-bool)]
- [:class transient-row "Actions:"
- ("C-c C-c" "Execute search" emms-radio-browser-execute-full-search)
- ("C-c C-k" "Abandon search" ignore)
- (6 "s" "Show search" emms-radio-browser-show-full-search)])
+ (interactive)
+ (call-interactively #'emms-radio-browser-full-search-prefix t))
+
(provide 'emms-radio-browser)
;;; emms-radio-browser.el ends here