[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[nongnu] elpa/subed 06851d8 143/389: Prevent overlapping when adjusting
From: |
ELPA Syncer |
Subject: |
[nongnu] elpa/subed 06851d8 143/389: Prevent overlapping when adjusting subtitle start/stop time |
Date: |
Fri, 3 Dec 2021 11:00:14 -0500 (EST) |
branch: elpa/subed
commit 06851d89734c030ead5ce973e2717ab24be4cba6
Author: Random User <rndusr@posteo.de>
Commit: Random User <rndusr@posteo.de>
Prevent overlapping when adjusting subtitle start/stop time
---
README.org | 8 ++---
subed/subed-config.el | 4 +--
subed/subed-srt.el | 22 ++++++++++--
tests/test-subed-srt.el | 93 +++++++++++++++++++++++++++++++++++++++++++++++++
4 files changed, 119 insertions(+), 8 deletions(-)
diff --git a/README.org b/README.org
index e51c28b..a52dcdc 100644
--- a/README.org
+++ b/README.org
@@ -12,11 +12,11 @@ subed is still alpha software. Expect it to kill your
Emacs session.
- Quickly jump to the beginning (~C-M-a~) and end (~C-M-e~) of the current
subtitle's text.
- Insert (~M-i~) and kill (~M-k~) subtitles.
- - Freely adjust subtitle start (~M-[~ / ~M-]~) and stop (~M-{~ / ~M-}~)
time.
- A prefix argument sets the number of milliseconds for the current session
+ - Adjust subtitle start (~M-[~ / ~M-]~) and stop (~M-{~ / ~M-}~) time. A
+ prefix argument sets the number of milliseconds for the current session
(e.g. ~C-u 1000 M-[ M-[ M-[~ decreases start time by 3 seconds).
- - Freely move the current subtitle or all marked subtitles forward (~C-M-n~)
- or backward (~C-M-p~) in time without changing subtitle duration. A
prefix
+ - Move the current subtitle or all marked subtitles forward (~C-M-n~) or
+ backward (~C-M-p~) in time without changing subtitle duration. A prefix
argument sets the number of milliseconds for the current session (e.g.
~C-u
500 C-M-n C-M-n~ moves the current subtitle 1 second forward).
- Shift the current subtitle forward (~C-M-f~) or backward (~C-M-b~)
together
diff --git a/subed/subed-config.el b/subed/subed-config.el
index 75c6e23..010f229 100644
--- a/subed/subed-config.el
+++ b/subed/subed-config.el
@@ -161,8 +161,8 @@ typed something.")
(defcustom subed-subtitle-spacing 100
- "How many milliseconds to keep between subtitles when inserting
-subtitles."
+ "How many milliseconds to keep between subtitles when adjusting
+or inserting subtitles."
:type 'integer
:group 'subed)
diff --git a/subed/subed-srt.el b/subed/subed-srt.el
index 372699e..9f71320 100644
--- a/subed/subed-srt.el
+++ b/subed/subed-srt.el
@@ -300,8 +300,17 @@ Return point or nil if there is no previous subtitle."
"Add MSECS milliseconds to start time (use negative value to subtract)."
(subed-disable-sync-point-to-player-temporarily)
(let* ((msecs-start (subed-srt--subtitle-msecs-start))
- (msecs-new (when msecs-start (+ msecs-start msecs))))
+ (msecs-new (when msecs-start (+ msecs-start msecs)))
+ (msecs-prev (save-excursion
+ (when (subed-srt-backward-subtitle-id)
+ (subed-srt--subtitle-msecs-stop))))
+ (msecs-min (if msecs-prev (+ msecs-prev subed-subtitle-spacing) 0))
+ (msecs-max (subed-srt--subtitle-msecs-stop)))
(when msecs-new
+ (when (and msecs-min (< msecs-new msecs-min))
+ (setq msecs-new msecs-min))
+ (when (> msecs-new msecs-max)
+ (setq msecs-new msecs-max))
(save-excursion
(subed-srt-jump-to-subtitle-time-start)
(when (looking-at subed-srt--regexp-timestamp)
@@ -312,8 +321,17 @@ Return point or nil if there is no previous subtitle."
"Add MSECS milliseconds to stop time (use negative value to subtract)."
(subed-disable-sync-point-to-player-temporarily)
(let* ((msecs-stop (subed-srt--subtitle-msecs-stop))
- (msecs-new (when msecs-stop (+ msecs-stop msecs))))
+ (msecs-new (when msecs-stop (+ msecs-stop msecs)))
+ (msecs-next (save-excursion
+ (when (subed-srt-forward-subtitle-id)
+ (subed-srt--subtitle-msecs-start))))
+ (msecs-min (subed-srt--subtitle-msecs-start))
+ (msecs-max (when msecs-next (- msecs-next subed-subtitle-spacing))))
(when msecs-new
+ (when (< msecs-new msecs-min)
+ (setq msecs-new msecs-min))
+ (when (and msecs-max (> msecs-new msecs-max))
+ (setq msecs-new msecs-max))
(save-excursion
(subed-srt-jump-to-subtitle-time-stop)
(when (looking-at subed-srt--regexp-timestamp)
diff --git a/tests/test-subed-srt.el b/tests/test-subed-srt.el
index 76cf623..9e671f8 100644
--- a/tests/test-subed-srt.el
+++ b/tests/test-subed-srt.el
@@ -678,6 +678,99 @@ Baz.
(subed-srt-increase-stop-time)
(expect (save-excursion (subed-srt-jump-to-subtitle-time-start)
(thing-at-point 'line)) :to-equal
"00:01:01,500 --> 00:01:06,123\n")))
+ (describe "enforces limits"
+ (describe "when decreasing start time"
+ (it "of the first subtitle."
+ (with-temp-buffer
+ (insert mock-srt-data)
+ (subed-srt-jump-to-subtitle-id 1)
+ (subed-srt-decrease-start-time 60999)
+ (expect (subed-srt--subtitle-msecs-start)
:to-be 1)
+ (subed-srt-decrease-start-time 1)
+ (expect (subed-srt--subtitle-msecs-start)
:to-be 0)
+ (subed-srt-decrease-start-time 1)
+ (expect (subed-srt--subtitle-msecs-start)
:to-be 0)))
+ (it "of a non-first subtitle."
+ (with-temp-buffer
+ (insert mock-srt-data)
+ (subed-srt-jump-to-subtitle-id 2)
+ (subed-srt-decrease-start-time (-
(subed-srt--subtitle-msecs-start 2)
+
(subed-srt--subtitle-msecs-stop 1)
+
subed-subtitle-spacing
+ 1))
+ (expect (subed-srt--subtitle-msecs-start)
:to-be (+ (subed-srt--subtitle-msecs-stop 1)
+
subed-subtitle-spacing
+
1))
+ (subed-srt-decrease-start-time 1)
+ (expect (subed-srt--subtitle-msecs-start)
:to-be (+ (subed-srt--subtitle-msecs-stop 1)
+
subed-subtitle-spacing))
+ (subed-srt-decrease-start-time 1)
+ (expect (subed-srt--subtitle-msecs-start)
:to-be (+ (subed-srt--subtitle-msecs-stop 1)
+
subed-subtitle-spacing))))
+ )
+ (it "when increasing start time."
+ (with-temp-buffer
+ (insert mock-srt-data)
+ (subed-srt-jump-to-subtitle-id 2)
+ (subed-srt-increase-start-time (-
(subed-srt--subtitle-msecs-stop 2)
+
(subed-srt--subtitle-msecs-start 2)
+ 1))
+ (expect (subed-srt--subtitle-msecs-start 2) :to-be
(- (subed-srt--subtitle-msecs-stop 2) 1))
+ (subed-srt-increase-start-time 1)
+ (expect (subed-srt--subtitle-msecs-start 2) :to-be
(subed-srt--subtitle-msecs-stop 2))
+ (subed-srt-increase-start-time 1)
+ (expect (subed-srt--subtitle-msecs-start 2) :to-be
(subed-srt--subtitle-msecs-stop 2))))
+ (it "when decreasing stop time."
+ (with-temp-buffer
+ (insert mock-srt-data)
+ (subed-srt-jump-to-subtitle-id 2)
+ (subed-srt-decrease-stop-time (-
(subed-srt--subtitle-msecs-stop 2)
+
(subed-srt--subtitle-msecs-start 2)
+ 1))
+ (expect (subed-srt--subtitle-msecs-stop 2) :to-be (+
(subed-srt--subtitle-msecs-start 2) 1))
+ (subed-srt-decrease-stop-time 1)
+ (expect (subed-srt--subtitle-msecs-stop 2) :to-be
(subed-srt--subtitle-msecs-start 2))
+ (subed-srt-decrease-stop-time 1)
+ (expect (subed-srt--subtitle-msecs-stop 2) :to-be
(subed-srt--subtitle-msecs-start 2))))
+ (describe "when increasing stop time"
+ (it "of the last subtitle."
+ (with-temp-buffer
+ (insert mock-srt-data)
+ (subed-srt-jump-to-subtitle-id 3)
+ (subed-srt-increase-stop-time (- (* 99
3600000)
+
(subed-srt--subtitle-msecs-stop 3)))
+ (expect (subed-srt--subtitle-msecs-stop 3)
:to-be (* 99 3600000))
+ (subed-srt-increase-stop-time (* 59 60000))
+ (expect (subed-srt--subtitle-msecs-stop 3)
:to-be (+ (* 99 3600000)
+
(* 59 60000)))
+ (subed-srt-increase-stop-time (* 59 1000))
+ (expect (subed-srt--subtitle-msecs-stop 3)
:to-be (+ (* 99 3600000)
+
(* 59 60000)
+
(* 59 1000)))
+ (subed-srt-increase-stop-time 999)
+ (expect (subed-srt--subtitle-msecs-stop 3)
:to-be (+ (* 99 3600000)
+
(* 59 60000)
+
(* 59 1000)
+
999))))
+ (it "of a non-last subtitle."
+ (with-temp-buffer
+ (insert mock-srt-data)
+ (subed-srt-jump-to-subtitle-id 2)
+ (subed-srt-increase-stop-time (-
(subed-srt--subtitle-msecs-start 3)
+
(subed-srt--subtitle-msecs-stop 2)
+
subed-subtitle-spacing
+ 1))
+ (expect (subed-srt--subtitle-msecs-stop 2)
:to-be (- (subed-srt--subtitle-msecs-start 3)
+
subed-subtitle-spacing
+
1))
+ (subed-srt-increase-stop-time 1)
+ (expect (subed-srt--subtitle-msecs-stop 2)
:to-be (- (subed-srt--subtitle-msecs-start 3)
+
subed-subtitle-spacing))
+ (subed-srt-increase-stop-time 1)
+ (expect (subed-srt--subtitle-msecs-stop 2)
:to-be (- (subed-srt--subtitle-msecs-start 3)
+
subed-subtitle-spacing))))
+ )
+ )
(it "does nothing if no timestamp can be found."
(with-temp-buffer
(insert "foo")
- [nongnu] elpa/subed bf9ceeb 094/389: Reduce word count by 1, (continued)
- [nongnu] elpa/subed bf9ceeb 094/389: Reduce word count by 1, ELPA Syncer, 2021/12/03
- [nongnu] elpa/subed 42199eb 095/389: Workaround for GitHub's lack of support for ~~/path/in/home~, ELPA Syncer, 2021/12/03
- [nongnu] elpa/subed 5c51000 101/389: Call time-adjusted-hook functions with start time, not stop time, ELPA Syncer, 2021/12/03
- [nongnu] elpa/subed 53d1e33 102/389: Fix error when adjusting start/stop time in empty buffer, ELPA Syncer, 2021/12/03
- [nongnu] elpa/subed a0cb0f1 108/389: Keep region active during subtitle movement, ELPA Syncer, 2021/12/03
- [nongnu] elpa/subed 2c7554a 109/389: Wrap subed--for-each-subtitle in atomic-change-group, ELPA Syncer, 2021/12/03
- [nongnu] elpa/subed e792e0f 122/389: Fix test description, ELPA Syncer, 2021/12/03
- [nongnu] elpa/subed 489bbea 130/389: Remove subed-milliseconds-move, ELPA Syncer, 2021/12/03
- [nongnu] elpa/subed a7dda70 137/389: Add subtitle shifting to features, ELPA Syncer, 2021/12/03
- [nongnu] elpa/subed a819a93 139/389: Fix test description, ELPA Syncer, 2021/12/03
- [nongnu] elpa/subed 06851d8 143/389: Prevent overlapping when adjusting subtitle start/stop time,
ELPA Syncer <=
- [nongnu] elpa/subed 651c6de 031/389: Wrap some function bodies in save-match-data, ELPA Syncer, 2021/12/03
- [nongnu] elpa/subed 57c902a 068/389: subed-srt-sanitize: Don't change buffer unless it's necessary, ELPA Syncer, 2021/12/03
- [nongnu] elpa/subed 1571de4 070/389: Use prefix arg to set start/stop time adjustment, ELPA Syncer, 2021/12/03
- [nongnu] elpa/subed f832a1d 075/389: Add more tests for subed-srt-move-to-subtitle-end, ELPA Syncer, 2021/12/03
- [nongnu] elpa/subed 8374498 076/389: README: Split feature list and some rewording, ELPA Syncer, 2021/12/03
- [nongnu] elpa/subed d0708e5 080/389: Fix screenshot, ELPA Syncer, 2021/12/03
- [nongnu] elpa/subed 03cd2bf 097/389: Wrap msecs-to-timestamp in save-match-data, ELPA Syncer, 2021/12/03
- [nongnu] elpa/subed 4960c74 098/389: Make timestamp parsing more robust, ELPA Syncer, 2021/12/03
- [nongnu] elpa/subed 9b95137 104/389: Test subed--for-each-subtitle more thoroughly, ELPA Syncer, 2021/12/03
- [nongnu] elpa/subed ec03689 105/389: Fix subed--for-each-subtitle, ELPA Syncer, 2021/12/03