branch: elpa/subed
commit 925ba480ffca82b5d6fdba658238600f9200a2d2
Author: Sacha Chua <[email protected]>
Commit: Sacha Chua <[email protected]>

    Skim subtitles, speaker changes, or subtitles with comments
    
    * subed/subed-vtt.el (subed-vtt-mpv-skim-subtitles-with-comments): New 
command.
    * subed/subed-mpv.el (subed-mpv-skim-starts): New command.
    (subed-mpv-skim-speaker-changes): New command.
    (subed-mpv-skim-msecs): New variable.
---
 subed/subed-mpv.el | 52 ++++++++++++++++++++++++++++++++++++++++++++++++++++
 subed/subed-vtt.el | 35 +++++++++++++++++++++++++++++++++++
 2 files changed, 87 insertions(+)

diff --git a/subed/subed-mpv.el b/subed/subed-mpv.el
index 6a58b28227..f1a4652b90 100644
--- a/subed/subed-mpv.el
+++ b/subed/subed-mpv.el
@@ -585,5 +585,57 @@ See `subed-mpv-control-map'."
   (interactive)
   (set-transient-map subed-mpv-control-map t))
 
+(defvar subed-mpv-skim-msecs 1000 "Number of msecs to play when skimming.")
+
+;;;###autoload
+(defun subed-mpv-skim-starts (&optonal msecs)
+       (interactive (list current-prefix-arg))
+       (subed-mpv-unpause)
+       (subed-disable-loop-over-current-subtitle)
+       (catch 'done
+               (while (not (eobp))
+                       (subed-mpv-jump-to-current-subtitle)
+                       (let ((ch
+                                                (read-char "(q)uit? " nil (/ 
(or msecs subed-mpv-skim-msecs) 1000.0))))
+                               (when ch
+                                       (throw 'done t)))
+                       (subed-forward-subtitle-text)
+                       (when (and
+             (boundp 'subed-waveform-minor-mode)
+             subed-waveform-minor-mode
+                                                (not subed-waveform-show-all))
+                               (subed-waveform-refresh))
+                       (recenter)))
+       (subed-mpv-pause))
+
+;;;###autoload
+(defun subed-mpv-skim-speaker-changes (&optional msecs)
+  "Play the first MSECS of each speaker change from point to end of buffer.
+If MSECS is not specified, use `subed-mpv-skim-msecs'."
+       (interactive (list current-prefix-arg))
+       (subed-mpv-unpause)
+       (subed-disable-loop-over-current-subtitle)
+       (catch 'done
+               (while (not (eobp))
+                       (subed-mpv-jump-to-current-subtitle)
+                       (let ((ch
+                                                (read-char "p: previous, n: 
next, any other key to stop." nil (/ (or msecs subed-mpv-skim-msecs) 1000.0))))
+                               (pcase ch
+          (?p (subed-jump-to-previous-speaker)
+              (subed-jump-to-previous-speaker))
+          (?n (subed-jump-to-next-speaker))
+          ('nil nil)
+          (_ (throw 'done t))))
+      (or (subed-jump-to-next-speaker)
+          (goto-char (point-max)))
+                       (when (and
+             (boundp 'subed-waveform-minor-mode)
+             subed-waveform-minor-mode
+                                                (not subed-waveform-show-all))
+                               (subed-waveform-refresh))
+                       (recenter)))
+  (subed-jump-to-previous-speaker)
+       (subed-mpv-pause))
+
 (provide 'subed-mpv)
 ;;; subed-mpv.el ends here
diff --git a/subed/subed-vtt.el b/subed/subed-vtt.el
index 2be9f3252e..b0b4198a13 100644
--- a/subed/subed-vtt.el
+++ b/subed/subed-vtt.el
@@ -724,6 +724,41 @@ This uses clock time based on `subed-clock-start'."
             (subed-set-subtitle-comment text)))
         (pop chapter-list)))))
 
+;;;###autoload
+(defun subed-vtt-mpv-skim-subtitles-with-comments (&optional msecs)
+  "Play the first MSECS of each subtitle with a comment from point to end of 
buffer.
+If MSECS is not specified, use `subed-mpv-skim-msecs'."
+  (interactive (list (and current-prefix-arg
+                          (prefix-numeric-value current-prefix-arg))))
+  (let ((regexp (format "\\(?:^\\|%s\\)%s" subed-vtt--regexp-blank-separator 
subed-vtt--regexp-note)))
+    (unless (subed-subtitle-comment)
+      (when (looking-at regexp)
+        (forward-line))
+      (re-search-forward regexp nil t))
+    (subed-mpv-unpause)
+    (subed-disable-loop-over-current-subtitle)
+    (catch 'done
+      (while (not (eobp))
+        (subed-mpv-jump-to-current-subtitle)
+        (let ((ch
+               (read-char "p: previous, n: next, any other key to stop." nil 
(/ (or msecs subed-mpv-skim-msecs) 1000.0))))
+          (pcase ch
+            (?p (re-search-backward regexp nil t)
+                (re-search-backward regexp nil t))
+            (?n (re-search-forward regexp nil t))
+            ('() nil)
+            (_ (throw 'done t))))
+        (or (re-search-forward regexp nil t)
+            (goto-char (point-max)))
+        (when (and
+               (boundp 'subed-waveform-minor-mode)
+               subed-waveform-minor-mode
+               (not subed-waveform-show-all))
+          (subed-waveform-refresh))
+        (recenter)))
+    (re-search-backward regexp nil t))
+       (subed-mpv-pause))
+
 ;;;###autoload
 (add-to-list 'auto-mode-alist '("\\.vtt\\'" . subed-vtt-mode))
 

Reply via email to