branch: elpa/subed commit a9a6835ef62f70a42609d6663568ee18698c5f38 Author: Random User <rnd...@posteo.de> Commit: Random User <rnd...@posteo.de>
Ensure subtitle length stays the same when moving --- subed/subed.el | 11 +++++++++-- tests/test-subed.el | 52 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 61 insertions(+), 2 deletions(-) diff --git a/subed/subed.el b/subed/subed.el index 723ee8b..0e5cc7e 100644 --- a/subed/subed.el +++ b/subed/subed.el @@ -234,8 +234,15 @@ After subtitles are moved is done, replay the first moved subtitle if replaying is enabled." (subed--with-subtitle-replay-disabled (subed--for-each-subtitle beg end - (subed--adjust-subtitle-start msecs) - (subed--adjust-subtitle-stop msecs))) + (if (> msecs 0) + ;; Moving subtitles forward may reduce MSECS if there isn't enough + ;; room for the full movement. Using the MSECS the stop time was + ;; moved to move the start time ensures that subtitle length doesn't + ;; change. + (let ((msecs (subed--adjust-subtitle-stop msecs))) + (when msecs (subed--adjust-subtitle-start msecs))) + (let ((msecs (subed--adjust-subtitle-start msecs))) + (when msecs (subed--adjust-subtitle-stop msecs)))))) (when (subed-replay-adjusted-subtitle-p) (save-excursion (when beg (goto-char beg)) diff --git a/tests/test-subed.el b/tests/test-subed.el index ba83edc..885bb8f 100644 --- a/tests/test-subed.el +++ b/tests/test-subed.el @@ -94,6 +94,58 @@ (subed-move-subtitle-backward 100) (expect (subed--subtitle-msecs-start) :to-equal orig-start) (expect (subed--subtitle-msecs-stop) :to-equal orig-stop))))) + (it "adjusts start and stop time by the same amount when adding fails." + (with-temp-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")) + (subed-jump-to-subtitle-id 1) + (subed-move-subtitle-forward 1000) + (expect (subed--subtitle-msecs-start) :to-equal 1300) + (expect (subed--subtitle-msecs-stop) :to-equal 1900))) + (it "adjusts start and stop time by the same amount when subtracting fails." + (with-temp-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")) + (subed-jump-to-subtitle-id 2) + (subed-move-subtitle-backward 1000) + (expect (subed--subtitle-msecs-start) :to-equal 1700) + (expect (subed--subtitle-msecs-stop) :to-equal 2700))) + (it "does not adjust start time if adjusting stop time fails." + (with-temp-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")) + (subed-jump-to-subtitle-id 1) + (expect (subed-move-subtitle-forward 1) :to-be nil) + (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))) + (it "does not adjust stop time if adjusting start time fails." + (with-temp-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")) + (subed-jump-to-subtitle-id 2) + (expect (subed-move-subtitle-backward 1) :to-be nil) + (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))) (describe "adjusts subtitles in the active region," (it "excluding the first subtitle." (with-temp-buffer