diff options
Diffstat (limited to 'lisp/servall-ytdl.el')
-rw-r--r-- | lisp/servall-ytdl.el | 41 |
1 files changed, 41 insertions, 0 deletions
diff --git a/lisp/servall-ytdl.el b/lisp/servall-ytdl.el new file mode 100644 index 0000000..426333b --- /dev/null +++ b/lisp/servall-ytdl.el @@ -0,0 +1,41 @@ +;; -*- lexical-binding: t; -*- +(require 'servall-client) +(require 'servall-results) + +;; ytdl results +(define-derived-mode servall-ytdl-results-mode servall-results-mode + "servall-ytdl-results" + "Mode for showing and selecting ytdl results" + (setq-local servall-ytdl-results-query nil)) + +(defun servall-ytdl-search (query) + (interactive "sYtdl Query: ") + (with-current-buffer (get-buffer-create servall-results-buffer) + (servall-ytdl-results-mode) + (setq servall-ytdl-results-query query + servall-results-update-function 'servall-ytdl-results-update + servall-results-re-search-function 'servall-ytdl-search + servall-results-open-function 'servall-ytdl-results-open) + (servall-results-update (lambda () + (switch-to-buffer servall-results-buffer))))) + +(defun servall-ytdl-results-update (cb) + (servall-api-ytdl-search + servall-ytdl-results-query + (lambda (results) + (with-current-buffer (get-buffer-create servall-results-buffer) + (let* ((inhibit-read-only t)) + (erase-buffer) + (mapc + (lambda (result) + (let ((title (alist-get 'title result))) + (insert + (propertize + (concat "* " title "\n") + 'title title)) + (insert (alist-get 'description result) "\n\n"))) + results) + (goto-char (point-min)))) + (funcall cb)))) + +(provide 'servall-ytdl) |