isamert / empv.el Goto Github PK
View Code? Open in Web Editor NEWAn Emacs media player, media library manager, radio player, YouTube frontend
License: GNU General Public License v3.0
An Emacs media player, media library manager, radio player, YouTube frontend
License: GNU General Public License v3.0
hello,
first thank you to fix the previous error i reported.
its fixed!
but after select something, the following occurs.
it seems, that something goes wrong.
any ideas?
curl: (3) URL using bad/illegal format or missing URL Warning: Binary output can mess up your terminal. Use "--output -" to tell Warning: curl to output it to your terminal anyway, or consider "--output Warning: <FILE>" to save to a file.
s ee https://github.com/isamert/empv.el/blob/main/empv.el#start-of-content :type may be repeated
Rationale: https://github.com/yt-dlp/yt-dlp is a fork of youtube-dl with additional features and can replace it in most usages.
*Feature Request: Move Title To Start Of Info Display
Hi,
With many sites now using hls to stream (stream is split into multiple
little files) the EMPV Info Display is getting long, and worse, the
Title is at the end. Could you perhaps consider moving the Title to
the start of that display? It's a simple edit of the format line, so I
thought a patch was too heavy a hammer, and I also dont know if you
have other ideas there.
as an example, bloomberg on YT: https://www.youtube.com/@markets is a playlist with over 800 items right now; how do I get it to play live -- other than by hitting n 800 times
volume from empv.el appears to not respect volume set in config/mpv/mpv.conf; eg if you set volume-max and volume in the conf file --- say volume=200, manipulating volume later with empv-volume-up/down immediately sets volume to 100
i tried to install this extension and it kinda works.
it launches the mpv process via mpv-start but i get this after launching it
after that is unable to detect the mpv process and manipulate it
yt search works. as you detailed in your config to set the invidious instance url.
if i try to play it. it seems it cant find the mpv process but its already launched.
you can troubleshoot it via firing up a quickemu virt machine. and using scoop package manager to install all applications quickly
I'm looking for an elisp function that I can call in the tabulated results buffer to get the underlying media url. The tabulated-list entry only has URLs for the thumbnails as best I can tell.
to avoid not defined at runtime for iimage-recenter when compiling modules that load empv
Feature Request: I use empv to find talks on Youtube, then play some of them. I'd like to persist the ones I play into a playlist file m3u/pls on disk -- and give it a name, is there an easy way to do this?
This would be great because then I can use doom-store
or pcache
or desktop
, etc. to persist my search history across sessions. Also, that way my YouTube search history isn't mixed up with my history for other minibuffer commands.
Hi, thanks for this very interesting package. I was giving it a try, and everything works smooth except for the empv-youtube
command. It seems to be a json error, though. Indeed, if I activate the debugging mode and issue the command with a random query, I get the following error:
(empv) Error while reading JSON :
followed by a long json string. I have a very simple config:
(use-package empv
:straight (:type git
:host github
:repo "isamert/empv.el")
:config
(setq empv-invidious-instance "https://invidious.tiekoetter.com/api/v1"))
Do you have any hints on what could be the problem, or how to further debug? I am on Emacs 29.0.50.
Custom option empv-display-events loses all info display
I set the above option to nil in the hope of reducing chatter when
playing HLS streams (see earlier issue).
However turning that switch off also entirely silences
empv-display-current because that command also calls
empv--display-event -- perhaps refactor so the custom option disables
automatic event display but allows explicit requests to go through?
Hi!
Thanks for writing this package. I'm already finding it a quicker and easier method for watching videos than via emms
.
Anyway, just a little issue with the name of the playlist saving function: empv-playtlist-save-to-file
.
I assume it's supposed to be empv-playlist-save-to-file
?
See for example: the let binding has no effect. (let ((empv-display-current-format "#{time-pos}")) (empv-display-current nil)) ; was hoping this would just display the time position
Feature Request: Playlist And Metadata
I found a set of nice m3u playlists here:
BBC stations: https://garfnet.org.uk/cms/2023/10/29/latest-bbc-hls-radio-streams/
The m3u file has an #extinf: field listing the station name, and the
station URL.
I am able to play the m3u file and scroll linearly through stations
in empv.
Feature Request:
Would it be possible for mpv to load the playlist file, and display a
simple tabular UI and lists the stations and enables directly playing
the desired station?
empv: Ignores save-position-on-quit when set in .config/mpv.conf
I added save-position-on-quit to my config/mpv.conf and verified at
the shell that it takes effect; position is saved on quit and resumes
at saved position.
With that set in the config/mpv.conf, empv appears to ignore this; do
we need to add a flag when launching mpv so those are respected? Was
surprized because setting volume in the conf file does take effect
with empv.
After enqueuing some entries into the playlist, calling empv-playlist-select
interactively appears to do nothing. No playlist items are presented for selection. However, empv-playlist-next
and empv-playlist-prev
are working as expected.
UPDATE: After further testing, it seems empv-playlist-select
IS working when there are YouTube results, but it does nothing when there are only local files in the playlist.
Using mpv
0.34.1 on macOS.
Unable to get empv-play-radio working on emacs.
Just want to achieve 2 things to through this package:
Showing error on execution of command
M-x empv-play-radio
empv--make-network-process: Unknown address family
Next time when same command executed error is different,
Showing error on Second Execution of command
M-x empv-play-radio
empv--send-command: Buffer emacs-config.org has no process
empv-start
<< this starts the process but sadly songs doesnt plays, leave showing them on modeline.empv-play-radio
after the empv-start
didnt start.empv-play
and inserted radio channel link didnt worked.System Details:
OS: Windows 10 (N)
Emacs installed through: Chocolatey Package Manager
emacs-version: GNU Emacs 29.1 (build 2, x86_64-w64-mingw32) of 2023-07-31
I have no idea where my cygwin folder for chocolatey or the msys2 setup file is at.
Emacs package manager: Elpaca
Config.org (init file)
(use-package empv
:config
(setq empv-invidious-instance "vid.priv.au")
(setq empv-radio-channels
'(("SomaFM - Groove Salad" . "http://www.somafm.com/groovesalad.pls")
("Totally 80s FM" . "https://zeno.fm/radio/totally-80s-fm/")))
)
PS: I tried eradio and its working for me on windows, sharing just for the reference, going through which i found your fork of it for the modeline title, found program reuqires a dependency by you was : SOCAT, Which I havnt found anywhere, searched through Chocolatey / Winget / Scoop My best guess is its part of Linux-utils.
I am very New to Emacs universe its possible i am doing very silly mistake and unable to find it.
Any Input, Suggestions or troubleshooting steps will be welcome.
Last Thank you very much for the Package.
Warm Regards
Seasons Greetings
Am new to this space, someone made a interesting library for emacs that seems to transcode and notate youtube videos for note-taking with org-mode. Any interop with this project? What are the differences?
https://github.com/kljohann/mpv.el/wiki
For Emacspeak users, it would be nice to be able to specify to empv that thumbnails need not be downloaded and displayed. Possible? Also, could you add a results-displayed-done hook or equivalent?
Not all issues fixed; with config file setting max vol to 150, empv-set-volume always forces to 100, even if you specify 125 in minibuffer
I played vidoe with empv-play-video
, but emacs only gave me audio. is this normal?
Q: Why the two calls to empv-send-command?
Macro empv--transform-property ---
https://github.com/isamert/empv.el/blob/main/empv.el#L637
has two calls to empv-send-command, I couldn't quite understand why.
Asking because I am thinking of implementing additional empv commands
that add audio filters etc while something is playing.
"straigt" should be "straight"
When trying to play a youtube playlist, the youtu.be style url does not work. When using the regular youtube.com url, playlists do play. I tested this using normal mpv on the command line.
Suggestion For Info Line Display
The new template is nice, I can now put the title in front.
There is still the minor annoyance of HLS live streams displaying a
somewhat irrelevant chapter and percentage, best shown with an
example.
Stream: BBC Radio 4
Displays: [radio-4-bbc.m3u Playing, 00:06 of 00:19 (34%), 1/1, 🔊 50]
m3u file below:
#EXTINF:-1,BBC - Radio 4
http://as-hls-ww-live.akamaized.net/pool_904/live/ww/bbc_radio_fourfm/bbc_radio_fourfm.isml/bbc_radio_fourfm-audio%3d96000.norewind.m3u8
hello,
today i tried the consult version of empv-youtube, but unfortunately it throws error:
any ideas?
i am on emacs 29 with latest consult from melpa.
Debugger entered--Lisp error: (wrong-number-of-arguments (3 . 3) 4) #f(compiled-function (_ candidates cand) #<bytecode -0xd544d39bedca072>)("klaus schulze deus arrakis" ("klaus schulze deus arrakis") "#klaus schulze deux" nil) #f(compiled-function (narrow input cand) #<bytecode -0xccbb8a8c7b94269>)(nil "#klaus schulze deux" "klaus schulze deus arrakis") consult--with-preview-1(any nil #f(compiled-function (narrow input cand) #<bytecode -0xccbb8a8c7b94269>) #f(compiled-function (&rest args2) #<bytecode -0x14a2044ce3f4257f>) #f(compiled-function () #<bytecode 0x11065a3c08779429>)) consult--read-1(#f(compiled-function (action) #<bytecode -0x1a87fea8c34d96fd>) :prompt "Search in YouTube videos: " :category empv-youtube :lookup #f(compiled-function (_ candidates cand) #<bytecode -0xd544d39bedca072>) :initial "#" :sort nil :require-match nil :prompt "Select: " :preview-key any :sort t :lookup #f(compiled-function (selected &rest _) #<bytecode 0x16ffa8caa42b639b>)) apply(consult--read-1 #f(compiled-function (action) #<bytecode -0x1a87fea8c34d96fd>) (:prompt "Search in YouTube videos: " :category empv-youtube :lookup #f(compiled-function (_ candidates cand) #<bytecode -0xd544d39bedca072>) :initial "#" :sort nil :require-match nil :prompt "Select: " :preview-key any :sort t :lookup #f(compiled-function (selected &rest _) #<bytecode 0x16ffa8caa42b639b>))) consult--read(#f(compiled-function (action) #<bytecode -0x1a87fea8c34d96fd>) :prompt "Search in YouTube videos: " :category empv-youtube :lookup #f(compiled-function (_ candidates cand) #<bytecode -0xd544d39bedca072>) :initial "#" :sort nil :require-match nil) consult-empv--get-input-with-suggestions() consult-empv-youtube() funcall-interactively(consult-empv-youtube) call-interactively(consult-empv-youtube record nil) command-execute(consult-empv-youtube record) execute-extended-command(nil "consult-empv-youtube" nil) funcall-interactively(execute-extended-command nil "consult-empv-youtube" nil) call-interactively(execute-extended-command nil nil) command-execute(execute-extended-command)
Hello,
I am trying to get youtube working with invidious. I'm using a simple test config with the following:
(require 'package)
(add-to-list 'package-archives '("melpa" . "https://melpa.org/packages/") t)
(package-initialize)
(unless package-archive-contents
(package-refresh-contents))
(unless (package-installed-p 'use-package)
(package-install 'use-package))
(require 'use-package)
(setq use-package-always-ensure t)
(use-package empv
:ensure t
:config
(setq empv-invidious-instance "https://invidious.io.lol"))
(custom-set-variables
;; custom-set-variables was added by Custom.
;; If you edit it by hand, you could mess it up, so be careful.
;; Your init file should contain only one such instance.
;; If there is more than one, they won't work right.
'(package-selected-packages '(empv use-package undo-tree general evil-collection)))
(custom-set-faces
;; custom-set-faces was added by Custom.
;; If you edit it by hand, you could mess it up, so be careful.
;; Your init file should contain only one such instance.
;; If there is more than one, they won't work right.
)
I've tried several different invidious instances, and I've also attempted to use both empv-youtube and empv-youtube-tabulated. I get no results for either. Any ideas on what I should try?
empv shows [ Playing, 00:00 of 00:00 (0%), -1/1] -- the -1/-1 indicates stream failure. Is it possible to detect this programmatically? At present, when this happens, I wait expectantly have to listen to the status line repeatedly until the -1/-1 shows up and then give up; I'd like to hav it announce the failure somehow -- which is the motivation behind the question
Basically, when I have some tabulated YouTube search results and I call empv-exit
, Iit breaks the tabulated results buffer in that I can no longer play any of the entries.
Can you explain:
(empv--let-properties '(time-pos )
(format "%.2d" .time-pos))
(empv--let-properties '(time-pos )
(message "%.2d" .time-pos))
#+end_src
The form using message returns the time
The form using format does not return the time.
How do I install this package in Doom-Emacs.
I think that quelpa will mess up my config.el
and I do not want to install it by using the load-path.
Since I want to get new updates...
/tmp/mmpv-toggle.org
Nit: please update the custom type to be a choice --- otherwise you cant set it to nil via custom, and setting it outside custom shows a mismatch warning
"...If you are a consult user, then you can also install consult-empv package to get search suggestions while using empv’s YouTube search capabilities..."
Where is the link to install consult?
Is this a command line in Linux?
Description: Unable to save playlist
empv-playlist-save-to-file throws a "stringp nil" error even though
when stepping in the debugger, I can see that the playlist variable
that holds the extracted playlist property contains a list of urls.
Set empv-youtube-use-tabulated-results to t
Invoke empv-youtube-playlist
empv throws the following backtrace.
No error if not using tabulated results.
Enter cricket as the term,
Backtrace:
Debugger entered--Lisp error: (wrong-type-argument number-or-marker-p nil)
(empv--format-yt-views nil)
(#f(compiled-function (it index) #<bytecode 0xb1dd0bf69192f1f>) ((type . "playlist") (title . "Great Cricket Documentaries") (playlistId . "PLnarSCJWu_W9QXQ1LsgrWM5DB52YUFHvU") (playlistThumbnail . "https://i.ytimg.com/vi/MKcvHAec6GM/hqdefault.jpg?sqp=-oaymwEWCKgBEF5IWvKriqkDCQgBFQAAiEIYAQ==&rs=AOn4CLD7APuwd_69vqgfxdtm78Yf-PNxmA") (author . "Sohil Nikam") (authorId . "UCwkTZJSEUD5YzsyhC7J11vg") (authorUrl . "/channel/UCwkTZJSEUD5YzsyhC7J11vg") (authorVerified . :json-false) (videoCount . 9) (videos ((title . "Documentary | Crossing The Line") (videoId . "MKcvHAec6GM") (lengthSeconds . 3354) (videoThumbnails ((quality . "maxres") (url . "https://vid.puffyan.us/vi/MKcvHAec6GM/maxres.jpg") (width . 1280) (height . 720)) ((quality . "maxresdefault") (url . "https://vid.puffyan.us/vi/MKcvHAec6GM/maxresdefault.jpg") (width . 1280) (height . 720)) ((quality . "sddefault") (url . "https://vid.puffyan.us/vi/MKcvHAec6GM/sddefault.jpg") (width . 640) (height . 480)) ((quality . "high") (url . "https://vid.puffyan.us/vi/MKcvHAec6GM/hqdefault.jpg") (width . 480) (height . 360)) ((quality . "medium") (url . "https://vid.puffyan.us/vi/MKcvHAec6GM/mqdefault.jpg") (width . 320) (height . 180)) ((quality . "default") (url . "https://vid.puffyan.us/vi/MKcvHAec6GM/default.jpg") (width . 120) (height . 90)) ((quality . "start") (url . "https://vid.puffyan.us/vi/MKcvHAec6GM/1.jpg") (width . 120) (height . 90)) ((quality . "middle") (url . "https://vid.puffyan.us/vi/MKcvHAec6GM/2.jpg") (width . 120) (height . 90)) ((quality . "end") (url . "https://vid.puffyan.us/vi/MKcvHAec6GM/3.jpg") (width . 120) (height . 90)))) ((title . "VIV RICHARDS - KING OF CRICKET - 1987 Documentary") (videoId . "nmP4S-cmR9k") (lengthSeconds . 3290) (videoThumbnails ((quality . "maxres") (url . "https://vid.puffyan.us/vi/nmP4S-cmR9k/maxres.jpg") (width . 1280) (height . 720)) ((quality . "maxresdefault") (url . "https://vid.puffyan.us/vi/nmP4S-cmR9k/maxresdefault.jpg") (width . 1280) (height . 720)) ((quality . "sddefault") (url . "https://vid.puffyan.us/vi/nmP4S-cmR9k/sddefault.jpg") (width . 640) (height . 480)) ((quality . "high") (url . "https://vid.puffyan.us/vi/nmP4S-cmR9k/hqdefault.jpg") (width . 480) (height . 360)) ((quality . "medium") (url . "https://vid.puffyan.us/vi/nmP4S-cmR9k/mqdefault.jpg") (width . 320) (height . 180)) ((quality . "default") (url . "https://vid.puffyan.us/vi/nmP4S-cmR9k/default.jpg") (width . 120) (height . 90)) ((quality . "start") (url . "https://vid.puffyan.us/vi/nmP4S-cmR9k/1.jpg") (width . 120) (height . 90)) ((quality . "middle") (url . "https://vid.puffyan.us/vi/nmP4S-cmR9k/2.jpg") (width . 120) (height . 90)) ((quality . "end") (url . "https://vid.puffyan.us/vi/nmP4S-cmR9k/3.jpg") (width . 120) (height . 90)))))) 0)
(#f(compiled-function (elt) #<bytecode 0x1699b940fa8aa4ed>) ((type . "playlist") (title . "Great Cricket Documentaries") (playlistId . "PLnarSCJWu_W9QXQ1LsgrWM5DB52YUFHvU") (playlistThumbnail . "https://i.ytimg.com/vi/MKcvHAec6GM/hqdefault.jpg?sqp=-oaymwEWCKgBEF5IWvKriqkDCQgBFQAAiEIYAQ==&rs=AOn4CLD7APuwd_69vqgfxdtm78Yf-PNxmA") (author . "Sohil Nikam") (authorId . "UCwkTZJSEUD5YzsyhC7J11vg") (authorUrl . "/channel/UCwkTZJSEUD5YzsyhC7J11vg") (authorVerified . :json-false) (videoCount . 9) (videos ((title . "Documentary | Crossing The Line") (videoId . "MKcvHAec6GM") (lengthSeconds . 3354) (videoThumbnails ((quality . "maxres") (url . "https://vid.puffyan.us/vi/MKcvHAec6GM/maxres.jpg") (width . 1280) (height . 720)) ((quality . "maxresdefault") (url . "https://vid.puffyan.us/vi/MKcvHAec6GM/maxresdefault.jpg") (width . 1280) (height . 720)) ((quality . "sddefault") (url . "https://vid.puffyan.us/vi/MKcvHAec6GM/sddefault.jpg") (width . 640) (height . 480)) ((quality . "high") (url . "https://vid.puffyan.us/vi/MKcvHAec6GM/hqdefault.jpg") (width . 480) (height . 360)) ((quality . "medium") (url . "https://vid.puffyan.us/vi/MKcvHAec6GM/mqdefault.jpg") (width . 320) (height . 180)) ((quality . "default") (url . "https://vid.puffyan.us/vi/MKcvHAec6GM/default.jpg") (width . 120) (height . 90)) ((quality . "start") (url . "https://vid.puffyan.us/vi/MKcvHAec6GM/1.jpg") (width . 120) (height . 90)) ((quality . "middle") (url . "https://vid.puffyan.us/vi/MKcvHAec6GM/2.jpg") (width . 120) (height . 90)) ((quality . "end") (url . "https://vid.puffyan.us/vi/MKcvHAec6GM/3.jpg") (width . 120) (height . 90)))) ((title . "VIV RICHARDS - KING OF CRICKET - 1987 Documentary") (videoId . "nmP4S-cmR9k") (lengthSeconds . 3290) (videoThumbnails ((quality . "maxres") (url . "https://vid.puffyan.us/vi/nmP4S-cmR9k/maxres.jpg") (width . 1280) (height . 720)) ((quality . "maxresdefault") (url . "https://vid.puffyan.us/vi/nmP4S-cmR9k/maxresdefault.jpg") (width . 1280) (height . 720)) ((quality . "sddefault") (url . "https://vid.puffyan.us/vi/nmP4S-cmR9k/sddefault.jpg") (width . 640) (height . 480)) ((quality . "high") (url . "https://vid.puffyan.us/vi/nmP4S-cmR9k/hqdefault.jpg") (width . 480) (height . 360)) ((quality . "medium") (url . "https://vid.puffyan.us/vi/nmP4S-cmR9k/mqdefault.jpg") (width . 320) (height . 180)) ((quality . "default") (url . "https://vid.puffyan.us/vi/nmP4S-cmR9k/default.jpg") (width . 120) (height . 90)) ((quality . "start") (url . "https://vid.puffyan.us/vi/nmP4S-cmR9k/1.jpg") (width . 120) (height . 90)) ((quality . "middle") (url . "https://vid.puffyan.us/vi/nmP4S-cmR9k/2.jpg") (width . 120) (height . 90)) ((quality . "end") (url . "https://vid.puffyan.us/vi/nmP4S-cmR9k/3.jpg") (width . 120) (height . 90)))))))
(mapcar #f(compiled-function (elt) #<bytecode 0x1699b940fa8aa4ed>) (... ... ... ... ... ... ... ... ... ... ... ... ... ... ...))
(#f(compiled-function #'sequence #<bytecode -0x1de5c536bcb44a02>) #f(compiled-function (elt) #<bytecode 0x1699b940fa8aa4ed>) (... ... ... ... ... ... ... ... ... ... ... ... ... ... ...))
(apply #f(compiled-function #'sequence #<bytecode -0x1de5c536bcb44a02>) #f(compiled-function (elt) #<bytecode 0x1699b940fa8aa4ed>) (... ... ... ... ... ... ... ... ... ... ... ... ... ... ...) nil)
(seq-map #f(compiled-function (elt) #<bytecode 0x1699b940fa8aa4ed>) (... ... ... ... ... ... ... ... ... ... ... ... ... ... ...))
(seq-map-indexed #f(compiled-function (it index) #<bytecode 0xb1dd0bf69192f1f>) (... ... ... ... ... ... ... ... ... ... ... ... ... ... ...))
(empv--youtube-show-tabulated-results (... ... ... ... ... ... ... ... ... ... ... ... ... ... ...))
(empv-youtube-tabulated-last-results)
(#f(compiled-function (results) #<bytecode 0x844542c692f3409>) (... ... ... ... ... ... ... ... ... ... ... ... ... ... ...))
(#f(compiled-function (status) #<bytecode -0xfea9ed35aa8539b>) (:peer (:certificates (... ...) :certificate (:version 3 :serial-number "04:82:e5:e1:8a:6b:42:0e:b2:30:9d:4d:92:c7:59:04:82:57" :issuer "C=US,O=Let's Encrypt,CN=R3" :valid-from "2024-02-25" :valid-to "2024-05-25" :subject "CN=vid.puffyan.us" :public-key-algorithm "RSA" :certificate-security-level "Medium" :signature-algorithm "RSA-SHA256" :public-key-id "sha1:52:ae:04:24:49:5c:de:ba:8e:f6:49:9f:4f:58:d2:5b:26:a8:3e:64" :public-key-id-sha256 "sha256:65:27:5a:d6:0c:ef:60:32:95:34:37:43:86:2f:4d:0f:b5:fb:33:a9:f6:7e:81:ac:eb:e8:05:56:a5:52:a4:01" :certificate-id "sha1:ee:e4:66:37:a1:f4:d9:d8:e8:3a:0c:61:03:96:d4:1a:fe:55:ab:23" :pem "-----BEGIN CERTIFICATE-----\nMIIE6DCCA9CgAwIBAgISBILl4YprQg6yMJ1NksdZBIJXMA0GCSqGSIb3DQEBCwUA\nMDIxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1MZXQncyBFbmNyeXB0MQswCQYDVQQD\nEwJSMzAeFw0yNDAyMjUxMzE4MzNaFw0yNDA1MjUxMzE4MzJaMBkxFzAVBgNVBAMT\nDnZpZC5wdWZmeWFuLnVzMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA\nxB4fZjGclEUnuNKrN4oW/jZrZ0jkhbTydqtF6fBReQmxE40RFYP3z8QYoKDuZ657\nVILMhZPk6H12vEcqhHWzGwqwv8z9oUED6qZpL2yZ/GdaSLS2Zug5ZIyswesgLPmF\n1ElhWCLcwd6dj8AjrCKMulPsw3c9fCet4FFiZAT+pUJYSutjawSLMG2qPOsdJg+u\nQjuNmUsZ96mMyh6o9+AAvusdXQiczu25Zr11zmhcDs8xAsitfi+Zcvgxq2LF/V98\nfXfnr/84bvKl4AJmBP+1WBlGwhD4NhsL9ViG7WfMXQuOuunaLXiiTkMEbSqwaq2A\nl0xm2YjiGFn/e//9Mk1I+QIDAQABo4ICDzCCAgswDgYDVR0PAQH/BAQDAgWgMB0G\nA1UdJQQWMBQGCCsGAQUFBwMBBggrBgEFBQcDAjAMBgNVHRMBAf8EAjAAMB0GA1Ud\nDgQWBBSF4K0FSbmU0lI1mvWMllJdzjADqDAfBgNVHSMEGDAWgBQULrMXt1hWy65Q\nCUDmH6+dixTCxjBVBggrBgEFBQcBAQRJMEcwIQYIKwYBBQUHMAGGFWh0dHA6Ly9y\nMy5vLmxlbmNyLm9yZzAiBggrBgEFBQcwAoYWaHR0cDovL3IzLmkubGVuY3Iub3Jn\nLzAZBgNVHREEEjAQgg52aWQucHVmZnlhbi51czATBgNVHSAEDDAKMAgGBmeBDAEC\nATCCAQMGCisGAQQB1nkCBAIEgfQEgfEA7wB2ADtTd3U+LbmAToswWwb+QDtn2E/D\n9Me9AA0tcm/h+tQXAAABjeChv+gAAAQDAEcwRQIgINCsfb9mAIDQ9UoUWcvax6Nl\nPz4SimZzvRH44JhLHK4CIQDM0YZ0ro0AYBRfoHXTQn5UimJCx+5Z3sqbEgVhBTsj\n2wB1AO7N0GTV2xrOxVy3nbTNE6Iyh0Z8vOzew1FIWUZxH7WbAAABjeChv/YAAAQD\nAEYwRAIgLI82H6CU2gF7kHqgBCdN9i5KwpAS52IxJ+uhZaUaWAwCIH0SLmTBLBTT\n4ak/+GsTYCdoDy3aYndezG5srDL+n5m+MA0GCSqGSIb3DQEBCwUAA4IBAQCJzZCb\nUzHPXSgZeH2eM8O9MfZ3D9524//xtzc5Mk2KEifMqJN6oDUjNc8pGMZ917v41z+6\nF1ehd4Omg1OxG46/8gLdsBTeKRlWF4r399S+ZoqpNzLHCR6K/sCvOB5L+xXQL3yp\nFAeUvNIkie9QcByyR5ZGiHJ8n9Lsov9rbmhCS++4ueU+QSNLoZR8WWsSO...") :key-exchange "ECDHE-RSA" :protocol "TLS1.3" :cipher "AES-256-GCM" :mac "AEAD" :encrypt-then-mac nil)))
(apply #f(compiled-function (status) #<bytecode -0xfea9ed35aa8539b>) (:peer (:certificates (... ...) :certificate (:version 3 :serial-number "04:82:e5:e1:8a:6b:42:0e:b2:30:9d:4d:92:c7:59:04:82:57" :issuer "C=US,O=Let's Encrypt,CN=R3" :valid-from "2024-02-25" :valid-to "2024-05-25" :subject "CN=vid.puffyan.us" :public-key-algorithm "RSA" :certificate-security-level "Medium" :signature-algorithm "RSA-SHA256" :public-key-id "sha1:52:ae:04:24:49:5c:de:ba:8e:f6:49:9f:4f:58:d2:5b:26:a8:3e:64" :public-key-id-sha256 "sha256:65:27:5a:d6:0c:ef:60:32:95:34:37:43:86:2f:4d:0f:b5:fb:33:a9:f6:7e:81:ac:eb:e8:05:56:a5:52:a4:01" :certificate-id "sha1:ee:e4:66:37:a1:f4:d9:d8:e8:3a:0c:61:03:96:d4:1a:fe:55:ab:23" :pem "-----BEGIN CERTIFICATE-----\nMIIE6DCCA9CgAwIBAgISBILl4YprQg6yMJ1NksdZBIJXMA0GCSqGSIb3DQEBCwUA\nMDIxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1MZXQncyBFbmNyeXB0MQswCQYDVQQD\nEwJSMzAeFw0yNDAyMjUxMzE4MzNaFw0yNDA1MjUxMzE4MzJaMBkxFzAVBgNVBAMT\nDnZpZC5wdWZmeWFuLnVzMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA\nxB4fZjGclEUnuNKrN4oW/jZrZ0jkhbTydqtF6fBReQmxE40RFYP3z8QYoKDuZ657\nVILMhZPk6H12vEcqhHWzGwqwv8z9oUED6qZpL2yZ/GdaSLS2Zug5ZIyswesgLPmF\n1ElhWCLcwd6dj8AjrCKMulPsw3c9fCet4FFiZAT+pUJYSutjawSLMG2qPOsdJg+u\nQjuNmUsZ96mMyh6o9+AAvusdXQiczu25Zr11zmhcDs8xAsitfi+Zcvgxq2LF/V98\nfXfnr/84bvKl4AJmBP+1WBlGwhD4NhsL9ViG7WfMXQuOuunaLXiiTkMEbSqwaq2A\nl0xm2YjiGFn/e//9Mk1I+QIDAQABo4ICDzCCAgswDgYDVR0PAQH/BAQDAgWgMB0G\nA1UdJQQWMBQGCCsGAQUFBwMBBggrBgEFBQcDAjAMBgNVHRMBAf8EAjAAMB0GA1Ud\nDgQWBBSF4K0FSbmU0lI1mvWMllJdzjADqDAfBgNVHSMEGDAWgBQULrMXt1hWy65Q\nCUDmH6+dixTCxjBVBggrBgEFBQcBAQRJMEcwIQYIKwYBBQUHMAGGFWh0dHA6Ly9y\nMy5vLmxlbmNyLm9yZzAiBggrBgEFBQcwAoYWaHR0cDovL3IzLmkubGVuY3Iub3Jn\nLzAZBgNVHREEEjAQgg52aWQucHVmZnlhbi51czATBgNVHSAEDDAKMAgGBmeBDAEC\nATCCAQMGCisGAQQB1nkCBAIEgfQEgfEA7wB2ADtTd3U+LbmAToswWwb+QDtn2E/D\n9Me9AA0tcm/h+tQXAAABjeChv+gAAAQDAEcwRQIgINCsfb9mAIDQ9UoUWcvax6Nl\nPz4SimZzvRH44JhLHK4CIQDM0YZ0ro0AYBRfoHXTQn5UimJCx+5Z3sqbEgVhBTsj\n2wB1AO7N0GTV2xrOxVy3nbTNE6Iyh0Z8vOzew1FIWUZxH7WbAAABjeChv/YAAAQD\nAEYwRAIgLI82H6CU2gF7kHqgBCdN9i5KwpAS52IxJ+uhZaUaWAwCIH0SLmTBLBTT\n4ak/+GsTYCdoDy3aYndezG5srDL+n5m+MA0GCSqGSIb3DQEBCwUAA4IBAQCJzZCb\nUzHPXSgZeH2eM8O9MfZ3D9524//xtzc5Mk2KEifMqJN6oDUjNc8pGMZ917v41z+6\nF1ehd4Omg1OxG46/8gLdsBTeKRlWF4r399S+ZoqpNzLHCR6K/sCvOB5L+xXQL3yp\nFAeUvNIkie9QcByyR5ZGiHJ8n9Lsov9rbmhCS++4ueU+QSNLoZR8WWsSO...") :key-exchange "ECDHE-RSA" :protocol "TLS1.3" :cipher "AES-256-GCM" :mac "AEAD" :encrypt-then-mac nil)))
(url-http-activate-callback)
(url-http-content-length-after-change-function 888 6634 5746)
(url-http-wait-for-headers-change-function 1 6651 6650)
(url-http-generic-filter # "HTTP/1.1 200 OK\15\nServer: nginx/1.22.1\15\nDate: Wed, 20 Mar 2024 15:52:51 GMT\15\nContent-Type: application/json\15\nContent-Length: 5745\15\nConnection: keep-alive\15\nContent-Encoding: gzip\15\nAccess-Control-Allow-Origin: \15\nX-Frame-Options: sameorigin\15\nX-XSS-Protection: 1; mode=block\15\nX-Content-Type-Options: nosniff\15\nContent-Security-Policy: default-src 'none'; script-src 'self'; style-src 'self' 'unsafe-inline'; img-src 'self' data:; font-src 'self' data:; connect-src 'self'; manifest-src 'self'; media-src 'self' blob: https://.googlevideo.com:443 https://.youtube.com:443; child-src 'self' blob:; frame-src 'self'; frame-ancestors 'none'\15\nReferrer-Policy: same-origin\15\nPermissions-Policy: interest-cohort=()\15\nStrict-Transport-Security: max-age=31536000; includeSubDomains; preload\15\nOnion-Location: http://grwp24hodrefzvjjuccrkw3mjq4tzhaaq32amf33dzpmuxe7ilepcmad.onion/api/v1/search?q=cricket&type=playlist\15\n\15\n\37\213\10\0R\6\373e\0\377\315\235\351\222\342\306\232\206o%\273\35a\373\304\0307\22\273#\34\23B\10\20 6\261\2378A\10\20\222X$\320\302R\247\347:\346\347\374\233\353\233K\230\244\252\272\352\23\2\252q\347G\370\217\355\253\362\201Lx\362U\2462\363\237\377\376\354\0377\372\347?>oV\332qey\376\347\337>\373\226\277:\375\252\344\352\232OD\327\232.u\237\24\234i\260\326m_s-\335\243W}\373\3yF/m\326l\315U\305J?\30\367s\255A\213\253y\206\333WR\205|\212\37v\213\345]\27\374E\307\f\326\23[\263V\364\17M\337\337x\177|\371b\375~\364\255\265\361\373\324Y\177\331Y_\224\352tW\26\364i\272\244|1\2673}\256\5+\377\367\305\306\370Oo\273\3713\346h\307\365^\352\213U#/\25Sr\177Wu\255\355\262 \266\214|\261%\10\226$\17\205\326\237\177\376\354z\177\n\15;)\326\n\31\241\31\354g\343tn\2675\346\207\231\277\316d\207\363X\263X\13\364\225i\201o:.}9\252cZ+R\267\226\332\372\355\327\317o\260+\356\227\235QE\225\272\205\324\360\311;\232b\246\302q;\343\355\252\256{z;_\246\246f\333\372\352\313\207\327\367t\327\232[:-{\256\255<\375\267\317;k\246;\242\23\330\376\347?r\257?z\237\377\370\347\277\337\332\343\275\5\216\344+m\27\307\363,\333 \35S'5\313\326?\277\376\321\363\353\5\25H\177\277\322m\3037U}\352\3303Zf"\221J\276^\374\326\26/\250m\240\255,\377H\13Xk\7\367\271\235\3\27\266\23\375\243\3377\301|\324\354\337\3\357\274\251^\376\350\324N\364\17\367\326\3147?\377\301\361\331\370o\237M\3352L\372\3162|\374\277~\213r^[\370/\341\300\247\343\273\251\336\354\257\21\337\376.LK'\1,\231=\203\231\364\367wrB\237\371wN\22\276\251D\372\274*\365\231\25\254\357\255\303\313\244\4\17H\334\371;\372k\225w\245\241\0(w\336L\364\263~/\205\273\243\374\2655\233\255\364;\1\374\35\0\335\236\335Yz\342v\351\377:\225\377M\10=\271G\332\262X\26\332\5\225\304HU\256\227H\243HD\372\273\252\324\241\277\341r\331\f\20\3671\244\10{\335L\252\261\351\272\235[^P\4\237\2133S\4 =B\21Q\34\266" \21S\21\220\203\253\210P\35\342*\2\242\360\24\1)(\212\200\0\366\212\200\245\177\250\210\27I\\315u\337\374 \327IGV$\225\250\255\256\320\226\250/\204nAn\220|\243Q\215\6\274\306\3568\213u\315\331`\334\265*^\256\275Ye\270\205X.\34\224\3552U\351q\367\5\274a\323\265\353N\325xZ\356\231\4<\301\310X\345\366\364\3115\315\306\276\227O\266\373\375\216U\360s=S\n\7<\337\241\351\251c\255u\262\267|\223(\226\347\21\301\245\366\323\317\3\237?\252\17\262\25~\273\350o\206jU6\332\305\222\323\334_\17|\37\\1773\360e.\6\276S\262\373\26\277-\373\371U{D\245\37\35\227\376\336\3246\276\356z\204#\232=#\374y\353\275{\36Tu\324\363\34\227\3120\363<l\324\7x>\212\303\366<$bz\376\352\267\203\271\347Cu\210\353y\210\302\363<\244\240x\36\2\330{\36\226O\24\374.U$\236U\221\f\331!\223)\231\375RC(\4\27R E\262K\201\200\364\10;Dq\330v\200DL;@\16\256\35Bu\210k\7\210\302\263\3\244\240\330\1\2\330\333\1\226\376\243)\360\2061>E\323_\315\30\227\333\325\251\226Q+\271E\325\31\255s\351\205>\310/jB\20\317\310J\354\276\364w\210\5#\327\223\322\271l\222M\372[\31\343I1\337\324\32\345M\247m\16JY)Xv\33\261\301r\374\36\300\350\313\221m\352A\233\276\341\222KM\270\321\316#\237"\33\232\304'{\261\356\241\357\n\207\270\25\317\256s7\306\370>\270\376f\344\343Rwg\276\351\213\310\11\02728\250\314\250\301S<;\201\303V{\200\300\2438l\201C"\246\300\257\374\231\13<T\207\270\2\207(<\201C\n\212\300!\200\275\300a\351?\30\357\276I\341\377\376\347\177\377\373\315\f|\310\fIK)O7FJ\KQ3\244S\03433\0\320#\314\20\305a\233\1\0221\315\09...")
First, thank you for this awesome package.
I would like to know if there is a way to save a playlist to a file, and load it later?
For example, usually, I enqueue some songs from YouTube (using consult-empv-youtube
), this works perfectly, however, there is no clear way how to save these links to a playlist so the next time I don't need to search for them again.
Note: Even when calling empv-save-and-exit
, then exit and reopen Emacs, there is no way to reload the previous playlist!
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.