[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[nongnu] elpa/subed 9bf3fcc 213/389: Make timestamp adjustment limitatio
From: |
ELPA Syncer |
Subject: |
[nongnu] elpa/subed 9bf3fcc 213/389: Make timestamp adjustment limitations generic |
Date: |
Fri, 3 Dec 2021 11:00:28 -0500 (EST) |
branch: elpa/subed
commit 9bf3fcc4d51d48687b99151d318ce2ccb42c55e2
Author: Random User <rndusr@posteo.de>
Commit: Random User <rndusr@posteo.de>
Make timestamp adjustment limitations generic
The subtitle format implementation now has to only provide
subed-*--set-subtitle-time-start/stop functions, which simply replace a
timestamp with another one without checking anything.
All the complexity is now in the generic functions
subed-adjust-subtitle-time-start/stop to make adding support for other
subtitle
formats easier.
---
subed/subed-srt.el | 112 ++++-------------
subed/subed.el | 118 +++++++++++++++---
tests/test-subed-srt.el | 314 ++++++++----------------------------------------
tests/test-subed.el | 273 ++++++++++++++++++++++++++++++++++++++++-
4 files changed, 448 insertions(+), 369 deletions(-)
diff --git a/subed/subed-srt.el b/subed/subed-srt.el
index 7b9e77d..d26ea62 100644
--- a/subed/subed-srt.el
+++ b/subed/subed-srt.el
@@ -315,93 +315,31 @@ Return point or nil if there is no previous subtitle."
;;; Manipulation
-(defun subed-srt--adjust-subtitle-start (msecs &optional
- ignore-negative-duration
- ignore-spacing)
- "Add MSECS milliseconds to start time (use negative value to subtract).
-
-Unless IGNORE-NEGATIVE-DURATION is non-nil, reduce MSECS so that
-the start time isn't larger than the stop time. Zero-length
-subtiltes are always allowed.
-
-Unless IGNORE-SPACING is non-nil, if the adjustment would result
-in gaps between subtitles being smaller than
-`subed-subtitle-spacing', reduce MSECS so that this doesn't
-happen.
-
-Return the number of milliseconds the start time was adjusted or
-nil if nothing changed."
- (subed-disable-sync-point-to-player-temporarily)
- (let* ((msecs-start (subed-srt--subtitle-msecs-start))
- (msecs-new (when msecs-start (+ msecs-start msecs))))
- (when msecs-new
- (if (> msecs 0)
- ;; Adding to start time
- (unless ignore-negative-duration
- (let ((msecs-stop (subed-srt--subtitle-msecs-stop)))
- (setq msecs-new (min msecs-new msecs-stop))))
- ;; Subtracting from start time
- (unless ignore-spacing
- (let* ((msecs-prev-stop (save-excursion (when
(subed-srt--backward-subtitle-id)
-
(subed-srt--subtitle-msecs-stop))))
- (msecs-min (if msecs-prev-stop
- (+ msecs-prev-stop subed-subtitle-spacing) 0)))
- (when msecs-min
- (setq msecs-new (max msecs-new msecs-min))))))
- ;; msecs-new must be bigger than the current start time if we are adding
- ;; or smaller if we are subtracting.
- (when (or (and (> msecs 0) (> msecs-new msecs-start)) ;; Adding
- (and (< msecs 0) (< msecs-new msecs-start))) ;; Subtracting
- (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 msecs-start)))))))
-
-(defun subed-srt--adjust-subtitle-stop (msecs &optional
- ignore-negative-duration
- ignore-spacing)
- "Add MSECS milliseconds to stop time (use negative value to subtract).
-
-Unless IGNORE-NEGATIVE-DURATION is non-nil, increase MSECS so
-that the stop time isn't smaller than the start time.
-Zero-length subtiltes are always allowed.
-
-Unless IGNORE-SPACING is non-nil, if the adjustment would result
-in gaps between subtitles being smaller than
-`subed-subtitle-spacing', reduce MSECS so that this doesn't
-happen.
-
-Return the number of milliseconds the stop time was adjusted or
-nil if nothing changed."
- (subed-disable-sync-point-to-player-temporarily)
- (let* ((msecs-stop (subed-srt--subtitle-msecs-stop))
- (msecs-new (when msecs-stop (+ msecs-stop msecs))))
- (when msecs-new
- (if (> msecs 0)
- ;; Adding to stop time
- (unless ignore-spacing
- (let* ((msecs-next-start (save-excursion (when
(subed-srt--forward-subtitle-id)
-
(subed-srt--subtitle-msecs-start))))
- (msecs-max (when msecs-next-start
- (- msecs-next-start subed-subtitle-spacing))))
- (when msecs-max
- (setq msecs-new (min msecs-new msecs-max)))))
- ;; Subtracting from stop time
- (unless ignore-negative-duration
- (let ((msecs-start (subed-srt--subtitle-msecs-start)))
- (setq msecs-new (max msecs-new msecs-start)))))
- ;; msecs-new must be bigger than the current stop time if we are adding
or
- ;; smaller if we are subtracting.
- (when (or (and (> msecs 0) (> msecs-new msecs-stop)) ;; Adding
- (and (< msecs 0) (< msecs-new msecs-stop))) ;; Subtracting
- (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 msecs-stop)))))))
+(defun subed-srt--set-subtitle-time-start (msecs &optional sub-id)
+ "Set subtitle start time to MSECS milliseconds.
+
+If SUB-ID is not given, set the start of the current subtitle.
+
+Return the new subtitle start time in milliseconds."
+ (save-excursion
+ (when (or (not sub-id)
+ (and sub-id (subed-srt--jump-to-subtitle-id sub-id)))
+ (subed-srt--jump-to-subtitle-time-start)
+ (when (looking-at subed-srt--regexp-timestamp)
+ (replace-match (subed-srt--msecs-to-timestamp msecs))))))
+
+(defun subed-srt--set-subtitle-time-stop (msecs &optional sub-id)
+ "Set subtitle stop time to MSECS milliseconds.
+
+If SUB-ID is not given, set the stop of the current subtitle.
+
+Return the new subtitle stop time in milliseconds."
+ (save-excursion
+ (when (or (not sub-id)
+ (and sub-id (subed-srt--jump-to-subtitle-id sub-id)))
+ (subed-srt--jump-to-subtitle-time-stop)
+ (when (looking-at subed-srt--regexp-timestamp)
+ (replace-match (subed-srt--msecs-to-timestamp msecs))))))
(defun subed-srt--subtitle-insert (&optional arg)
"Insert subtitle(s).
diff --git a/subed/subed.el b/subed/subed.el
index 7ae3630..61d6b71 100644
--- a/subed/subed.el
+++ b/subed/subed.el
@@ -43,8 +43,8 @@
(defalias 'subed-subtitle-msecs-stop #'subed-srt--subtitle-msecs-stop)
(defalias 'subed-subtitle-text #'subed-srt--subtitle-text)
(defalias 'subed-subtitle-relative-point #'subed-srt--subtitle-relative-point)
-(defalias 'subed-adjust-subtitle-start #'subed-srt--adjust-subtitle-start)
-(defalias 'subed-adjust-subtitle-stop #'subed-srt--adjust-subtitle-stop)
+(defalias 'subed-set-subtitle-time-start #'subed-srt--set-subtitle-time-start)
+(defalias 'subed-set-subtitle-time-stop #'subed-srt--set-subtitle-time-stop)
(defalias 'subed-jump-to-subtitle-id #'subed-srt--jump-to-subtitle-id)
(defalias 'subed-jump-to-subtitle-time-start
#'subed-srt--jump-to-subtitle-time-start)
@@ -190,6 +190,88 @@ Before BODY is run, point is placed on the subtitle's ID."
;;; Adjusting start/stop time individually
+(defun subed-adjust-subtitle-time-start (msecs &optional
+ ignore-negative-duration
+ ignore-spacing)
+ "Add MSECS milliseconds to start time (use negative value to subtract).
+
+Unless IGNORE-NEGATIVE-DURATION is non-nil, reduce MSECS so that
+the start time isn't larger than the stop time. Zero-length
+subtiltes are always allowed.
+
+Unless IGNORE-SPACING is non-nil, if the adjustment would result
+in gaps between subtitles being smaller than
+`subed-subtitle-spacing', reduce MSECS so that this doesn't
+happen.
+
+Return the number of milliseconds the start time was adjusted or
+nil if nothing changed."
+ (subed-disable-sync-point-to-player-temporarily)
+ (let* ((msecs-start (subed-subtitle-msecs-start))
+ (msecs-new (when msecs-start (+ msecs-start msecs))))
+ (when msecs-new
+ (if (> msecs 0)
+ ;; Adding to start time
+ (unless ignore-negative-duration
+ (let ((msecs-stop (subed-subtitle-msecs-stop)))
+ (setq msecs-new (min msecs-new msecs-stop))))
+ ;; Subtracting from start time
+ (unless ignore-spacing
+ (let* ((msecs-prev-stop (save-excursion (when
(subed-backward-subtitle-id)
+
(subed-subtitle-msecs-stop))))
+ (msecs-min (if msecs-prev-stop
+ (+ msecs-prev-stop subed-subtitle-spacing) 0)))
+ (when msecs-min
+ (setq msecs-new (max msecs-new msecs-min))))))
+ ;; msecs-new must be bigger than the current start time if we are adding
+ ;; or smaller if we are subtracting.
+ (when (or (and (> msecs 0) (> msecs-new msecs-start)) ;; Adding
+ (and (< msecs 0) (< msecs-new msecs-start))) ;; Subtracting
+ (subed-set-subtitle-time-start msecs-new)
+ (subed--run-subtitle-time-adjusted-hook)
+ (- msecs-new msecs-start)))))
+
+(defun subed-adjust-subtitle-time-stop (msecs &optional
+ ignore-negative-duration
+ ignore-spacing)
+ "Add MSECS milliseconds to stop time (use negative value to subtract).
+
+Unless IGNORE-NEGATIVE-DURATION is non-nil, increase MSECS so
+that the stop time isn't smaller than the start time.
+Zero-length subtiltes are always allowed.
+
+Unless IGNORE-SPACING is non-nil, if the adjustment would result
+in gaps between subtitles being smaller than
+`subed-subtitle-spacing', reduce MSECS so that this doesn't
+happen.
+
+Return the number of milliseconds the stop time was adjusted or
+nil if nothing changed."
+ (subed-disable-sync-point-to-player-temporarily)
+ (let* ((msecs-stop (subed-subtitle-msecs-stop))
+ (msecs-new (when msecs-stop (+ msecs-stop msecs))))
+ (when msecs-new
+ (if (> msecs 0)
+ ;; Adding to stop time
+ (unless ignore-spacing
+ (let* ((msecs-next-start (save-excursion (when
(subed-forward-subtitle-id)
+
(subed-subtitle-msecs-start))))
+ (msecs-max (when msecs-next-start
+ (- msecs-next-start subed-subtitle-spacing))))
+ (when msecs-max
+ (setq msecs-new (min msecs-new msecs-max)))))
+ ;; Subtracting from stop time
+ (unless ignore-negative-duration
+ (let ((msecs-start (subed-subtitle-msecs-start)))
+ (setq msecs-new (max msecs-new msecs-start)))))
+ ;; msecs-new must be bigger than the current stop time if we are adding
or
+ ;; smaller if we are subtracting.
+ (when (or (and (> msecs 0) (> msecs-new msecs-stop)) ;; Adding
+ (and (< msecs 0) (< msecs-new msecs-stop))) ;; Subtracting
+ (subed-set-subtitle-time-stop msecs-new)
+ (subed--run-subtitle-time-adjusted-hook)
+ (- msecs-new msecs-stop)))))
+
(defun subed-increase-start-time (&optional arg)
"Add `subed-milliseconds-adjust' milliseconds to start time.
@@ -208,7 +290,7 @@ Example usage:
\\[universal-argument] \\[subed-increase-start-time] Increase start
time by 100ms (the default)
\\[subed-increase-start-time] Increase start time by 100ms (the
default) again"
(interactive "P")
- (subed-adjust-subtitle-start (subed-get-milliseconds-adjust arg)))
+ (subed-adjust-subtitle-time-start (subed-get-milliseconds-adjust arg)))
(defun subed-decrease-start-time (&optional arg)
"Subtract `subed-milliseconds-adjust' milliseconds from start time.
@@ -217,7 +299,7 @@ Return new start time in milliseconds or nil if it didn't
change.
See `subed-increase-start-time' about ARG."
(interactive "P")
- (subed-adjust-subtitle-start (* -1 (subed-get-milliseconds-adjust arg))))
+ (subed-adjust-subtitle-time-start (* -1 (subed-get-milliseconds-adjust
arg))))
(defun subed-increase-stop-time (&optional arg)
"Add `subed-milliseconds-adjust' milliseconds to stop time.
@@ -226,7 +308,7 @@ Return new stop time in milliseconds or nil if it didn't
change.
See `subed-increase-start-time' about ARG."
(interactive "P")
- (subed-adjust-subtitle-stop (subed-get-milliseconds-adjust arg)))
+ (subed-adjust-subtitle-time-stop (subed-get-milliseconds-adjust arg)))
(defun subed-decrease-stop-time (&optional arg)
"Subtract `subed-milliseconds-adjust' milliseconds from stop time.
@@ -235,7 +317,7 @@ Return new stop time in milliseconds or nil if it didn't
change.
See `subed-increase-start-time' about ARG."
(interactive "P")
- (subed-adjust-subtitle-stop (* -1 (subed-get-milliseconds-adjust arg))))
+ (subed-adjust-subtitle-time-stop (* -1 (subed-get-milliseconds-adjust arg))))
(defun subed-copy-player-pos-to-start-time ()
"Replace current subtitle's start timestamp with mpv player's current
timestamp."
@@ -272,19 +354,19 @@ When moving subtitles backward (MSECS < 0), it's the same
thing
but we move the start time first."
(if (> msecs 0)
(lambda (msecs &optional ignore-limits)
- (let ((msecs (subed-adjust-subtitle-stop msecs
- :ignore-negative-duration
- ignore-limits)))
- (when msecs (subed-adjust-subtitle-start msecs
- :ignore-negative-duration
- ignore-limits))))
+ (let ((msecs (subed-adjust-subtitle-time-stop msecs
+ :ignore-negative-duration
+ ignore-limits)))
+ (when msecs (subed-adjust-subtitle-time-start msecs
+
:ignore-negative-duration
+ ignore-limits))))
(lambda (msecs &optional ignore-limits)
- (let ((msecs (subed-adjust-subtitle-start msecs
- :ignore-negative-duration
- ignore-limits)))
- (when msecs (subed-adjust-subtitle-stop msecs
- :ignore-negative-duration
- ignore-limits))))))
+ (let ((msecs (subed-adjust-subtitle-time-start msecs
+ :ignore-negative-duration
+ ignore-limits)))
+ (when msecs (subed-adjust-subtitle-time-stop msecs
+ :ignore-negative-duration
+ ignore-limits))))))
(defun subed--move-current-subtitle (msecs)
"Move subtitle on point by MSECS milliseconds."
diff --git a/tests/test-subed-srt.el b/tests/test-subed-srt.el
index 168cd85..b19df2d 100644
--- a/tests/test-subed-srt.el
+++ b/tests/test-subed-srt.el
@@ -105,6 +105,14 @@ Baz.
(subed-srt--jump-to-subtitle-text 2)
(expect (subed-srt--subtitle-msecs-start) :to-equal (+ (* 2 60000) (*
2 1000) 234))
(expect (subed-srt--subtitle-msecs-stop) :to-equal (+ (* 2 60000) (*
10 1000) 345))))
+ (it "handles lack of digits in milliseconds gracefully."
+ (with-temp-buffer
+ (insert mock-srt-data)
+ (subed-jump-to-subtitle-id 3)
+ (expect (save-excursion (subed-jump-to-subtitle-time-start)
+ (thing-at-point 'line)) :to-equal "00:03:03,45
--> 00:03:15,5\n")
+ (expect (subed-srt--subtitle-msecs-start) :to-equal (+ (* 3 60 1000)
(* 3 1000) 450))
+ (expect (subed-srt--subtitle-msecs-stop) :to-equal (+ (* 3 60 1000)
(* 15 1000) 500))))
(it "returns nil if time can't be found."
(with-temp-buffer
(expect (subed-srt--subtitle-msecs-start) :to-be nil)
@@ -604,285 +612,67 @@ Baz.
)
)
-(describe "Adjusting subtitle start/stop time"
- :var (subed-subtitle-time-adjusted-hook)
- (it "runs the appropriate hook."
- (let ((foo (setf (symbol-function 'foo) (lambda (msecs) ()))))
- (spy-on 'foo)
- (add-hook 'subed-subtitle-time-adjusted-hook 'foo)
- (with-temp-buffer
- (insert mock-srt-data)
- (subed-srt--jump-to-subtitle-id 1)
- (subed-srt--adjust-subtitle-start 100)
- (expect 'foo :to-have-been-called-with 61100)
- (expect 'foo :to-have-been-called-times 1)
- (subed-srt--adjust-subtitle-stop 123)
- (expect 'foo :to-have-been-called-with 61100)
- (expect 'foo :to-have-been-called-times 2)
- (subed-srt--jump-to-subtitle-id 2)
- (subed-srt--adjust-subtitle-start 6)
- (expect 'foo :to-have-been-called-with 122240)
- (expect 'foo :to-have-been-called-times 3)
- (subed-srt--adjust-subtitle-stop 123)
- (expect 'foo :to-have-been-called-with 122240)
- (expect 'foo :to-have-been-called-times 4))
- (remove-hook 'subed-subtitle-time-adjusted-hook 'foo)))
- (it "adjusts the start/stop time."
- (with-temp-buffer
- (insert mock-srt-data)
- (subed-srt--jump-to-subtitle-id 1)
- (expect (subed-srt--adjust-subtitle-start 100) :to-equal 100)
- (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")
- (expect (subed-srt--adjust-subtitle-start -200) :to-equal -200)
- (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")
- (expect (subed-srt--adjust-subtitle-stop 200) :to-equal 200)
- (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")
- (expect (subed-srt--adjust-subtitle-stop -100) :to-equal -100)
- (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)
- (expect (subed-srt--adjust-subtitle-start 200) :to-equal 200)
- (expect (subed-srt--adjust-subtitle-start -100) :to-equal -100)
- (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")
- (expect (subed-srt--adjust-subtitle-stop 100) :to-equal 100)
- (expect (subed-srt--adjust-subtitle-stop -200) :to-equal -200)
- (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")))
- (describe "enforces limits"
- (describe "when decreasing start time"
- (it "of the first subtitle."
- (with-temp-buffer
- (insert (concat "1\n"
- "00:00:01,000 --> 00:00:02,000\n"
- "Foo.\n"))
- (expect (subed-srt--adjust-subtitle-start -999) :to-be -999)
- (expect (subed-srt--subtitle-msecs-start) :to-be 1)
- (expect (subed-srt--adjust-subtitle-start -1) :to-be -1)
- (expect (subed-srt--subtitle-msecs-start) :to-be 0)
- (expect (subed-srt--adjust-subtitle-start -1) :to-be nil)
- (expect (subed-srt--subtitle-msecs-start) :to-be 0)))
- (it "of a non-first subtitle."
- (with-temp-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"))
- (subed-srt--jump-to-subtitle-id 2)
- (expect (subed-srt--adjust-subtitle-start -899) :to-be -899)
- (expect (subed-srt--subtitle-msecs-start) :to-be 2101)
- (expect (subed-srt--adjust-subtitle-start -1) :to-be -1)
- (expect (subed-srt--subtitle-msecs-start) :to-be 2100)
- (expect (subed-srt--adjust-subtitle-start -1) :to-be nil)
- (expect (subed-srt--subtitle-msecs-start) :to-be 2100)))
- )
- (it "when increasing start time."
- (with-temp-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"))
- (insert mock-srt-data)
- (subed-srt--jump-to-subtitle-id 2)
- (expect (subed-srt--adjust-subtitle-start 999) :to-be 999)
- (expect (subed-srt--subtitle-msecs-start) :to-be 3999)
- (expect (subed-srt--adjust-subtitle-start 1) :to-be 1)
- (expect (subed-srt--subtitle-msecs-start) :to-be 4000)
- (expect (subed-srt--adjust-subtitle-start 1) :to-be nil)
- (expect (subed-srt--subtitle-msecs-start) :to-be 4000)))
- (it "when decreasing stop time."
- (with-temp-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"))
- (subed-srt--jump-to-subtitle-id 2)
- (expect (subed-srt--adjust-subtitle-stop -999) :to-be -999)
- (expect (subed-srt--subtitle-msecs-stop) :to-be 3001)
- (expect (subed-srt--adjust-subtitle-stop -1) :to-be -1)
- (expect (subed-srt--subtitle-msecs-stop) :to-be 3000)
- (expect (subed-srt--adjust-subtitle-stop -1) :to-be nil)
- (expect (subed-srt--subtitle-msecs-stop) :to-be 3000)))
- (describe "when increasing stop time"
- (it "of the last subtitle."
- (with-temp-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"))
- (subed-srt--jump-to-subtitle-id 3)
- (expect (subed-srt--adjust-subtitle-stop 1000000):to-be 1000000)
- (expect (subed-srt--subtitle-msecs-stop) :to-be 1004000)))
- (it "of a non-last subtitle."
- (with-temp-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"))
- (subed-srt--jump-to-subtitle-id 1)
- (expect (subed-srt--adjust-subtitle-stop 899) :to-be 899)
- (expect (subed-srt--subtitle-msecs-stop) :to-be 2899)
- (expect (subed-srt--adjust-subtitle-stop 1) :to-be 1)
- (expect (subed-srt--subtitle-msecs-stop) :to-be 2900)
- (expect (subed-srt--adjust-subtitle-stop 1) :to-be nil)
- (expect (subed-srt--subtitle-msecs-stop) :to-be 2900)))
- )
- (it "without undershooting the target time."
- (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-srt--adjust-subtitle-stop 1) :to-be nil)
- (expect (subed-subtitle-msecs-stop) :to-equal 2000)))
- (it "without overshooting the target time."
- (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-srt--adjust-subtitle-start -1) :to-be nil)
- (expect (subed-subtitle-msecs-start) :to-equal 2000)))
- )
- (describe "ignores negative duration if the first argument is truthy"
- (it "when adjusting start time."
- (with-temp-buffer
- (insert (concat "1\n"
- "00:00:01,000 --> 00:00:02,000\n"
- "Foo.\n\n"))
- (expect (subed-srt--adjust-subtitle-start 2000 t) :to-be 2000)
- (expect (subed-srt--subtitle-msecs-start) :to-be 3000)
- (expect (subed-srt--subtitle-msecs-stop) :to-be 2000)
- (expect (subed-srt--adjust-subtitle-start -500 t) :to-be -500)
- (expect (subed-srt--subtitle-msecs-start) :to-be 2500)
- (expect (subed-srt--subtitle-msecs-stop) :to-be 2000)))
- (it "when adjusting stop time."
- (with-temp-buffer
- (insert (concat "1\n"
- "00:00:01,000 --> 00:00:02,000\n"
- "Foo.\n\n"))
- (expect (subed-srt--adjust-subtitle-stop -1500 t) :to-be -1500)
- (expect (subed-srt--subtitle-msecs-stop) :to-be 500)
- (expect (subed-srt--subtitle-msecs-start) :to-be 1000)
- (expect (subed-srt--adjust-subtitle-stop 200 t) :to-be 200)
- (expect (subed-srt--subtitle-msecs-stop) :to-be 700)
- (expect (subed-srt--subtitle-msecs-start) :to-be 1000)))
- )
- (describe "ignores subtitle spacing if the second argument is truthy"
- (it "when adjusting start time."
- (with-temp-buffer
- (insert (concat "1\n"
- "00:00:01,000 --> 00:00:02,000\n"
- "Foo.\n\n"
- "2\n"
- "00:00:02,200 --> 00:00:03,000\n"
- "Bar.\n"))
- (subed-srt--jump-to-subtitle-id 2)
- (expect (subed-srt--adjust-subtitle-start -150 nil t) :to-be -150)
- (expect (subed-srt--subtitle-msecs-start 2) :to-be 2050)
- (expect (subed-srt--subtitle-msecs-stop 1) :to-be 2000)
- (expect (subed-srt--adjust-subtitle-start -51 nil t) :to-be -51)
- (expect (subed-srt--subtitle-msecs-start 2) :to-be 1999)
- (expect (subed-srt--subtitle-msecs-stop 1) :to-be 2000)))
- (it "when adjusting stop time."
- (with-temp-buffer
- (insert (concat "1\n"
- "00:00:01,000 --> 00:00:02,000\n"
- "Foo.\n\n"
- "2\n"
- "00:00:02,200 --> 00:00:03,000\n"
- "Bar.\n"))
- (subed-srt--jump-to-subtitle-id 1)
- (expect (subed-srt--adjust-subtitle-stop 150 nil t) :to-be 150)
- (expect (subed-srt--subtitle-msecs-stop 1) :to-be 2150)
- (expect (subed-srt--subtitle-msecs-start 2) :to-be 2200)
- (expect (subed-srt--adjust-subtitle-stop 51 nil t) :to-be 51)
- (expect (subed-srt--subtitle-msecs-stop 1) :to-be 2201)
- (expect (subed-srt--subtitle-msecs-start 2) :to-be 2200)))
- )
- (it "does nothing if no timestamp can be found."
- (with-temp-buffer
- (insert "foo")
- (goto-char (point-min))
- (expect (subed-srt--adjust-subtitle-start 123) :to-be nil)
- (expect (buffer-string) :to-equal "foo")
- (expect (subed-srt--adjust-subtitle-start -123) :to-be nil)
- (expect (buffer-string) :to-equal "foo")))
- )
-
-(describe "Killing a subtitle"
- (it "removes it when it is the first one."
+(describe "Setting start/stop time"
+ (it "of current subtitle."
(with-temp-buffer
(insert mock-srt-data)
- (subed-srt--jump-to-subtitle-text 1)
- (subed-srt--subtitle-kill)
- (expect (buffer-string) :to-equal (concat "2\n"
- "00:02:02,234 -->
00:02:10,345\n"
- "Bar.\n"
- "\n"
+ (subed-srt--jump-to-subtitle-end 2)
+ (subed-srt--set-subtitle-time-start (+ (* 1 60 60 1000) (* 2 60 1000) (*
3 1000) 400))
+ (expect (buffer-string) :to-equal (concat "1\n"
+ "00:01:01,000 -->
00:01:05,123\n"
+ "Foo.\n\n"
+ "2\n"
+ "01:02:03,400 -->
00:02:10,345\n"
+ "Bar.\n\n"
"3\n"
"00:03:03,45 --> 00:03:15,5\n"
- "Baz.\n"))))
- (it "removes it when it is in the middle."
- (with-temp-buffer
- (insert mock-srt-data)
- (subed-srt--jump-to-subtitle-text 2)
- (subed-srt--subtitle-kill)
+ "Baz.\n"))
+ (subed-srt--set-subtitle-time-stop (+ (* 5 60 60 1000) (* 6 60 1000) (*
7 1000) 800))
(expect (buffer-string) :to-equal (concat "1\n"
"00:01:01,000 -->
00:01:05,123\n"
- "Foo.\n"
- "\n"
+ "Foo.\n\n"
+ "2\n"
+ "01:02:03,400 -->
05:06:07,800\n"
+ "Bar.\n\n"
"3\n"
"00:03:03,45 --> 00:03:15,5\n"
"Baz.\n"))))
- (it "removes it when it is the last one."
+ (it "of specific subtitle."
(with-temp-buffer
(insert mock-srt-data)
- (subed-srt--jump-to-subtitle-text 3)
- (subed-srt--subtitle-kill)
+ (subed-srt--jump-to-subtitle-time-stop 3)
+ (subed-srt--set-subtitle-time-start (+ (* 2 60 60 1000) (* 4 60 1000) (*
6 1000) 800) 1)
(expect (buffer-string) :to-equal (concat "1\n"
- "00:01:01,000 -->
00:01:05,123\n"
- "Foo.\n"
- "\n"
+ "02:04:06,800 -->
00:01:05,123\n"
+ "Foo.\n\n"
"2\n"
"00:02:02,234 -->
00:02:10,345\n"
- "Bar.\n"))))
- (it "removes the previous subtitle when point is right above an ID."
- (with-temp-buffer
- (insert mock-srt-data)
- (subed-srt--jump-to-subtitle-id 3)
- (backward-char)
- (expect (looking-at "^\n3\n") :to-be t)
- (subed-srt--subtitle-kill)
- (expect (buffer-string) :to-equal (concat "1\n"
- "00:01:01,000 -->
00:01:05,123\n"
- "Foo.\n"
- "\n"
+ "Bar.\n\n"
"3\n"
"00:03:03,45 --> 00:03:15,5\n"
+ "Baz.\n"))
+ (subed-srt--jump-to-subtitle-text 1)
+ (subed-srt--set-subtitle-time-stop (+ (* 3 60 60 1000) (* 5 60 1000) (*
7 1000) 900) 3)
+ (expect (buffer-string) :to-equal (concat "1\n"
+ "02:04:06,800 -->
00:01:05,123\n"
+ "Foo.\n\n"
+ "2\n"
+ "00:02:02,234 -->
00:02:10,345\n"
+ "Bar.\n\n"
+ "3\n"
+ "00:03:03,45 -->
03:05:07,900\n"
"Baz.\n"))))
+ (it "when milliseconds lack digits."
+ (with-temp-buffer
+ (insert mock-srt-data)
+ (subed-jump-to-subtitle-id 3)
+ (subed-srt--set-subtitle-time-start (+ (* 1 60 60 1000) (* 2 60 1000) (*
3 1000) 4) 3)
+ (expect (save-excursion (subed-jump-to-subtitle-time-start)
+ (thing-at-point 'line)) :to-equal "01:02:03,004
--> 00:03:15,5\n")
+ (subed-srt--set-subtitle-time-stop (+ (* 2 60 60 1000) (* 3 60 1000) (*
4 1000) 60) 3)
+ (expect (save-excursion (subed-jump-to-subtitle-time-start)
+ (thing-at-point 'line)) :to-equal "01:02:03,004
--> 02:03:04,060\n")))
+
)
(describe "Inserting"
diff --git a/tests/test-subed.el b/tests/test-subed.el
index 40b37a0..e5ca350 100644
--- a/tests/test-subed.el
+++ b/tests/test-subed.el
@@ -137,6 +137,275 @@
)
)
+(describe "Adjusting subtitle start/stop time"
+ :var (subed-subtitle-time-adjusted-hook)
+ (it "runs the appropriate hook."
+ (let ((foo (setf (symbol-function 'foo) (lambda (msecs) ()))))
+ (spy-on 'foo)
+ (add-hook 'subed-subtitle-time-adjusted-hook 'foo)
+ (with-temp-buffer
+ (insert mock-srt-data)
+ (subed-jump-to-subtitle-id 1)
+ (expect (subed-adjust-subtitle-time-start 100) :to-equal 100)
+ (expect 'foo :to-have-been-called-with 61100)
+ (expect 'foo :to-have-been-called-times 1)
+ (expect (subed-adjust-subtitle-time-stop 123) :to-equal 123)
+ (expect 'foo :to-have-been-called-with 61100)
+ (expect 'foo :to-have-been-called-times 2)
+ (subed-jump-to-subtitle-id 2)
+ (expect (subed-adjust-subtitle-time-start 6) :to-equal 6)
+ (expect 'foo :to-have-been-called-with 122240)
+ (expect 'foo :to-have-been-called-times 3)
+ (expect (subed-adjust-subtitle-time-stop 123) :to-equal 123)
+ (expect 'foo :to-have-been-called-with 122240)
+ (expect 'foo :to-have-been-called-times 4))
+ (remove-hook 'subed-subtitle-time-adjusted-hook 'foo)))
+ (it "adjusts the start/stop time."
+ (with-temp-buffer
+ (insert mock-srt-data)
+ (subed-jump-to-subtitle-id 1)
+ (expect (subed-adjust-subtitle-time-start 100) :to-equal 100)
+ (expect (save-excursion (subed-jump-to-subtitle-time-start)
+ (thing-at-point 'line)) :to-equal "00:01:01,100
--> 00:01:05,123\n")
+ (expect (subed-adjust-subtitle-time-start -200) :to-equal -200)
+ (expect (save-excursion (subed-jump-to-subtitle-time-start)
+ (thing-at-point 'line)) :to-equal "00:01:00,900
--> 00:01:05,123\n")
+ (expect (subed-adjust-subtitle-time-stop 200) :to-equal 200)
+ (expect (save-excursion (subed-jump-to-subtitle-time-start)
+ (thing-at-point 'line)) :to-equal "00:01:00,900
--> 00:01:05,323\n")
+ (expect (subed-adjust-subtitle-time-stop -100) :to-equal -100)
+ (expect (save-excursion (subed-jump-to-subtitle-time-start)
+ (thing-at-point 'line)) :to-equal "00:01:00,900
--> 00:01:05,223\n")))
+ (describe "enforces limits"
+ (describe "when decreasing start time"
+ (it "of the first subtitle."
+ (with-temp-buffer
+ (insert (concat "1\n"
+ "00:00:01,000 --> 00:00:02,000\n"
+ "Foo.\n"))
+ (expect (subed-adjust-subtitle-time-start -999) :to-be -999)
+ (expect (subed-subtitle-msecs-start) :to-be 1)
+ (expect (subed-adjust-subtitle-time-start -1) :to-be -1)
+ (expect (subed-subtitle-msecs-start) :to-be 0)
+ (expect (subed-adjust-subtitle-time-start -1) :to-be nil)
+ (expect (subed-subtitle-msecs-start) :to-be 0)))
+ (it "of a non-first subtitle."
+ (with-temp-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"))
+ (subed-jump-to-subtitle-id 2)
+ (expect (subed-adjust-subtitle-time-start -899) :to-be -899)
+ (expect (subed-subtitle-msecs-start) :to-be 2101)
+ (expect (subed-adjust-subtitle-time-start -1) :to-be -1)
+ (expect (subed-subtitle-msecs-start) :to-be 2100)
+ (expect (subed-adjust-subtitle-time-start -1) :to-be nil)
+ (expect (subed-subtitle-msecs-start) :to-be 2100)))
+ )
+ (it "when increasing start time."
+ (with-temp-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"))
+ (insert mock-srt-data)
+ (subed-jump-to-subtitle-id 2)
+ (expect (subed-adjust-subtitle-time-start 999) :to-be 999)
+ (expect (subed-subtitle-msecs-start) :to-be 3999)
+ (expect (subed-adjust-subtitle-time-start 1) :to-be 1)
+ (expect (subed-subtitle-msecs-start) :to-be 4000)
+ (expect (subed-adjust-subtitle-time-start 1) :to-be nil)
+ (expect (subed-subtitle-msecs-start) :to-be 4000)))
+ (it "when decreasing stop time."
+ (with-temp-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"))
+ (subed-jump-to-subtitle-id 2)
+ (expect (subed-adjust-subtitle-time-stop -999) :to-be -999)
+ (expect (subed-subtitle-msecs-stop) :to-be 3001)
+ (expect (subed-adjust-subtitle-time-stop -1) :to-be -1)
+ (expect (subed-subtitle-msecs-stop) :to-be 3000)
+ (expect (subed-adjust-subtitle-time-stop -1) :to-be nil)
+ (expect (subed-subtitle-msecs-stop) :to-be 3000)))
+ (describe "when increasing stop time"
+ (it "of the last subtitle."
+ (with-temp-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"))
+ (subed-jump-to-subtitle-id 3)
+ (expect (subed-adjust-subtitle-time-stop 1000000):to-be 1000000)
+ (expect (subed-subtitle-msecs-stop) :to-be 1004000)))
+ (it "of a non-last subtitle."
+ (with-temp-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"))
+ (subed-jump-to-subtitle-id 1)
+ (expect (subed-adjust-subtitle-time-stop 899) :to-be 899)
+ (expect (subed-subtitle-msecs-stop) :to-be 2899)
+ (expect (subed-adjust-subtitle-time-stop 1) :to-be 1)
+ (expect (subed-subtitle-msecs-stop) :to-be 2900)
+ (expect (subed-adjust-subtitle-time-stop 1) :to-be nil)
+ (expect (subed-subtitle-msecs-stop) :to-be 2900)))
+ )
+ (it "without undershooting the target time."
+ (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-adjust-subtitle-time-stop 1) :to-be nil)
+ (expect (subed-subtitle-msecs-stop) :to-equal 2000)))
+ (it "without overshooting the target time."
+ (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-adjust-subtitle-time-start -1) :to-be nil)
+ (expect (subed-subtitle-msecs-start) :to-equal 2000)))
+ )
+ (describe "ignores negative duration if the first argument is truthy"
+ (it "when adjusting start time."
+ (with-temp-buffer
+ (insert (concat "1\n"
+ "00:00:01,000 --> 00:00:02,000\n"
+ "Foo.\n\n"))
+ (expect (subed-adjust-subtitle-time-start 2000 t) :to-be 2000)
+ (expect (subed-subtitle-msecs-start) :to-be 3000)
+ (expect (subed-subtitle-msecs-stop) :to-be 2000)
+ (expect (subed-adjust-subtitle-time-start -500 t) :to-be -500)
+ (expect (subed-subtitle-msecs-start) :to-be 2500)
+ (expect (subed-subtitle-msecs-stop) :to-be 2000)))
+ (it "when adjusting stop time."
+ (with-temp-buffer
+ (insert (concat "1\n"
+ "00:00:01,000 --> 00:00:02,000\n"
+ "Foo.\n\n"))
+ (expect (subed-adjust-subtitle-time-stop -1500 t) :to-be -1500)
+ (expect (subed-subtitle-msecs-stop) :to-be 500)
+ (expect (subed-subtitle-msecs-start) :to-be 1000)
+ (expect (subed-adjust-subtitle-time-stop 200 t) :to-be 200)
+ (expect (subed-subtitle-msecs-stop) :to-be 700)
+ (expect (subed-subtitle-msecs-start) :to-be 1000)))
+ )
+ (describe "ignores subtitle spacing if the second argument is truthy"
+ (it "when adjusting start time."
+ (with-temp-buffer
+ (insert (concat "1\n"
+ "00:00:01,000 --> 00:00:02,000\n"
+ "Foo.\n\n"
+ "2\n"
+ "00:00:02,200 --> 00:00:03,000\n"
+ "Bar.\n"))
+ (subed-jump-to-subtitle-id 2)
+ (expect (subed-adjust-subtitle-time-start -150 nil t) :to-be -150)
+ (expect (subed-subtitle-msecs-start 2) :to-be 2050)
+ (expect (subed-subtitle-msecs-stop 1) :to-be 2000)
+ (expect (subed-adjust-subtitle-time-start -51 nil t) :to-be -51)
+ (expect (subed-subtitle-msecs-start 2) :to-be 1999)
+ (expect (subed-subtitle-msecs-stop 1) :to-be 2000)))
+ (it "when adjusting stop time."
+ (with-temp-buffer
+ (insert (concat "1\n"
+ "00:00:01,000 --> 00:00:02,000\n"
+ "Foo.\n\n"
+ "2\n"
+ "00:00:02,200 --> 00:00:03,000\n"
+ "Bar.\n"))
+ (subed-jump-to-subtitle-id 1)
+ (expect (subed-adjust-subtitle-time-stop 150 nil t) :to-be 150)
+ (expect (subed-subtitle-msecs-stop 1) :to-be 2150)
+ (expect (subed-subtitle-msecs-start 2) :to-be 2200)
+ (expect (subed-adjust-subtitle-time-stop 51 nil t) :to-be 51)
+ (expect (subed-subtitle-msecs-stop 1) :to-be 2201)
+ (expect (subed-subtitle-msecs-start 2) :to-be 2200)))
+ )
+ (it "does nothing if no timestamp can be found."
+ (with-temp-buffer
+ (insert "foo")
+ (goto-char (point-min))
+ (expect (subed-adjust-subtitle-time-start 123) :to-be nil)
+ (expect (buffer-string) :to-equal "foo")
+ (expect (subed-adjust-subtitle-time-start -123) :to-be nil)
+ (expect (buffer-string) :to-equal "foo")))
+ )
+
+(describe "Killing a subtitle"
+ (it "removes it when it is the first one."
+ (with-temp-buffer
+ (insert mock-srt-data)
+ (subed-srt--jump-to-subtitle-text 1)
+ (subed-srt--subtitle-kill)
+ (expect (buffer-string) :to-equal (concat "2\n"
+ "00:02:02,234 -->
00:02:10,345\n"
+ "Bar.\n"
+ "\n"
+ "3\n"
+ "00:03:03,45 --> 00:03:15,5\n"
+ "Baz.\n"))))
+ (it "removes it when it is in the middle."
+ (with-temp-buffer
+ (insert mock-srt-data)
+ (subed-srt--jump-to-subtitle-text 2)
+ (subed-srt--subtitle-kill)
+ (expect (buffer-string) :to-equal (concat "1\n"
+ "00:01:01,000 -->
00:01:05,123\n"
+ "Foo.\n"
+ "\n"
+ "3\n"
+ "00:03:03,45 --> 00:03:15,5\n"
+ "Baz.\n"))))
+ (it "removes it when it is the last one."
+ (with-temp-buffer
+ (insert mock-srt-data)
+ (subed-srt--jump-to-subtitle-text 3)
+ (subed-srt--subtitle-kill)
+ (expect (buffer-string) :to-equal (concat "1\n"
+ "00:01:01,000 -->
00:01:05,123\n"
+ "Foo.\n"
+ "\n"
+ "2\n"
+ "00:02:02,234 -->
00:02:10,345\n"
+ "Bar.\n"))))
+ (it "removes the previous subtitle when point is right above an ID."
+ (with-temp-buffer
+ (insert mock-srt-data)
+ (subed-jump-to-subtitle-id 3)
+ (backward-char)
+ (expect (looking-at "^\n3\n") :to-be t)
+ (subed-srt--subtitle-kill)
+ (expect (buffer-string) :to-equal (concat "1\n"
+ "00:01:01,000 -->
00:01:05,123\n"
+ "Foo.\n"
+ "\n"
+ "3\n"
+ "00:03:03,45 --> 00:03:15,5\n"
+ "Baz.\n"))))
+ )
+
(describe "Moving"
(it "adjusts start and stop time by the same amount."
(with-temp-buffer
@@ -539,7 +808,7 @@
(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-start :and-call-fake
+ (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)))
@@ -555,7 +824,7 @@
(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-start :and-call-fake
+ (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)))
- [nongnu] elpa/subed f62fdb9 263/389: Remove empty line, (continued)
- [nongnu] elpa/subed f62fdb9 263/389: Remove empty line, ELPA Syncer, 2021/12/03
- [nongnu] elpa/subed ce6bf04 271/389: Point to subed-mode docstring in "Installation", ELPA Syncer, 2021/12/03
- [nongnu] elpa/subed 464d0cb 284/389: Add defcustom: subed-enforce-time-boundaries, ELPA Syncer, 2021/12/03
- [nongnu] elpa/subed a1c66c5 116/389: Make if clause easier to grasp, ELPA Syncer, 2021/12/03
- [nongnu] elpa/subed f31424e 115/389: Show message when enabling/disable features manually, ELPA Syncer, 2021/12/03
- [nongnu] elpa/subed b30293d 120/389: subed--replay-adjusted-subtitle: Fix docstring, ELPA Syncer, 2021/12/03
- [nongnu] elpa/subed 34caefb 117/389: Explain usage of prefix argument when adjusting/moving, ELPA Syncer, 2021/12/03
- [nongnu] elpa/subed b1cb470 134/389: Deduplicate code by adding subed-move-subtitles function, ELPA Syncer, 2021/12/03
- [nongnu] elpa/subed f7c04d2 167/389: Fix tests for inserting subtitle(s), ELPA Syncer, 2021/12/03
- [nongnu] elpa/subed c1ee129 181/389: Add functions to adjust start/stop timestamps to player's ones, ELPA Syncer, 2021/12/03
- [nongnu] elpa/subed 9bf3fcc 213/389: Make timestamp adjustment limitations generic,
ELPA Syncer <=
- [nongnu] elpa/subed 6fd0468 193/389: Use (defalias ...) instead of (fset ...), ELPA Syncer, 2021/12/03
- [nongnu] elpa/subed af4d876 211/389: use emacs 25 for e.g. alist-get, ELPA Syncer, 2021/12/03
- [nongnu] elpa/subed 9bc42c6 192/389: arg instead of (not (eq nil arg)), ELPA Syncer, 2021/12/03
- [nongnu] elpa/subed 7b5c5e0 205/389: Add/Fix tests for moving subtitles, ELPA Syncer, 2021/12/03
- [nongnu] elpa/subed 3b69f02 225/389: Simplify basic test for moving subtitle, ELPA Syncer, 2021/12/03
- [nongnu] elpa/subed b6e484f 204/389: Move subtitles in active region as a unit, ELPA Syncer, 2021/12/03
- [nongnu] elpa/subed 07a3774 218/389: Add generic function subed-subtitle-id-max, ELPA Syncer, 2021/12/03
- [nongnu] elpa/subed 80a2545 223/389: Reduce LOC, ELPA Syncer, 2021/12/03
- [nongnu] elpa/subed cfe8d1c 228/389: subed-srt--backward-subtitle-id: Don't look for different ID, ELPA Syncer, 2021/12/03
- [nongnu] elpa/subed 1e2dab9 229/389: remove sharp-quote from list; make variable customizable, ELPA Syncer, 2021/12/03