emacs-elpa-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[nongnu] elpa/mpv 338af25d20 23/50: add mpv-on-event-hook


From: ELPA Syncer
Subject: [nongnu] elpa/mpv 338af25d20 23/50: add mpv-on-event-hook
Date: Tue, 28 Dec 2021 00:58:40 -0500 (EST)

branch: elpa/mpv
commit 338af25d2039297369e3f17e538e8654bf4c4040
Author: Johann Klähn <kljohann@gmail.com>
Commit: Johann Klähn <kljohann@gmail.com>

    add mpv-on-event-hook
---
 mpv.el | 18 +++++++++++++-----
 1 file changed, 13 insertions(+), 5 deletions(-)

diff --git a/mpv.el b/mpv.el
index 908fc4c951..80e4df89c5 100644
--- a/mpv.el
+++ b/mpv.el
@@ -66,6 +66,12 @@
 (defcustom seek-step 5
   "Step size in seconds used when seeking.")
 
+(defcustom on-event-hook nil
+  "Hook to run when an event message is received.
+The hook will be called with the parsed JSON message as its only an
+argument.  See \"List of events\" in the mpv man page."
+  :type 'hook)
+
 (defvar -process nil)
 (defvar -queue nil)
 
@@ -138,7 +144,7 @@ This is a verbatim copy of `tq-filter' that uses
 
 Replacement for `tq-process-buffer' that ignores regular expressions
 \(answers are always passed to the first handler in the queue) and
-drops unsolicited event messages."
+passes unsolicited event messages to `mpv-on-event-hook'."
   (goto-char (point-min))
   (skip-chars-forward "^{")
   (let ((answer (ignore-errors (json-read))))
@@ -147,13 +153,15 @@ drops unsolicited event messages."
       ;; event messages have form {"event": ...}
       ;; answers have form {"error": ..., "data": ...}
       ;; FIXME: handle errors?
-      (unless (or (assoc 'event answer) (tq-queue-empty tq))
+      (cond
+       ((assoc 'event answer)
+        (run-hook-with-args 'mpv-on-event-hook answer))
+       ((not (tq-queue-empty tq))
         (unwind-protect
-            ;; (condition-case nil
             (funcall (tq-queue-head-fn tq)
                      (cdr (assoc 'data answer)))
-              ;; (error nil))
-          (tq-queue-pop tq)))
+          (tq-queue-pop tq))))
+      ;; Recurse to check for further JSON messages.
       (-tq-process-buffer tq))))
 
 :autoload



reply via email to

[Prev in Thread] Current Thread [Next in Thread]