[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[nongnu] elpa/subed e73c0a3803: 1.2.11 New commands subed-shift-subtitle
From: |
ELPA Syncer |
Subject: |
[nongnu] elpa/subed e73c0a3803: 1.2.11 New commands subed-shift-subtitles-to-start-at-timestamp, subed-move-subtitles-to-start-at-timestamp, add workflow notes |
Date: |
Wed, 20 Dec 2023 13:00:28 -0500 (EST) |
branch: elpa/subed
commit e73c0a38039eb32fd43911023ff35007e324c733
Author: Sacha Chua <sacha@sachachua.com>
Commit: Sacha Chua <sacha@sachachua.com>
1.2.11 New commands subed-shift-subtitles-to-start-at-timestamp,
subed-move-subtitles-to-start-at-timestamp, add workflow notes
Sometimes I just want to move a subtitle to start at a specific
timestamp without needing to do the math.
* subed/subed-common.el (subed-shift-subtitles-to-start-at-timestamp): New
command.
(subed-move-subtitles-to-start-at-timestamp): New command.
(subed-shift-subtitles): Include a pointer to
subed-shift-subtitles-to-start-at-timestamp.
(subed-move-subtitles): Include a pointer to
subed-move-subtitles-to-start-at-timestamp.
* tests/test-subed-common.el ("COMMON"): Add tests for shifting and moving.
* subed/subed.el (subed-guess-format): Add documentation.
* README.org: Added workflow notes.
---
NEWS.org | 7 +
README.org | 78 +++++
subed/subed-common.el | 28 +-
subed/subed.el | 6 +-
tests/test-subed-common.el | 770 ++++++++++++++++++++++++---------------------
5 files changed, 526 insertions(+), 363 deletions(-)
diff --git a/NEWS.org b/NEWS.org
index 1b590da3b4..f45723d352 100644
--- a/NEWS.org
+++ b/NEWS.org
@@ -1,6 +1,13 @@
#+OPTIONS: toc:nil
* subed news
+** Version 1.2.11 - 2022-12-20 - Sacha Chua
+
+- New commands ~subed-shift-subtitles-to-start-at-timestamp~ and
+ ~subed-move-subtitles-to-start-at-timestamp~ should make it easier
+ to adjust timestamps without doing msec math.
+- Add workflow notes to README.org.
+
** Version 1.2.10 - 2023-12-20 - Sacha Chua
- Add extra line after comments in text output.
diff --git a/README.org b/README.org
index 918ed7b8dc..28525cecf2 100644
--- a/README.org
+++ b/README.org
@@ -256,6 +256,84 @@ If you use
[[https://github.com/radian-software/straight.el][straight.el]], you
~subed-srt-mode~, ~subed-vtt-mode~, and ~subed-ass-mode~. When
manually loading a mode, use those specific format modes instead of
~subed-mode~.
+** Some workflow ideas
+
+*** Reflowing subtitles into shorter or longer lines
+
+You may want to use ~set-fill-column~ and
+~display-fill-column-indicator-mode~ to show the target number of
+characters.
+
+Use ~subed-split-subtitle~ (~M-.~), ~subed-merge-dwim~ (~M-b~), and
+~subed-merge-with-previous~ (~M-M~) to split lines.
+
+Splitting will use the current MPV position if available. If not, it
+will guess where to split based on the the number of characters in the
+subtitle. You can use ~subed-mpv-jump-to-current-subtitle~ (~M-j~) to play the
+current subtitle manually and use ~subed-mpv-toggle-pause~ (~M-SPC~) to stop at
+the right time. Use ~subed-toggle-loop-over-current-subtitle~ (~C-c C-l~) if
you
+want to keep looping. ~subed-waveform-show-current~ can help you
+fine-tune the split.
+
+*** Adjusting timestamps
+
+You can use ~subed-mpv-jump-to-current-subtitle~ (~M-j~) to play the
+current subtitle manually. Use
+~subed-mpv-jump-to-current-subtitle-near-end~ (~M-J~) to jump to near
+the end of the subtitle in order to test it. Use
+~subed-toggle-loop-over-current-subtitle~ (~C-c C-l~) if you want to
+keep looping automatically. Use ~subed-mpv-toggle-pause~ (~M-SPC~) to stop at
the
+right time.
+
+~subed-waveform-show-current~ or ~subed-waveform-show-all~ can be
+useful for adjusting start and end timestamps. Use
+~subed-waveform-set-start~ (~mouse-1~, which is left click) or
~subed-waveform-set-stop~ (~mouse-3~, which is right-click) to adjust only
+the current subtitle's timestamps, or use
+~subed-waveform-set-start-and-copy-to-previous~ (~S-mouse-1~ or ~M-mouse-1~) or
+~subed-waveform-set-stop-and-copy-to-next~ (~S-mouse-3~ or ~M-mouse-3~) to
adjust adjacent
+subtitles as well.
+
+You can also manually adjust
+
+- subtitle start: ~M-[~ / ~M-]~
+- subtitle stop: (~M-{~ / ~M-}~)
+
+A prefix argument sets the number of milliseconds (e.g. ~C-u 1000 M-[ M-[ M-[~
decreases start time by 3 seconds).
+
+*** Editing subtitles
+
+You can use ~subed-mpv-jump-to-current-subtitle~ (~M-j~) to play the current
+subtitle and use ~subed-mpv-toggle-pause~ (~M-SPC~) to stop at the right time.
+Use ~subed-toggle-loop-over-current-subtitle~ (~C-c C-l~) if you want to keep
+looping automatically.
+
+If you have wdiff installed, you can use
+~subed-wdiff-subtitle-text-with-file~ to compare the subtitle text
+with a script or another subtitle file.
+
+*** Writing subtitles from scratch
+
+One way is to start with one big subtitle that covers the whole media
+file, and then split it using ~subed-split-subtitle~ (~M-.~).
+
+Another way is to type as much of the text as you can without worrying
+about timestamps, putting each caption on a separate line. Then you
+can use ~subed-align~ to convert it into timestamped captions.
+
+*** Resynchronizing subtitles
+
+If you're using ~subed-waveform-show-current~ or ~subed-waveform-show-all~,
you can use ~M-mouse-2~ (Meta-middle-click, ~subed-waveform-shift-subtitles~)
to shift the current subtitle and succeeding subtitles so that they start at
the position you clicked on.
+
+To do this with the keyboard, you can use
+~subed-shift-subtitles-to-start-at-timestamp~ if you want to specify a
+timestamp or ~subed-shift-subtitles~ to specify a millisecond offset.
+
+*** Exporting text for review
+
+You can use ~subed-copy-region-text~ to copy the text of the subtitles
+for pasting into another buffer. Call it with the universal prefix
+~C-u~ to copy comments as well.
+
** Troubleshooting
*** subed-mpv: Service name too long
diff --git a/subed/subed-common.el b/subed/subed-common.el
index 25b11f1af2..89ee166307 100644
--- a/subed/subed-common.el
+++ b/subed/subed-common.el
@@ -1176,6 +1176,9 @@ If BEG is nil, move only the current subtitle.
After subtitles are moved, replay the first moved subtitle if
replaying is enabled.
+To move to a specific timestamp, use
+`subed-move-subtitles-to-start-at-timestamp'.
+
To move the current subtitle and following subtitles by default,
use `subed-shift-subtitles', `subed-shift-subtitle-forward',
or `subed-shift-subtitle-backward'."
@@ -1192,6 +1195,22 @@ or `subed-shift-subtitle-backward'."
(when beg (goto-char beg))
(subed-mpv-jump (subed-subtitle-msecs-start)))))
+(defun subed-move-subtitles-to-start-at-timestamp (timestamp &optional beg end)
+ "Move subtitles between BEG and END so that the current subtitle starts at
TIMESTAMP.
+If END is nil, move all subtitles from BEG to end of buffer.
+If BEG is nil, move only the current subtitle.
+After subtitles are moved, replay the first moved subtitle if
+replaying is enabled.
+
+To move the current subtitle and following subtitles by default,
+use `subed-shift-subtitles', `subed-shift-subtitles-to-start-at-timestamp',
+`subed-shift-subtitle-forward', or `subed-shift-subtitle-backward'."
+ (interactive (list (read-string "New start: ")
+ (when (region-active-p) (point))
+ (when (region-active-p) (mark))))
+ (subed-move-subtitles (- (subed-timestamp-to-msecs timestamp)
(subed-subtitle-msecs-start))
+ beg end))
+
(defun subed-move-subtitle-forward (&optional arg)
"Move subtitle `subed-milliseconds-adjust' forward.
@@ -1236,7 +1255,8 @@ See `subed-move-subtitle-forward' about ARG."
;;; (same as moving, but follow-up subtitles are also moved)
(defun subed-shift-subtitles (&optional arg)
- "Move this and following subtitles by ARG."
+ "Move this and following subtitles by ARG milliseconds.
+To shift to a specific timestamp, use
`subed-shift-subtitles-to-start-at-timestamp'."
(interactive (list (if current-prefix-arg
(prefix-numeric-value current-prefix-arg)
(read-number "Milliseconds: "))))
@@ -1244,6 +1264,12 @@ See `subed-move-subtitle-forward' about ARG."
(msecs (subed-get-milliseconds-adjust arg)))
(subed-move-subtitles msecs (point))))
+(defun subed-shift-subtitles-to-start-at-timestamp (timestamp)
+ "Move this and following subtitles so that the current one starts at
TIMESTAMP.
+To shift by a millisecond offset, use `subed-shift-subtitles'."
+ (interactive (list (read-string "New start: ")))
+ (subed-shift-subtitles (- (subed-timestamp-to-msecs timestamp)
(subed-subtitle-msecs-start))))
+
(defun subed-shift-subtitle-forward (&optional arg)
"Shift subtitle `subed-milliseconds-adjust' forward.
diff --git a/subed/subed.el b/subed/subed.el
index 8a25fcc135..b4b1d8b81c 100644
--- a/subed/subed.el
+++ b/subed/subed.el
@@ -1,6 +1,6 @@
;;; subed.el --- A major mode for editing subtitles -*- lexical-binding: t;
-*-
-;; Version: 1.2.10
+;; Version: 1.2.11
;; Maintainer: Sacha Chua <sacha@sachachua.com>
;; Author: Random User
;; Keywords: convenience, files, hypermedia, multimedia
@@ -152,7 +152,9 @@ Key bindings:
This is a workaround for the transition to using format-specific
modes such as `subed-srt-mode' while `auto-mode-alist' might
still refer to `subed-mode'. It will also switch to the
-format-specific mode if `subed-mode' is called directly."
+format-specific mode if `subed-mode' is called directly.
+
+If FILENAME is specified, use that."
(when (or filename
(and (eq major-mode 'subed-mode)
(buffer-file-name)))
diff --git a/tests/test-subed-common.el b/tests/test-subed-common.el
index 2e0ff214b2..3d724217ee 100644
--- a/tests/test-subed-common.el
+++ b/tests/test-subed-common.el
@@ -779,193 +779,193 @@ Baz.
(describe "Moving"
(it "adjusts start and stop time by the same amount."
(with-temp-srt-buffer
- (insert (concat "1\n"
-
"00:00:01,000 --> 00:00:02,000\n"
-
"Foo.\n"))
- (let ((orig-point (subed-jump-to-subtitle-text
1)))
- (subed-move-subtitle-forward 100)
- (expect (subed-subtitle-msecs-start)
:to-equal 1100)
- (expect (subed-subtitle-msecs-stop)
:to-equal 2100)
- (subed-move-subtitle-backward 200)
- (expect (subed-subtitle-msecs-start)
:to-equal 900)
- (expect (subed-subtitle-msecs-stop)
:to-equal 1900)
- (expect (point) :to-equal orig-point))))
+ (insert (concat "1\n"
+
"00:00:01,000 --> 00:00:02,000\n"
+
"Foo.\n"))
+ (let ((orig-point (subed-jump-to-subtitle-text 1)))
+ (subed-move-subtitle-forward 100)
+ (expect (subed-subtitle-msecs-start) :to-equal
1100)
+ (expect (subed-subtitle-msecs-stop) :to-equal
2100)
+ (subed-move-subtitle-backward 200)
+ (expect (subed-subtitle-msecs-start) :to-equal
900)
+ (expect (subed-subtitle-msecs-stop) :to-equal
1900)
+ (expect (point) :to-equal orig-point))))
(describe "when clipping to time boundaries"
(it "adjusts start and stop time by the same amount
when bumping into next subtitle."
(with-temp-srt-buffer
- (insert (concat "1\n"
-
"00:00:01,000 --> 00:00:01,600\n"
-
"Foo.\n\n"
-
"2\n"
-
"00:00:02,000 --> 00:00:03,000\n"
-
"Bar.\n"))
- (let ((orig-point
(subed-jump-to-subtitle-id 1))
-
(subed-subtitle-spacing 100)
-
(subed-enforce-time-boundaries 'clip))
- (subed-move-subtitle-forward
1000)
- (expect
(subed-subtitle-msecs-start) :to-equal 1300)
- (expect
(subed-subtitle-msecs-stop) :to-equal 1900)
- (expect (point) :to-equal
orig-point))))
+ (insert (concat "1\n"
+
"00:00:01,000 --> 00:00:01,600\n"
+
"Foo.\n\n"
+
"2\n"
+
"00:00:02,000 --> 00:00:03,000\n"
+
"Bar.\n"))
+ (let ((orig-point (subed-jump-to-subtitle-id
1))
+
(subed-subtitle-spacing 100)
+
(subed-enforce-time-boundaries 'clip))
+ (subed-move-subtitle-forward 1000)
+ (expect (subed-subtitle-msecs-start)
:to-equal 1300)
+ (expect (subed-subtitle-msecs-stop)
:to-equal 1900)
+ (expect (point) :to-equal
orig-point))))
(it "adjusts start and stop time by the same amount
when bumping into previous subtitle."
(with-temp-srt-buffer
- (insert (concat "1\n"
-
"00:00:01,000 --> 00:00:01,600\n"
-
"Foo.\n\n"
-
"2\n"
-
"00:00:02,000 --> 00:00:03,000\n"
-
"Bar.\n"))
- (let ((orig-point
(subed-jump-to-subtitle-id 2))
-
(subed-subtitle-spacing 100)
-
(subed-enforce-time-boundaries 'clip))
- (subed-move-subtitle-backward
1000)
- (expect
(subed-subtitle-msecs-start) :to-equal 1700)
- (expect
(subed-subtitle-msecs-stop) :to-equal 2700)
- (expect (point) :to-equal
orig-point)))))
+ (insert (concat "1\n"
+
"00:00:01,000 --> 00:00:01,600\n"
+
"Foo.\n\n"
+
"2\n"
+
"00:00:02,000 --> 00:00:03,000\n"
+
"Bar.\n"))
+ (let ((orig-point (subed-jump-to-subtitle-id
2))
+
(subed-subtitle-spacing 100)
+
(subed-enforce-time-boundaries 'clip))
+ (subed-move-subtitle-backward 1000)
+ (expect (subed-subtitle-msecs-start)
:to-equal 1700)
+ (expect (subed-subtitle-msecs-stop)
:to-equal 2700)
+ (expect (point) :to-equal
orig-point)))))
(describe "when time boundaries are enforced with errors"
(it "does not adjust anything if subtitle cannot be
moved forward at all."
(with-temp-srt-buffer
- (insert (concat "1\n"
-
"00:00:01,000 --> 00:00:02,000\n"
-
"Foo.\n\n"
-
"2\n"
-
"00:00:02,000 --> 00:00:03,000\n"
-
"Bar.\n"))
- (let ((orig-point
(subed-jump-to-subtitle-id 1))
-
(subed-enforce-time-boundaries 'error))
- (expect
(subed-move-subtitle-forward 1) :to-throw 'error)
- (expect
(subed-subtitle-msecs-start 1) :to-equal 1000)
- (expect
(subed-subtitle-msecs-stop 1) :to-equal 2000)
- (expect
(subed-subtitle-msecs-start 2) :to-equal 2000)
- (expect
(subed-subtitle-msecs-stop 2) :to-equal 3000)
- (expect (point) :to-equal
orig-point))))
+ (insert (concat "1\n"
+
"00:00:01,000 --> 00:00:02,000\n"
+
"Foo.\n\n"
+
"2\n"
+
"00:00:02,000 --> 00:00:03,000\n"
+
"Bar.\n"))
+ (let ((orig-point (subed-jump-to-subtitle-id
1))
+
(subed-enforce-time-boundaries 'error))
+ (expect (subed-move-subtitle-forward
1) :to-throw 'error)
+ (expect (subed-subtitle-msecs-start 1)
:to-equal 1000)
+ (expect (subed-subtitle-msecs-stop 1)
:to-equal 2000)
+ (expect (subed-subtitle-msecs-start 2)
:to-equal 2000)
+ (expect (subed-subtitle-msecs-stop 2)
:to-equal 3000)
+ (expect (point) :to-equal
orig-point))))
(it "does not adjust anything if subtitle cannot be
moved backward at all."
(with-temp-srt-buffer
- (insert (concat "1\n"
-
"00:00:01,000 --> 00:00:02,000\n"
-
"Foo.\n\n"
-
"2\n"
-
"00:00:02,000 --> 00:00:03,000\n"
-
"Bar.\n"))
- (let ((orig-point
(subed-jump-to-subtitle-id 2))
-
(subed-enforce-time-boundaries 'error))
- (expect
(subed-move-subtitle-backward 1) :to-throw 'error)
- (expect
(subed-subtitle-msecs-start 1) :to-equal 1000)
- (expect
(subed-subtitle-msecs-stop 1) :to-equal 2000)
- (expect
(subed-subtitle-msecs-start 2) :to-equal 2000)
- (expect
(subed-subtitle-msecs-stop 2) :to-equal 3000)
- (expect (point) :to-equal
orig-point)))))
+ (insert (concat "1\n"
+
"00:00:01,000 --> 00:00:02,000\n"
+
"Foo.\n\n"
+
"2\n"
+
"00:00:02,000 --> 00:00:03,000\n"
+
"Bar.\n"))
+ (let ((orig-point (subed-jump-to-subtitle-id
2))
+
(subed-enforce-time-boundaries 'error))
+ (expect (subed-move-subtitle-backward
1) :to-throw 'error)
+ (expect (subed-subtitle-msecs-start 1)
:to-equal 1000)
+ (expect (subed-subtitle-msecs-stop 1)
:to-equal 2000)
+ (expect (subed-subtitle-msecs-start 2)
:to-equal 2000)
+ (expect (subed-subtitle-msecs-stop 2)
:to-equal 3000)
+ (expect (point) :to-equal
orig-point)))))
(describe "adjusts subtitles in the active region,"
(it "excluding the first subtitle."
(with-temp-srt-buffer
- (insert (concat "1\n"
-
"00:00:01,000 --> 00:00:02,000\n"
-
"Foo.\n\n"
-
"2\n"
-
"00:00:03,000 --> 00:00:04,000\n"
-
"Bar.\n\n"
-
"3\n"
-
"00:00:05,000 --> 00:00:06,000\n"
-
"Baz.\n"))
- (setq mark-active t)
- (spy-on 'region-beginning
:and-return-value (subed-jump-to-subtitle-text 2))
- (spy-on 'region-end :and-return-value
(subed-jump-to-subtitle-time-start 3))
- (let ((orig-point
(subed-jump-to-subtitle-text 2)))
- (subed-move-subtitle-forward
100)
- (expect
(subed-subtitle-msecs-start 1) :to-equal 1000)
- (expect
(subed-subtitle-msecs-stop 1) :to-equal 2000)
- (expect
(subed-subtitle-msecs-start 2) :to-equal 3100)
- (expect
(subed-subtitle-msecs-stop 2) :to-equal 4100)
- (expect
(subed-subtitle-msecs-start 3) :to-equal 5100)
- (expect
(subed-subtitle-msecs-stop 3) :to-equal 6100)
- (expect (point) :to-equal
orig-point)
- (subed-move-subtitle-backward
200)
- (expect
(subed-subtitle-msecs-start 1) :to-equal 1000)
- (expect
(subed-subtitle-msecs-stop 1) :to-equal 2000)
- (expect
(subed-subtitle-msecs-start 2) :to-equal 2900)
- (expect
(subed-subtitle-msecs-stop 2) :to-equal 3900)
- (expect
(subed-subtitle-msecs-start 3) :to-equal 4900)
- (expect
(subed-subtitle-msecs-stop 3) :to-equal 5900)
- (expect (point) :to-equal
orig-point))))
+ (insert (concat "1\n"
+
"00:00:01,000 --> 00:00:02,000\n"
+
"Foo.\n\n"
+
"2\n"
+
"00:00:03,000 --> 00:00:04,000\n"
+
"Bar.\n\n"
+
"3\n"
+
"00:00:05,000 --> 00:00:06,000\n"
+
"Baz.\n"))
+ (setq mark-active t)
+ (spy-on 'region-beginning :and-return-value
(subed-jump-to-subtitle-text 2))
+ (spy-on 'region-end :and-return-value
(subed-jump-to-subtitle-time-start 3))
+ (let ((orig-point (subed-jump-to-subtitle-text
2)))
+ (subed-move-subtitle-forward 100)
+ (expect (subed-subtitle-msecs-start 1)
:to-equal 1000)
+ (expect (subed-subtitle-msecs-stop 1)
:to-equal 2000)
+ (expect (subed-subtitle-msecs-start 2)
:to-equal 3100)
+ (expect (subed-subtitle-msecs-stop 2)
:to-equal 4100)
+ (expect (subed-subtitle-msecs-start 3)
:to-equal 5100)
+ (expect (subed-subtitle-msecs-stop 3)
:to-equal 6100)
+ (expect (point) :to-equal orig-point)
+ (subed-move-subtitle-backward 200)
+ (expect (subed-subtitle-msecs-start 1)
:to-equal 1000)
+ (expect (subed-subtitle-msecs-stop 1)
:to-equal 2000)
+ (expect (subed-subtitle-msecs-start 2)
:to-equal 2900)
+ (expect (subed-subtitle-msecs-stop 2)
:to-equal 3900)
+ (expect (subed-subtitle-msecs-start 3)
:to-equal 4900)
+ (expect (subed-subtitle-msecs-stop 3)
:to-equal 5900)
+ (expect (point) :to-equal
orig-point))))
(it "excluding the last subtitle."
(with-temp-srt-buffer
- (insert (concat "1\n"
-
"00:00:01,000 --> 00:00:02,000\n"
-
"Foo.\n\n"
-
"2\n"
-
"00:00:03,000 --> 00:00:04,000\n"
-
"Bar.\n\n"
-
"3\n"
-
"00:00:05,000 --> 00:00:06,000\n"
-
"Baz.\n"))
- (setq mark-active t)
- (spy-on 'region-beginning
:and-return-value (subed-jump-to-subtitle-text 1))
- (spy-on 'region-end :and-return-value
(subed-jump-to-subtitle-time-stop 2))
- (let ((orig-point
(subed-jump-to-subtitle-time-stop 3)))
- (subed-move-subtitle-forward
500)
- (expect
(subed-subtitle-msecs-start 1) :to-equal 1500)
- (expect
(subed-subtitle-msecs-stop 1) :to-equal 2500)
- (expect
(subed-subtitle-msecs-start 2) :to-equal 3500)
- (expect
(subed-subtitle-msecs-stop 2) :to-equal 4500)
- (expect
(subed-subtitle-msecs-start 3) :to-equal 5000)
- (expect
(subed-subtitle-msecs-stop 3) :to-equal 6000)
- (expect (point) :to-equal
orig-point)
- (subed-move-subtitle-backward
300)
- (expect
(subed-subtitle-msecs-start 1) :to-equal 1200)
- (expect
(subed-subtitle-msecs-stop 1) :to-equal 2200)
- (expect
(subed-subtitle-msecs-start 2) :to-equal 3200)
- (expect
(subed-subtitle-msecs-stop 2) :to-equal 4200)
- (expect
(subed-subtitle-msecs-start 3) :to-equal 5000)
- (expect
(subed-subtitle-msecs-stop 3) :to-equal 6000)
- (expect (point) :to-equal
orig-point))))
+ (insert (concat "1\n"
+
"00:00:01,000 --> 00:00:02,000\n"
+
"Foo.\n\n"
+
"2\n"
+
"00:00:03,000 --> 00:00:04,000\n"
+
"Bar.\n\n"
+
"3\n"
+
"00:00:05,000 --> 00:00:06,000\n"
+
"Baz.\n"))
+ (setq mark-active t)
+ (spy-on 'region-beginning :and-return-value
(subed-jump-to-subtitle-text 1))
+ (spy-on 'region-end :and-return-value
(subed-jump-to-subtitle-time-stop 2))
+ (let ((orig-point
(subed-jump-to-subtitle-time-stop 3)))
+ (subed-move-subtitle-forward 500)
+ (expect (subed-subtitle-msecs-start 1)
:to-equal 1500)
+ (expect (subed-subtitle-msecs-stop 1)
:to-equal 2500)
+ (expect (subed-subtitle-msecs-start 2)
:to-equal 3500)
+ (expect (subed-subtitle-msecs-stop 2)
:to-equal 4500)
+ (expect (subed-subtitle-msecs-start 3)
:to-equal 5000)
+ (expect (subed-subtitle-msecs-stop 3)
:to-equal 6000)
+ (expect (point) :to-equal orig-point)
+ (subed-move-subtitle-backward 300)
+ (expect (subed-subtitle-msecs-start 1)
:to-equal 1200)
+ (expect (subed-subtitle-msecs-stop 1)
:to-equal 2200)
+ (expect (subed-subtitle-msecs-start 2)
:to-equal 3200)
+ (expect (subed-subtitle-msecs-stop 2)
:to-equal 4200)
+ (expect (subed-subtitle-msecs-start 3)
:to-equal 5000)
+ (expect (subed-subtitle-msecs-stop 3)
:to-equal 6000)
+ (expect (point) :to-equal
orig-point))))
(describe "when ignoring time boundaries"
(it "does not change spacing between subtitles
when moving subtitles forward."
(with-temp-srt-buffer
- (insert "1\n"
-
"00:00:01,000 --> 00:00:02,000\n"
-
"Foo.\n\n"
-
"2\n"
-
"00:00:10,000 --> 00:00:11,000\n"
-
"Bar.\n\n"
-
"3\n"
-
"00:00:12,000 --> 00:00:13,000\n"
-
"Baz.\n")
- (setq mark-active t)
- (spy-on 'region-beginning
:and-return-value (subed-jump-to-subtitle-id 1))
- (spy-on 'region-end
:and-return-value (subed-jump-to-subtitle-text 2))
- (let ((orig-point
(subed-jump-to-subtitle-time-start 1))
-
(subed-enforce-time-boundaries nil))
-
(subed-move-subtitle-forward 2000)
- (expect
(subed-subtitle-msecs-start 1) :to-equal 3000)
- (expect
(subed-subtitle-msecs-stop 1) :to-equal 4000)
- (expect
(subed-subtitle-msecs-start 2) :to-equal 12000)
- (expect
(subed-subtitle-msecs-stop 2) :to-equal 13000)
- (expect
(subed-subtitle-msecs-start 3) :to-equal 12000)
- (expect
(subed-subtitle-msecs-stop 3) :to-equal 13000)
- (expect (point)
:to-equal orig-point))))
+ (insert "1\n"
+
"00:00:01,000 --> 00:00:02,000\n"
+
"Foo.\n\n"
+ "2\n"
+
"00:00:10,000 --> 00:00:11,000\n"
+
"Bar.\n\n"
+ "3\n"
+
"00:00:12,000 --> 00:00:13,000\n"
+
"Baz.\n")
+ (setq mark-active t)
+ (spy-on 'region-beginning
:and-return-value (subed-jump-to-subtitle-id 1))
+ (spy-on 'region-end :and-return-value
(subed-jump-to-subtitle-text 2))
+ (let ((orig-point
(subed-jump-to-subtitle-time-start 1))
+
(subed-enforce-time-boundaries nil))
+ (subed-move-subtitle-forward
2000)
+ (expect
(subed-subtitle-msecs-start 1) :to-equal 3000)
+ (expect
(subed-subtitle-msecs-stop 1) :to-equal 4000)
+ (expect
(subed-subtitle-msecs-start 2) :to-equal 12000)
+ (expect
(subed-subtitle-msecs-stop 2) :to-equal 13000)
+ (expect
(subed-subtitle-msecs-start 3) :to-equal 12000)
+ (expect
(subed-subtitle-msecs-stop 3) :to-equal 13000)
+ (expect (point) :to-equal
orig-point))))
(it "does not change spacing between subtitles
when moving subtitles backward."
(with-temp-srt-buffer
- (insert (concat "1\n"
-
"00:00:01,000 --> 00:00:02,000\n"
-
"Foo.\n\n"
-
"2\n"
-
"00:00:03,000 --> 00:00:04,000\n"
-
"Bar.\n\n"
-
"3\n"
-
"00:00:10,000 --> 00:00:11,000\n"
-
"Baz.\n"))
- (setq mark-active t)
- (spy-on 'region-beginning
:and-return-value (subed-jump-to-subtitle-id 2))
- (spy-on 'region-end
:and-return-value (subed-jump-to-subtitle-text 3))
- (let ((orig-point
(subed-jump-to-subtitle-time-start 2))
-
(subed-enforce-time-boundaries nil))
-
(subed-move-subtitle-backward 1000)
- (expect
(subed-subtitle-msecs-start 1) :to-equal 1000)
- (expect
(subed-subtitle-msecs-stop 1) :to-equal 2000)
- (expect
(subed-subtitle-msecs-start 2) :to-equal 2000)
- (expect
(subed-subtitle-msecs-stop 2) :to-equal 3000)
- (expect
(subed-subtitle-msecs-start 3) :to-equal 9000)
- (expect
(subed-subtitle-msecs-stop 3) :to-equal 10000)
- (expect (point)
:to-equal orig-point))))))
+ (insert (concat "1\n"
+
"00:00:01,000 --> 00:00:02,000\n"
+
"Foo.\n\n"
+
"2\n"
+
"00:00:03,000 --> 00:00:04,000\n"
+
"Bar.\n\n"
+
"3\n"
+
"00:00:10,000 --> 00:00:11,000\n"
+
"Baz.\n"))
+ (setq mark-active t)
+ (spy-on 'region-beginning
:and-return-value (subed-jump-to-subtitle-id 2))
+ (spy-on 'region-end :and-return-value
(subed-jump-to-subtitle-text 3))
+ (let ((orig-point
(subed-jump-to-subtitle-time-start 2))
+
(subed-enforce-time-boundaries nil))
+ (subed-move-subtitle-backward
1000)
+ (expect
(subed-subtitle-msecs-start 1) :to-equal 1000)
+ (expect
(subed-subtitle-msecs-stop 1) :to-equal 2000)
+ (expect
(subed-subtitle-msecs-start 2) :to-equal 2000)
+ (expect
(subed-subtitle-msecs-stop 2) :to-equal 3000)
+ (expect
(subed-subtitle-msecs-start 3) :to-equal 9000)
+ (expect
(subed-subtitle-msecs-stop 3) :to-equal 10000)
+ (expect (point) :to-equal
orig-point))))))
;; What does it mean by not having space left?
;; (describe "unless there is no space left"
;; (describe "when moving forward"
@@ -1019,220 +1019,270 @@ Baz.
(describe "ignoring spacing for non-leading subtitles"
(it "when moving forward."
(with-temp-srt-buffer
- (insert (concat "1\n"
-
"00:00:00,000 --> 00:00:01,000\n"
-
"Foo.\n\n"
-
"2\n"
-
"00:00:01,050 --> 00:00:02,000\n"
-
"Bar.\n\n"
-
"3\n"
-
"00:00:05,000 --> 00:00:6,000\n"
-
"Baz.\n"))
- (setq mark-active t)
- (spy-on 'region-beginning
:and-return-value (subed-jump-to-subtitle-id 1))
- (spy-on 'region-end :and-return-value
(subed-jump-to-subtitle-text 2))
- (let ((orig-point
(subed-jump-to-subtitle-time-start 3)))
- (subed-move-subtitle-forward
1000)
- (expect
(subed-subtitle-msecs-start 1) :to-equal 1000)
- (expect
(subed-subtitle-msecs-stop 1) :to-equal 2000)
- (expect
(subed-subtitle-msecs-start 2) :to-equal 2050)
- (expect
(subed-subtitle-msecs-stop 2) :to-equal 3000)
- (expect
(subed-subtitle-msecs-start 3) :to-equal 5000)
- (expect
(subed-subtitle-msecs-stop 3) :to-equal 6000)
- (expect (point) :to-equal
orig-point))))
+ (insert (concat "1\n"
+
"00:00:00,000 --> 00:00:01,000\n"
+
"Foo.\n\n"
+
"2\n"
+
"00:00:01,050 --> 00:00:02,000\n"
+
"Bar.\n\n"
+
"3\n"
+
"00:00:05,000 --> 00:00:6,000\n"
+
"Baz.\n"))
+ (setq mark-active t)
+ (spy-on 'region-beginning :and-return-value
(subed-jump-to-subtitle-id 1))
+ (spy-on 'region-end :and-return-value
(subed-jump-to-subtitle-text 2))
+ (let ((orig-point
(subed-jump-to-subtitle-time-start 3)))
+ (subed-move-subtitle-forward 1000)
+ (expect (subed-subtitle-msecs-start 1)
:to-equal 1000)
+ (expect (subed-subtitle-msecs-stop 1)
:to-equal 2000)
+ (expect (subed-subtitle-msecs-start 2)
:to-equal 2050)
+ (expect (subed-subtitle-msecs-stop 2)
:to-equal 3000)
+ (expect (subed-subtitle-msecs-start 3)
:to-equal 5000)
+ (expect (subed-subtitle-msecs-stop 3)
:to-equal 6000)
+ (expect (point) :to-equal
orig-point))))
(it "when moving backward."
(with-temp-srt-buffer
- (insert (concat "1\n"
-
"00:00:01,000 --> 00:00:02,000\n"
-
"Foo.\n\n"
-
"2\n"
-
"00:00:04,000 --> 00:00:05,000\n"
-
"Bar.\n\n"
-
"3\n"
-
"00:00:05,000 --> 00:00:05,000\n"
-
"Baz.\n"))
- (setq mark-active t)
- (spy-on 'region-beginning
:and-return-value (subed-jump-to-subtitle-id 2))
- (spy-on 'region-end :and-return-value
(subed-jump-to-subtitle-text 3))
- (let ((orig-point
(subed-jump-to-subtitle-time-stop 1)))
- (subed-move-subtitle-backward
1000)
- (expect
(subed-subtitle-msecs-start 1) :to-equal 1000)
- (expect
(subed-subtitle-msecs-stop 1) :to-equal 2000)
- (expect
(subed-subtitle-msecs-start 2) :to-equal 3000)
- (expect
(subed-subtitle-msecs-stop 2) :to-equal 4000)
- (expect
(subed-subtitle-msecs-start 3) :to-equal 4000)
- (expect
(subed-subtitle-msecs-stop 3) :to-equal 4000)
- (expect (point) :to-equal
orig-point))))
+ (insert (concat "1\n"
+
"00:00:01,000 --> 00:00:02,000\n"
+
"Foo.\n\n"
+
"2\n"
+
"00:00:04,000 --> 00:00:05,000\n"
+
"Bar.\n\n"
+
"3\n"
+
"00:00:05,000 --> 00:00:05,000\n"
+
"Baz.\n"))
+ (setq mark-active t)
+ (spy-on 'region-beginning :and-return-value
(subed-jump-to-subtitle-id 2))
+ (spy-on 'region-end :and-return-value
(subed-jump-to-subtitle-text 3))
+ (let ((orig-point
(subed-jump-to-subtitle-time-stop 1)))
+ (subed-move-subtitle-backward 1000)
+ (expect (subed-subtitle-msecs-start 1)
:to-equal 1000)
+ (expect (subed-subtitle-msecs-stop 1)
:to-equal 2000)
+ (expect (subed-subtitle-msecs-start 2)
:to-equal 3000)
+ (expect (subed-subtitle-msecs-stop 2)
:to-equal 4000)
+ (expect (subed-subtitle-msecs-start 3)
:to-equal 4000)
+ (expect (subed-subtitle-msecs-stop 3)
:to-equal 4000)
+ (expect (point) :to-equal
orig-point))))
)
(describe "ignoring overlapping subtitles"
(it "when moving forward."
(with-temp-srt-buffer
- (insert (concat "1\n"
-
"00:00:01,000 --> 00:00:01,500\n"
-
"Foo.\n\n"
-
"2\n"
-
"00:00:01,300 --> 00:00:02,000\n"
-
"Bar.\n\n"
-
"3\n"
-
"00:00:05,000 --> 00:00:6,000\n"
-
"Baz.\n"))
- (setq mark-active t)
- (spy-on 'region-beginning
:and-return-value (subed-jump-to-subtitle-id 1))
- (spy-on 'region-end :and-return-value
(subed-jump-to-subtitle-text 2))
- (let ((orig-point
(subed-jump-to-subtitle-text 2)))
- (subed-move-subtitle-forward
1000)
- (expect
(subed-subtitle-msecs-start 1) :to-equal 2000)
- (expect
(subed-subtitle-msecs-stop 1) :to-equal 2500)
- (expect
(subed-subtitle-msecs-start 2) :to-equal 2300)
- (expect
(subed-subtitle-msecs-stop 2) :to-equal 3000)
- (expect
(subed-subtitle-msecs-start 3) :to-equal 5000)
- (expect
(subed-subtitle-msecs-stop 3) :to-equal 6000)
- (expect (point) :to-equal
orig-point))))
+ (insert (concat "1\n"
+
"00:00:01,000 --> 00:00:01,500\n"
+
"Foo.\n\n"
+
"2\n"
+
"00:00:01,300 --> 00:00:02,000\n"
+
"Bar.\n\n"
+
"3\n"
+
"00:00:05,000 --> 00:00:6,000\n"
+
"Baz.\n"))
+ (setq mark-active t)
+ (spy-on 'region-beginning :and-return-value
(subed-jump-to-subtitle-id 1))
+ (spy-on 'region-end :and-return-value
(subed-jump-to-subtitle-text 2))
+ (let ((orig-point (subed-jump-to-subtitle-text
2)))
+ (subed-move-subtitle-forward 1000)
+ (expect (subed-subtitle-msecs-start 1)
:to-equal 2000)
+ (expect (subed-subtitle-msecs-stop 1)
:to-equal 2500)
+ (expect (subed-subtitle-msecs-start 2)
:to-equal 2300)
+ (expect (subed-subtitle-msecs-stop 2)
:to-equal 3000)
+ (expect (subed-subtitle-msecs-start 3)
:to-equal 5000)
+ (expect (subed-subtitle-msecs-stop 3)
:to-equal 6000)
+ (expect (point) :to-equal
orig-point))))
(it "when moving backward."
(with-temp-srt-buffer
- (insert (concat "1\n"
-
"00:00:01,000 --> 00:00:02,000\n"
-
"Foo.\n\n"
-
"2\n"
-
"00:00:04,500 --> 00:00:04,000\n"
-
"Bar.\n\n"
-
"3\n"
-
"00:00:04,500 --> 00:00:04,490\n"
-
"Baz.\n"))
- (setq mark-active t)
- (spy-on 'region-beginning
:and-return-value (subed-jump-to-subtitle-id 2))
- (spy-on 'region-end :and-return-value
(subed-jump-to-subtitle-text 3))
- (let ((orig-point
(subed-jump-to-subtitle-text 1)))
- (subed-move-subtitle-backward
1000)
- (expect
(subed-subtitle-msecs-start 1) :to-equal 1000)
- (expect
(subed-subtitle-msecs-stop 1) :to-equal 2000)
- (expect
(subed-subtitle-msecs-start 2) :to-equal 3500)
- (expect
(subed-subtitle-msecs-stop 2) :to-equal 3000)
- (expect
(subed-subtitle-msecs-start 3) :to-equal 3500)
- (expect
(subed-subtitle-msecs-stop 3) :to-equal 3490)
- (expect (point) :to-equal
orig-point))))
+ (insert (concat "1\n"
+
"00:00:01,000 --> 00:00:02,000\n"
+
"Foo.\n\n"
+
"2\n"
+
"00:00:04,500 --> 00:00:04,000\n"
+
"Bar.\n\n"
+
"3\n"
+
"00:00:04,500 --> 00:00:04,490\n"
+
"Baz.\n"))
+ (setq mark-active t)
+ (spy-on 'region-beginning :and-return-value
(subed-jump-to-subtitle-id 2))
+ (spy-on 'region-end :and-return-value
(subed-jump-to-subtitle-text 3))
+ (let ((orig-point (subed-jump-to-subtitle-text
1)))
+ (subed-move-subtitle-backward 1000)
+ (expect (subed-subtitle-msecs-start 1)
:to-equal 1000)
+ (expect (subed-subtitle-msecs-stop 1)
:to-equal 2000)
+ (expect (subed-subtitle-msecs-start 2)
:to-equal 3500)
+ (expect (subed-subtitle-msecs-stop 2)
:to-equal 3000)
+ (expect (subed-subtitle-msecs-start 3)
:to-equal 3500)
+ (expect (subed-subtitle-msecs-stop 3)
:to-equal 3490)
+ (expect (point) :to-equal
orig-point))))
)
(it "ignoring start time being larger than stop time."
(with-temp-srt-buffer
- (insert (concat "1\n"
-
"00:00:01,500 --> 00:00:01,400\n"
-
"Foo.\n\n"
-
"2\n"
-
"00:00:02,500 --> 00:00:02,499\n"
-
"Bar.\n\n"
-
"3\n"
-
"00:00:05,000 --> 00:00:06,000\n"
-
"Bar.\n"))
- (setq mark-active t)
- (spy-on 'region-beginning :and-return-value
(subed-jump-to-subtitle-text 1))
- (spy-on 'region-end :and-return-value
(subed-jump-to-subtitle-time-start 2))
- (let ((orig-point
(subed-jump-to-subtitle-time-stop 1)))
- (subed-move-subtitle-forward 1000)
- (expect (subed-subtitle-msecs-start 1)
:to-equal 2500)
- (expect (subed-subtitle-msecs-stop 1)
:to-equal 2400)
- (expect (subed-subtitle-msecs-start 2)
:to-equal 3500)
- (expect (subed-subtitle-msecs-stop 2)
:to-equal 3499)
- (expect (subed-subtitle-msecs-start 3)
:to-equal 5000)
- (expect (subed-subtitle-msecs-stop 3)
:to-equal 6000)
- (expect (point) :to-equal orig-point)
- (subed-move-subtitle-backward 500)
- (expect (subed-subtitle-msecs-start 1)
:to-equal 2000)
- (expect (subed-subtitle-msecs-stop 1)
:to-equal 1900)
- (expect (subed-subtitle-msecs-start 2)
:to-equal 3000)
- (expect (subed-subtitle-msecs-stop 2)
:to-equal 2999)
- (expect (subed-subtitle-msecs-start 3)
:to-equal 5000)
- (expect (subed-subtitle-msecs-stop 3)
:to-equal 6000)
- (expect (point) :to-equal orig-point))))
+ (insert (concat "1\n"
+
"00:00:01,500 --> 00:00:01,400\n"
+
"Foo.\n\n"
+
"2\n"
+
"00:00:02,500 --> 00:00:02,499\n"
+
"Bar.\n\n"
+
"3\n"
+
"00:00:05,000 --> 00:00:06,000\n"
+
"Bar.\n"))
+ (setq mark-active t)
+ (spy-on 'region-beginning :and-return-value
(subed-jump-to-subtitle-text 1))
+ (spy-on 'region-end :and-return-value
(subed-jump-to-subtitle-time-start 2))
+ (let ((orig-point (subed-jump-to-subtitle-time-stop
1)))
+ (subed-move-subtitle-forward 1000)
+ (expect (subed-subtitle-msecs-start 1)
:to-equal 2500)
+ (expect (subed-subtitle-msecs-stop 1)
:to-equal 2400)
+ (expect (subed-subtitle-msecs-start 2)
:to-equal 3500)
+ (expect (subed-subtitle-msecs-stop 2)
:to-equal 3499)
+ (expect (subed-subtitle-msecs-start 3)
:to-equal 5000)
+ (expect (subed-subtitle-msecs-stop 3)
:to-equal 6000)
+ (expect (point) :to-equal orig-point)
+ (subed-move-subtitle-backward 500)
+ (expect (subed-subtitle-msecs-start 1)
:to-equal 2000)
+ (expect (subed-subtitle-msecs-stop 1)
:to-equal 1900)
+ (expect (subed-subtitle-msecs-start 2)
:to-equal 3000)
+ (expect (subed-subtitle-msecs-stop 2)
:to-equal 2999)
+ (expect (subed-subtitle-msecs-start 3)
:to-equal 5000)
+ (expect (subed-subtitle-msecs-stop 3)
:to-equal 6000)
+ (expect (point) :to-equal orig-point))))
(it "ignoring stop time being smaller than start time."
(with-temp-srt-buffer
- (insert (concat "1\n"
-
"00:00:01,000 --> 00:00:02,000\n"
-
"Foo.\n\n"
-
"2\n"
-
"00:00:04,100 --> 00:00:04,099\n"
-
"Bar.\n\n"
-
"3\n"
-
"00:00:05,500 --> 00:00:05,000\n"
-
"Bar.\n"))
- (setq mark-active t)
- (spy-on 'region-beginning :and-return-value
(subed-jump-to-subtitle-text 2))
- (spy-on 'region-end :and-return-value
(subed-jump-to-subtitle-time-start 3))
- (let ((orig-point (subed-jump-to-subtitle-text
1)))
- (subed-move-subtitle-forward 1000)
- (expect (subed-subtitle-msecs-start 1)
:to-equal 1000)
- (expect (subed-subtitle-msecs-stop 1)
:to-equal 2000)
- (expect (subed-subtitle-msecs-start 2)
:to-equal 5100)
- (expect (subed-subtitle-msecs-stop 2)
:to-equal 5099)
- (expect (subed-subtitle-msecs-start 3)
:to-equal 6500)
- (expect (subed-subtitle-msecs-stop 3)
:to-equal 6000)
- (expect (point) :to-equal orig-point)
- (subed-move-subtitle-backward 500)
- (expect (subed-subtitle-msecs-start 1)
:to-equal 1000)
- (expect (subed-subtitle-msecs-stop 1)
:to-equal 2000)
- (expect (subed-subtitle-msecs-start 2)
:to-equal 4600)
- (expect (subed-subtitle-msecs-stop 2)
:to-equal 4599)
- (expect (subed-subtitle-msecs-start 3)
:to-equal 6000)
- (expect (subed-subtitle-msecs-stop 3)
:to-equal 5500)
- (expect (point) :to-equal orig-point))))
+ (insert (concat "1\n"
+
"00:00:01,000 --> 00:00:02,000\n"
+
"Foo.\n\n"
+
"2\n"
+
"00:00:04,100 --> 00:00:04,099\n"
+
"Bar.\n\n"
+
"3\n"
+
"00:00:05,500 --> 00:00:05,000\n"
+
"Bar.\n"))
+ (setq mark-active t)
+ (spy-on 'region-beginning :and-return-value
(subed-jump-to-subtitle-text 2))
+ (spy-on 'region-end :and-return-value
(subed-jump-to-subtitle-time-start 3))
+ (let ((orig-point (subed-jump-to-subtitle-text 1)))
+ (subed-move-subtitle-forward 1000)
+ (expect (subed-subtitle-msecs-start 1)
:to-equal 1000)
+ (expect (subed-subtitle-msecs-stop 1)
:to-equal 2000)
+ (expect (subed-subtitle-msecs-start 2)
:to-equal 5100)
+ (expect (subed-subtitle-msecs-stop 2)
:to-equal 5099)
+ (expect (subed-subtitle-msecs-start 3)
:to-equal 6500)
+ (expect (subed-subtitle-msecs-stop 3)
:to-equal 6000)
+ (expect (point) :to-equal orig-point)
+ (subed-move-subtitle-backward 500)
+ (expect (subed-subtitle-msecs-start 1)
:to-equal 1000)
+ (expect (subed-subtitle-msecs-stop 1)
:to-equal 2000)
+ (expect (subed-subtitle-msecs-start 2)
:to-equal 4600)
+ (expect (subed-subtitle-msecs-stop 2)
:to-equal 4599)
+ (expect (subed-subtitle-msecs-start 3)
:to-equal 6000)
+ (expect (subed-subtitle-msecs-stop 3)
:to-equal 5500)
+ (expect (point) :to-equal orig-point))))
(it "disables subtitle replay while moving subtitles."
(with-temp-srt-buffer
- (insert mock-srt-data)
- (subed-enable-replay-adjusted-subtitle :quiet)
- (spy-on 'subed-enable-replay-adjusted-subtitle
:and-call-through)
- (spy-on 'subed-disable-replay-adjusted-subtitle
:and-call-through)
- (spy-on 'subed-adjust-subtitle-time-start
:and-call-fake
- (lambda (msecs
&optional a b) (expect (subed-replay-adjusted-subtitle-p) :to-be nil)))
- (spy-on 'subed-adjust-subtitle-stop
:and-call-fake
- (lambda (msecs
&optional a b) (expect (subed-replay-adjusted-subtitle-p) :to-be nil)))
- (subed-move-subtitle-forward 100)
- (expect 'subed-disable-replay-adjusted-subtitle
:to-have-been-called-times 1)
- (expect 'subed-enable-replay-adjusted-subtitle
:to-have-been-called-times 1)
- (subed-move-subtitle-backward 100)
- (expect 'subed-disable-replay-adjusted-subtitle
:to-have-been-called-times 2)
- (expect 'subed-enable-replay-adjusted-subtitle
:to-have-been-called-times 2)))
+ (insert mock-srt-data)
+ (subed-enable-replay-adjusted-subtitle :quiet)
+ (spy-on 'subed-enable-replay-adjusted-subtitle
:and-call-through)
+ (spy-on 'subed-disable-replay-adjusted-subtitle
:and-call-through)
+ (spy-on 'subed-adjust-subtitle-time-start
:and-call-fake
+ (lambda (msecs
&optional a b) (expect (subed-replay-adjusted-subtitle-p) :to-be nil)))
+ (spy-on 'subed-adjust-subtitle-stop :and-call-fake
+ (lambda (msecs
&optional a b) (expect (subed-replay-adjusted-subtitle-p) :to-be nil)))
+ (subed-move-subtitle-forward 100)
+ (expect 'subed-disable-replay-adjusted-subtitle
:to-have-been-called-times 1)
+ (expect 'subed-enable-replay-adjusted-subtitle
:to-have-been-called-times 1)
+ (subed-move-subtitle-backward 100)
+ (expect 'subed-disable-replay-adjusted-subtitle
:to-have-been-called-times 2)
+ (expect 'subed-enable-replay-adjusted-subtitle
:to-have-been-called-times 2)))
(it "does not enable subtitle replay afterwards if it is disabled."
(with-temp-srt-buffer
- (insert mock-srt-data)
- (subed-disable-replay-adjusted-subtitle :quiet)
- (spy-on 'subed-enable-replay-adjusted-subtitle
:and-call-through)
- (spy-on 'subed-disable-replay-adjusted-subtitle
:and-call-through)
- (spy-on 'subed-adjust-subtitle-time-start
:and-call-fake
- (lambda (msecs
&optional a b) (expect (subed-replay-adjusted-subtitle-p) :to-be nil)))
- (spy-on 'subed-adjust-subtitle-stop
:and-call-fake
- (lambda (msecs
&optional a b) (expect (subed-replay-adjusted-subtitle-p) :to-be nil)))
- (subed-move-subtitle-forward 100)
- (expect 'subed-disable-replay-adjusted-subtitle
:to-have-been-called-times 1)
- (expect 'subed-enable-replay-adjusted-subtitle
:to-have-been-called-times 0)
- (subed-move-subtitle-backward 100)
- (expect 'subed-disable-replay-adjusted-subtitle
:to-have-been-called-times 2)
- (expect 'subed-enable-replay-adjusted-subtitle
:to-have-been-called-times 0)))
+ (insert mock-srt-data)
+ (subed-disable-replay-adjusted-subtitle :quiet)
+ (spy-on 'subed-enable-replay-adjusted-subtitle
:and-call-through)
+ (spy-on 'subed-disable-replay-adjusted-subtitle
:and-call-through)
+ (spy-on 'subed-adjust-subtitle-time-start
:and-call-fake
+ (lambda (msecs
&optional a b) (expect (subed-replay-adjusted-subtitle-p) :to-be nil)))
+ (spy-on 'subed-adjust-subtitle-stop :and-call-fake
+ (lambda (msecs
&optional a b) (expect (subed-replay-adjusted-subtitle-p) :to-be nil)))
+ (subed-move-subtitle-forward 100)
+ (expect 'subed-disable-replay-adjusted-subtitle
:to-have-been-called-times 1)
+ (expect 'subed-enable-replay-adjusted-subtitle
:to-have-been-called-times 0)
+ (subed-move-subtitle-backward 100)
+ (expect 'subed-disable-replay-adjusted-subtitle
:to-have-been-called-times 2)
+ (expect 'subed-enable-replay-adjusted-subtitle
:to-have-been-called-times 0)))
(it "seeks player to current subtitle if region is not active."
(with-temp-srt-buffer
- (insert mock-srt-data)
- (spy-on 'subed-replay-adjusted-subtitle-p
:and-return-value t)
- (spy-on 'subed-mpv-jump)
- (subed-move-subtitle-forward 100)
- (expect 'subed-mpv-jump
:to-have-been-called-times 1)
- (expect 'subed-mpv-jump
:to-have-been-called-with 183550)
- (subed-move-subtitle-backward 200)
- (expect 'subed-mpv-jump
:to-have-been-called-times 2)
- (expect 'subed-mpv-jump
:to-have-been-called-with 183350)))
+ (insert mock-srt-data)
+ (spy-on 'subed-replay-adjusted-subtitle-p
:and-return-value t)
+ (spy-on 'subed-mpv-jump)
+ (subed-move-subtitle-forward 100)
+ (expect 'subed-mpv-jump :to-have-been-called-times 1)
+ (expect 'subed-mpv-jump :to-have-been-called-with
183550)
+ (subed-move-subtitle-backward 200)
+ (expect 'subed-mpv-jump :to-have-been-called-times 2)
+ (expect 'subed-mpv-jump :to-have-been-called-with
183350)))
(it "seeks player to first subtitle in active region."
(with-temp-srt-buffer
- (insert mock-srt-data)
- (let ((beg 15)
- (end (point-max)))
- (setq mark-active t)
- (spy-on 'region-beginning
:and-return-value beg)
- (spy-on 'region-end :and-return-value
end)
- (spy-on
'subed-replay-adjusted-subtitle-p :and-return-value t)
- (spy-on 'subed-mpv-jump)
- (subed-move-subtitle-forward 100)
- (expect 'subed-mpv-jump
:to-have-been-called-times 1)
- (expect 'subed-mpv-jump
:to-have-been-called-with '61100)
- (subed-move-subtitle-backward 300)
- (expect 'subed-mpv-jump
:to-have-been-called-times 2)
- (expect 'subed-mpv-jump
:to-have-been-called-with '60800)))))
+ (insert mock-srt-data)
+ (let ((beg 15)
+ (end (point-max)))
+ (setq mark-active t)
+ (spy-on 'region-beginning :and-return-value
beg)
+ (spy-on 'region-end :and-return-value end)
+ (spy-on 'subed-replay-adjusted-subtitle-p
:and-return-value t)
+ (spy-on 'subed-mpv-jump)
+ (subed-move-subtitle-forward 100)
+ (expect 'subed-mpv-jump
:to-have-been-called-times 1)
+ (expect 'subed-mpv-jump
:to-have-been-called-with '61100)
+ (subed-move-subtitle-backward 300)
+ (expect 'subed-mpv-jump
:to-have-been-called-times 2)
+ (expect 'subed-mpv-jump
:to-have-been-called-with '60800))))
+ (describe "to a specified start timestamp"
+ (describe "when focusing on the current subtitle"
+ (it "adjusts start and stop time by the same amount."
+ (with-temp-srt-buffer
+ (insert mock-srt-data)
+ (subed-jump-to-subtitle-text 2)
+ (subed-move-subtitles-to-start-at-timestamp "00:02:02,334" nil nil)
+ (expect (subed-subtitle-msecs-start 1) :to-equal
(subed-timestamp-to-msecs "00:01:01,000"))
+ (expect (subed-subtitle-msecs-stop 1) :to-equal
(subed-timestamp-to-msecs "00:01:05,123"))
+ (expect (subed-subtitle-msecs-start 2) :to-equal
(subed-timestamp-to-msecs "00:02:02,334"))
+ (expect (subed-subtitle-msecs-stop 2) :to-equal
(subed-timestamp-to-msecs "00:02:10,445"))
+ (expect (subed-subtitle-msecs-start 3) :to-equal
(subed-timestamp-to-msecs "00:03:03,450"))
+ (expect (subed-subtitle-msecs-stop 3) :to-equal
(subed-timestamp-to-msecs "00:03:15,500")))))
+ (describe "when moving current and following subtitles"
+ (it "adjusts start and stop time by the same amount."
+ (with-temp-srt-buffer
+ (insert mock-srt-data)
+ (subed-jump-to-subtitle-text 2)
+ (subed-move-subtitles-to-start-at-timestamp "00:02:02,334" (point)
(point-max))
+ (expect (subed-subtitle-msecs-start 1) :to-equal
(subed-timestamp-to-msecs "00:01:01,000"))
+ (expect (subed-subtitle-msecs-stop 1) :to-equal
(subed-timestamp-to-msecs "00:01:05,123"))
+ (expect (subed-subtitle-msecs-start 2) :to-equal
(subed-timestamp-to-msecs "00:02:02,334"))
+ (expect (subed-subtitle-msecs-stop 2) :to-equal
(subed-timestamp-to-msecs "00:02:10,445"))
+ (expect (subed-subtitle-msecs-start 3) :to-equal
(subed-timestamp-to-msecs "00:03:03,550"))
+ (expect (subed-subtitle-msecs-stop 3) :to-equal
(subed-timestamp-to-msecs "00:03:15,600")))))))
+ (describe "Shifting"
+ (describe "by an msec offset"
+ (it "adjusts start and stop time by the same amount."
+ (with-temp-srt-buffer
+ (insert mock-srt-data)
+ (subed-jump-to-subtitle-text 2)
+ (subed-shift-subtitles 100)
+ (expect (subed-subtitle-msecs-start 1) :to-equal
(subed-timestamp-to-msecs "00:01:01,000"))
+ (expect (subed-subtitle-msecs-stop 1) :to-equal
(subed-timestamp-to-msecs "00:01:05,123"))
+ (expect (subed-subtitle-msecs-start 2) :to-equal
(subed-timestamp-to-msecs "00:02:02,334"))
+ (expect (subed-subtitle-msecs-stop 2) :to-equal
(subed-timestamp-to-msecs "00:02:10,445"))
+ (expect (subed-subtitle-msecs-start 3) :to-equal
(subed-timestamp-to-msecs "00:03:03,550"))
+ (expect (subed-subtitle-msecs-stop 3) :to-equal
(subed-timestamp-to-msecs "00:03:15,600")))))
+ (describe "to a specified start timestamp"
+ (it "adjusts start and stop time by the same amount."
+ (with-temp-srt-buffer
+ (insert mock-srt-data)
+ (subed-jump-to-subtitle-text 2)
+ (subed-shift-subtitles-to-start-at-timestamp "00:02:02,334")
+ (expect (subed-subtitle-msecs-start 1) :to-equal
(subed-timestamp-to-msecs "00:01:01,000"))
+ (expect (subed-subtitle-msecs-stop 1) :to-equal
(subed-timestamp-to-msecs "00:01:05,123"))
+ (expect (subed-subtitle-msecs-start 2) :to-equal
(subed-timestamp-to-msecs "00:02:02,334"))
+ (expect (subed-subtitle-msecs-stop 2) :to-equal
(subed-timestamp-to-msecs "00:02:10,445"))
+ (expect (subed-subtitle-msecs-start 3) :to-equal
(subed-timestamp-to-msecs "00:03:03,550"))
+ (expect (subed-subtitle-msecs-stop 3) :to-equal
(subed-timestamp-to-msecs "00:03:15,600"))))))
(describe "Inserting evenly spaced"
(describe "in an empty buffer,"
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [nongnu] elpa/subed e73c0a3803: 1.2.11 New commands subed-shift-subtitles-to-start-at-timestamp, subed-move-subtitles-to-start-at-timestamp, add workflow notes,
ELPA Syncer <=