branch: elpa/subed commit 800d4b3858429ae1399239ca140263073b1781b1 Author: Random User <rnd...@posteo.de> Commit: Random User <rnd...@posteo.de>
Return new start/stop time when adjusting --- subed/subed-srt.el | 30 +++++++----- subed/subed.el | 5 ++ tests/test-subed-srt.el | 123 ++++++++++++++++++++++++++---------------------- 3 files changed, 91 insertions(+), 67 deletions(-) diff --git a/subed/subed-srt.el b/subed/subed-srt.el index dfa837e..37e1715 100644 --- a/subed/subed-srt.el +++ b/subed/subed-srt.el @@ -297,7 +297,8 @@ Return point or nil if there is no previous subtitle." ;;; Manipulation (defun subed-srt--adjust-subtitle-start-relative (msecs) - "Add MSECS milliseconds to start time (use negative value to subtract)." + "Add MSECS milliseconds to start time (use negative value to subtract). +Return new start time in milliseconds or nil if it didn't change." (subed-disable-sync-point-to-player-temporarily) (let* ((msecs-start (subed-srt--subtitle-msecs-start)) (msecs-new (when msecs-start (+ msecs-start msecs))) @@ -311,14 +312,17 @@ Return point or nil if there is no previous subtitle." (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) - (replace-match (subed-srt--msecs-to-timestamp msecs-new)))) - (subed--run-subtitle-time-adjusted-hook)))) + (unless (eq msecs-new msecs-start) + (save-excursion + (subed-srt-jump-to-subtitle-time-start) + (when (looking-at subed-srt--regexp-timestamp) + (replace-match (subed-srt--msecs-to-timestamp msecs-new)) + (subed--run-subtitle-time-adjusted-hook) + msecs-new)))))) (defun subed-srt--adjust-subtitle-stop-relative (msecs) - "Add MSECS milliseconds to stop time (use negative value to subtract)." + "Add MSECS milliseconds to stop time (use negative value to subtract). +Return new stop time in milliseconds or nil if it didn't change." (subed-disable-sync-point-to-player-temporarily) (let* ((msecs-stop (subed-srt--subtitle-msecs-stop)) (msecs-new (when msecs-stop (+ msecs-stop msecs))) @@ -332,11 +336,13 @@ Return point or nil if there is no previous subtitle." (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) - (replace-match (subed-srt--msecs-to-timestamp msecs-new)))) - (subed--run-subtitle-time-adjusted-hook)))) + (unless (eq msecs-new msecs-stop) + (save-excursion + (subed-srt-jump-to-subtitle-time-stop) + (when (looking-at subed-srt--regexp-timestamp) + (replace-match (subed-srt--msecs-to-timestamp msecs-new)) + (subed--run-subtitle-time-adjusted-hook) + msecs-new)))))) (defun subed-srt-subtitle-insert (&optional arg) "Insert subtitle(s). diff --git a/subed/subed.el b/subed/subed.el index 07bc00a..29573c1 100644 --- a/subed/subed.el +++ b/subed/subed.el @@ -180,6 +180,8 @@ Before BODY is run, point is placed on the subtitle's ID." "Add `subed-milliseconds-adjust' milliseconds to start time of current subtitle. +Return new start time in milliseconds or nil if it didn't change. + If a prefix argument is given, it is used to set `subed-milliseconds-adjust' before moving subtitles. If the prefix argument is given but not numerical, @@ -198,6 +200,7 @@ Example usage: (defun subed-decrease-start-time (&optional arg) "Subtract `subed-milliseconds-adjust' milliseconds from start time of current subtitle. +Return new start time in milliseconds or nil if it didn't change. See also `subed-increase-start-time'." (interactive "P") (subed--adjust-subtitle-start-relative (* -1 (subed--get-milliseconds-adjust arg)))) @@ -205,6 +208,7 @@ See also `subed-increase-start-time'." (defun subed-increase-stop-time (&optional arg) "Add `subed-milliseconds-adjust' milliseconds to stop time of current subtitle. +Return new stop time in milliseconds or nil if it didn't change. See also `subed-increase-start-time'." (interactive "P") (subed--adjust-subtitle-stop-relative (subed--get-milliseconds-adjust arg))) @@ -212,6 +216,7 @@ See also `subed-increase-start-time'." (defun subed-decrease-stop-time (&optional arg) "Subtract `subed-milliseconds-adjust' milliseconds from stop time of current subtitle. +Return new stop time in milliseconds or nil if it didn't change. See also `subed-increase-start-time'." (interactive "P") (subed--adjust-subtitle-stop-relative (* -1 (subed--get-milliseconds-adjust arg)))) diff --git a/tests/test-subed-srt.el b/tests/test-subed-srt.el index 3b4004f..90e68c1 100644 --- a/tests/test-subed-srt.el +++ b/tests/test-subed-srt.el @@ -611,71 +611,71 @@ Baz. (add-hook 'subed-subtitle-time-adjusted-hook 'foo) (with-temp-buffer (insert mock-srt-data) - (subed-increase-start-time) + (expect (subed-increase-start-time) :to-equal 183550) (expect 'foo :to-have-been-called-with 3 183550) (expect 'foo :to-have-been-called-times 1) (subed-srt-jump-to-subtitle-id 1) - (subed-increase-stop-time) + (expect (subed-increase-stop-time) :to-equal 65223) (expect 'foo :to-have-been-called-with 1 61000) (expect 'foo :to-have-been-called-times 2) (subed-srt-jump-to-subtitle-end 2) - (subed-decrease-start-time) + (expect (subed-decrease-start-time) :to-equal 122134) (expect 'foo :to-have-been-called-with 2 122134) (expect 'foo :to-have-been-called-times 3) (subed-srt-jump-to-subtitle-text 3) - (subed-decrease-stop-time 100) + (expect (subed-decrease-stop-time) :to-equal 195400) (expect 'foo :to-have-been-called-with 3 183550) (expect 'foo :to-have-been-called-times 4)))) (it "adjusts the start/stop time." (with-temp-buffer (insert mock-srt-data) (subed-srt-jump-to-subtitle-id 1) - (subed-increase-start-time) + (expect (subed-increase-start-time) :to-equal 61100) (expect (save-excursion (subed-srt-jump-to-subtitle-time-start) (thing-at-point 'line)) :to-equal "00:01:01,100 --> 00:01:05,123\n") - (subed-decrease-start-time) - (subed-decrease-start-time) + (expect (subed-decrease-start-time) :to-equal 61000) + (expect (subed-decrease-start-time) :to-equal 60900) (expect (save-excursion (subed-srt-jump-to-subtitle-time-start) (thing-at-point 'line)) :to-equal "00:01:00,900 --> 00:01:05,123\n") - (subed-increase-stop-time) - (subed-increase-stop-time) + (expect (subed-increase-stop-time) :to-equal 65223) + (expect (subed-increase-stop-time) :to-equal 65323) (expect (save-excursion (subed-srt-jump-to-subtitle-time-start) (thing-at-point 'line)) :to-equal "00:01:00,900 --> 00:01:05,323\n") - (subed-decrease-stop-time) + (expect (subed-decrease-stop-time) :to-equal 65223) (expect (save-excursion (subed-srt-jump-to-subtitle-time-start) (thing-at-point 'line)) :to-equal "00:01:00,900 --> 00:01:05,223\n"))) (it "adjusts the start/stop time if milliseconds lack digits." (with-temp-buffer (insert mock-srt-data) (subed-srt-jump-to-subtitle-id 3) - (subed-increase-start-time 200) - (subed-decrease-start-time 100) + (expect (subed-increase-start-time 200) :to-equal 183650) + (expect (subed-decrease-start-time 100) :to-equal 183550) (expect (save-excursion (subed-srt-jump-to-subtitle-time-start) (thing-at-point 'line)) :to-equal "00:03:03,550 --> 00:03:15,5\n") - (subed-increase-stop-time 100) - (subed-decrease-stop-time 200) + (expect (subed-increase-stop-time 100) :to-equal 195600) + (expect (subed-decrease-stop-time 200) :to-equal 195400) (expect (save-excursion (subed-srt-jump-to-subtitle-time-stop) (thing-at-point 'line)) :to-equal "00:03:03,550 --> 00:03:15,400\n"))) (it "sets the number of seconds if given an argument." (with-temp-buffer (insert mock-srt-data) (subed-srt-jump-to-subtitle-id 1) - (subed-increase-start-time 200) - (subed-increase-start-time) - (subed-increase-start-time) + (expect (subed-increase-start-time 200) :to-equal 61200) + (expect (subed-increase-start-time) :to-equal 61400) + (expect (subed-increase-start-time) :to-equal 61600) (expect (save-excursion (subed-srt-jump-to-subtitle-time-start) (thing-at-point 'line)) :to-equal "00:01:01,600 --> 00:01:05,123\n") - (subed-decrease-start-time 50) - (subed-decrease-start-time) + (expect (subed-decrease-start-time 50) :to-be 61550) + (expect (subed-decrease-start-time) :to-be 61500) (expect (save-excursion (subed-srt-jump-to-subtitle-time-start) (thing-at-point 'line)) :to-equal "00:01:01,500 --> 00:01:05,123\n") - (subed-decrease-stop-time 1000) - (subed-decrease-stop-time) - (subed-decrease-stop-time) + (expect (subed-decrease-stop-time 1000) :to-be 64123) + (expect (subed-decrease-stop-time) :to-be 63123) + (expect (subed-decrease-stop-time) :to-be 62123) (expect (save-excursion (subed-srt-jump-to-subtitle-time-start) (thing-at-point 'line)) :to-equal "00:01:01,500 --> 00:01:02,123\n") - (subed-increase-stop-time 2000) - (subed-increase-stop-time) + (expect (subed-increase-stop-time 2000) :to-be 64123) + (expect (subed-increase-stop-time) :to-be 66123) (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" @@ -684,27 +684,30 @@ Baz. (with-temp-buffer (insert mock-srt-data) (subed-srt-jump-to-subtitle-id 1) - (subed-decrease-start-time 60999) + (expect (subed-decrease-start-time 60999) :to-be 1) (expect (subed-srt--subtitle-msecs-start) :to-be 1) - (subed-decrease-start-time 1) + (expect (subed-decrease-start-time 1) :to-be 0) (expect (subed-srt--subtitle-msecs-start) :to-be 0) - (subed-decrease-start-time 1) + (expect (subed-decrease-start-time 1) :to-be nil) (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-decrease-start-time (- (subed-srt--subtitle-msecs-start 2) - (subed-srt--subtitle-msecs-stop 1) - subed-subtitle-spacing - 1)) + (expect (subed-decrease-start-time (- (subed-srt--subtitle-msecs-start 2) + (subed-srt--subtitle-msecs-stop 1) + subed-subtitle-spacing + 1)) :to-be (+ (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-decrease-start-time 1) + (expect (subed-decrease-start-time 1) :to-be (+ (subed-srt--subtitle-msecs-stop 1) + subed-subtitle-spacing)) (expect (subed-srt--subtitle-msecs-start) :to-be (+ (subed-srt--subtitle-msecs-stop 1) subed-subtitle-spacing)) - (subed-decrease-start-time 1) + (expect (subed-decrease-start-time 1) :to-be nil) (expect (subed-srt--subtitle-msecs-start) :to-be (+ (subed-srt--subtitle-msecs-stop 1) subed-subtitle-spacing)))) ) @@ -712,21 +715,21 @@ Baz. (with-temp-buffer (insert mock-srt-data) (subed-srt-jump-to-subtitle-id 2) - (subed-increase-start-time (- (subed-srt--subtitle-msecs-stop 2) - (subed-srt--subtitle-msecs-start 2) - 1)) + (expect (subed-increase-start-time (- (subed-srt--subtitle-msecs-stop 2) + (subed-srt--subtitle-msecs-start 2) + 1)) :to-be (- (subed-srt--subtitle-msecs-stop 2) 1)) (expect (subed-srt--subtitle-msecs-start 2) :to-be (- (subed-srt--subtitle-msecs-stop 2) 1)) - (subed-increase-start-time 1) + (expect (subed-increase-start-time 1) :to-be (subed-srt--subtitle-msecs-stop 2)) (expect (subed-srt--subtitle-msecs-start 2) :to-be (subed-srt--subtitle-msecs-stop 2)) - (subed-increase-start-time 1) + (expect (subed-increase-start-time 1) :to-be nil) (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-decrease-stop-time (- (subed-srt--subtitle-msecs-stop 2) - (subed-srt--subtitle-msecs-start 2) - 1)) + (subed-srt--subtitle-msecs-start 2) + 1)) (expect (subed-srt--subtitle-msecs-stop 2) :to-be (+ (subed-srt--subtitle-msecs-start 2) 1)) (subed-decrease-stop-time 1) (expect (subed-srt--subtitle-msecs-stop 2) :to-be (subed-srt--subtitle-msecs-start 2)) @@ -737,17 +740,24 @@ Baz. (with-temp-buffer (insert mock-srt-data) (subed-srt-jump-to-subtitle-id 3) - (subed-increase-stop-time (- (* 99 3600000) - (subed-srt--subtitle-msecs-stop 3))) + (expect (subed-increase-stop-time (- (* 99 3600000) + (subed-srt--subtitle-msecs-stop 3))) + :to-be (* 99 3600000)) (expect (subed-srt--subtitle-msecs-stop 3) :to-be (* 99 3600000)) - (subed-increase-stop-time (* 59 60000)) + (expect (subed-increase-stop-time (* 59 60000)) :to-be (+ (* 99 3600000) + (* 59 60000))) (expect (subed-srt--subtitle-msecs-stop 3) :to-be (+ (* 99 3600000) (* 59 60000))) - (subed-increase-stop-time (* 59 1000)) + (expect (subed-increase-stop-time (* 59 1000)) :to-be (+ (* 99 3600000) + (* 59 60000) + (* 59 1000))) (expect (subed-srt--subtitle-msecs-stop 3) :to-be (+ (* 99 3600000) (* 59 60000) (* 59 1000))) - (subed-increase-stop-time 999) + (expect (subed-increase-stop-time 999) :to-be (+ (* 99 3600000) + (* 59 60000) + (* 59 1000) + 999)) (expect (subed-srt--subtitle-msecs-stop 3) :to-be (+ (* 99 3600000) (* 59 60000) (* 59 1000) @@ -756,17 +766,20 @@ Baz. (with-temp-buffer (insert mock-srt-data) (subed-srt-jump-to-subtitle-id 2) - (subed-increase-stop-time (- (subed-srt--subtitle-msecs-start 3) - (subed-srt--subtitle-msecs-stop 2) - subed-subtitle-spacing - 1)) + (expect (subed-increase-stop-time (- (subed-srt--subtitle-msecs-start 3) + (subed-srt--subtitle-msecs-stop 2) + subed-subtitle-spacing + 1)) :to-be (- (subed-srt--subtitle-msecs-start 3) + subed-subtitle-spacing + 1)) (expect (subed-srt--subtitle-msecs-stop 2) :to-be (- (subed-srt--subtitle-msecs-start 3) subed-subtitle-spacing 1)) - (subed-increase-stop-time 1) + (expect (subed-increase-stop-time 1) :to-be (- (subed-srt--subtitle-msecs-start 3) + subed-subtitle-spacing)) (expect (subed-srt--subtitle-msecs-stop 2) :to-be (- (subed-srt--subtitle-msecs-start 3) subed-subtitle-spacing)) - (subed-increase-stop-time 1) + (expect (subed-increase-stop-time 1) :to-be nil) (expect (subed-srt--subtitle-msecs-stop 2) :to-be (- (subed-srt--subtitle-msecs-start 3) subed-subtitle-spacing)))) ) @@ -775,13 +788,13 @@ Baz. (with-temp-buffer (insert "foo") (goto-char (point-min)) - (subed-increase-start-time) + (expect (subed-increase-start-time) :to-be nil) (expect (buffer-string) :to-equal "foo") - (subed-decrease-start-time) + (expect (subed-decrease-start-time) :to-be nil) (expect (buffer-string) :to-equal "foo") - (subed-increase-stop-time) + (expect (subed-increase-stop-time) :to-be nil) (expect (buffer-string) :to-equal "foo") - (subed-decrease-stop-time) + (expect (subed-decrease-stop-time) :to-be nil) (expect (buffer-string) :to-equal "foo"))) )