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))