emacs-elpa-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[nongnu] elpa/subed 7710790 090/389: Add subed-move-subtitle-forward/bac


From: ELPA Syncer
Subject: [nongnu] elpa/subed 7710790 090/389: Add subed-move-subtitle-forward/backward
Date: Fri, 3 Dec 2021 11:00:03 -0500 (EST)

branch: elpa/subed
commit 77107906872205695a7e87d771d25be966086c49
Author: Random User <rndusr@posteo.de>
Commit: Random User <rndusr@posteo.de>

    Add subed-move-subtitle-forward/backward
---
 subed/subed.el      | 41 +++++++++++++++++++++++++++++++++++++++++
 tests/test-subed.el | 41 +++++++++++++++++++++++++++++++++++++++++
 2 files changed, 82 insertions(+)

diff --git a/subed/subed.el b/subed/subed.el
index 4b31c41..92f2b56 100644
--- a/subed/subed.el
+++ b/subed/subed.el
@@ -119,6 +119,47 @@
           (set-window-point debug-window (goto-char (point-max))))))))
 
 
+;;; Moving subtitles
+
+(defun subed-move-subtitle-forward (&optional arg beg end)
+  "Move subtitle `subed-seconds-move' forward in time while
+preserving its duration, i.e. increase start and stop time by the
+same amount.
+
+If the region is active, all subtitles that are fully or
+partially in it are moved.
+
+The first step is to set `subed-seconds-move' to the value of the
+prefix argument if it is provided and if it is a number.  If the
+prefix argument is provided but not numerical,
+`subed-seconds-move' is reset to its default value.
+
+Example usage:
+  \\[universal-argument] 1000 \\[subed-move-subtitle-forward]  Move subtitle 
1000ms forward in time
+           \\[subed-move-subtitle-forward]  Move subtitle 1000ms forward in 
time again
+   \\[universal-argument] 500 \\[subed-move-subtitle-forward]  Move subtitle 
500ms forward in time
+           \\[subed-move-subtitle-forward]  Move subtitle 500ms forward in 
time again
+       \\[universal-argument] \\[subed-move-subtitle-forward]  Move subtitle 
100ms (the default) forward in time
+           \\[subed-move-subtitle-forward]  Move subtitle 100ms (the default) 
forward in time again"
+  (interactive "P" (if (use-region-p) (list (region-beginning) (region-end))))
+  (let ((secs (subed--get-seconds-move arg)))
+    (subed--for-each-subtitle beg end
+      (subed--adjust-subtitle-start-relative secs)
+      (subed--adjust-subtitle-stop-relative secs))))
+
+(defun subed-move-subtitle-backward (&optional arg beg end)
+  "Move subtitle `subed-seconds-move' backward in time while
+preserving its duration, i.e. decrease start and stop time by the
+same amount.
+
+See `subed-move-subtitle-forward'."
+  (interactive "P" (if (use-region-p) (list (region-beginning) (region-end))))
+  (let ((secs (* -1 (subed--get-seconds-move arg))))
+    (subed--for-each-subtitle beg end
+      (subed--adjust-subtitle-start-relative secs)
+      (subed--adjust-subtitle-stop-relative secs))))
+
+
 ;;; Replay time-adjusted subtitle
 (defun subed-replay-adjusted-subtitle-p ()
   "Whether adjusting a subtitle's start/stop time causes the
diff --git a/tests/test-subed.el b/tests/test-subed.el
index 00b45f8..b84eacb 100644
--- a/tests/test-subed.el
+++ b/tests/test-subed.el
@@ -52,6 +52,47 @@
                 (expect (subed--subtitle-text 3) :to-equal "Hello.")))
           )
 
+(describe "Moving"
+          (it "adjusts start and stop time by the same amount."
+              (with-temp-buffer
+                (insert mock-srt-data)
+                (cl-loop for sub-id in '(1 2 3) do
+                         (subed-jump-to-subtitle-id sub-id)
+                         (let ((orig-start (subed--subtitle-msecs-start))
+                               (orig-stop (subed--subtitle-msecs-stop)))
+                           (subed-move-subtitle-forward 100)
+                           (expect (subed--subtitle-msecs-start) :to-equal (+ 
orig-start 100))
+                           (expect (subed--subtitle-msecs-stop) :to-equal (+ 
orig-stop 100))
+                           (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 subtitles in the active region."
+              (with-temp-buffer
+                (insert mock-srt-data)
+                (let ((beg (subed-jump-to-subtitle-text 2))
+                      (end (subed-jump-to-subtitle-time-start 3))
+                      (orig-start-1 (subed--subtitle-msecs-start 1))
+                      (orig-stop-1 (subed--subtitle-msecs-stop 1))
+                      (orig-start-2 (subed--subtitle-msecs-start 2))
+                      (orig-stop-2 (subed--subtitle-msecs-stop 2))
+                      (orig-start-3 (subed--subtitle-msecs-start 3))
+                      (orig-stop-3 (subed--subtitle-msecs-stop 3)))
+                  (subed-move-subtitle-forward 100 beg end)
+                  (expect (subed--subtitle-msecs-start 1) :to-equal 
orig-start-1)
+                  (expect (subed--subtitle-msecs-stop 1) :to-equal orig-stop-1)
+                  (expect (subed--subtitle-msecs-start 2) :to-equal (+ 
orig-start-2 100))
+                  (expect (subed--subtitle-msecs-stop 2) :to-equal (+ 
orig-stop-2 100))
+                  (expect (subed--subtitle-msecs-start 3) :to-equal (+ 
orig-start-3 100))
+                  (expect (subed--subtitle-msecs-stop 3) :to-equal (+ 
orig-stop-3 100))
+                  (subed-move-subtitle-backward 100 beg end)
+                  (expect (subed--subtitle-msecs-start 1) :to-equal 
orig-start-1)
+                  (expect (subed--subtitle-msecs-stop 1) :to-equal orig-stop-1)
+                  (expect (subed--subtitle-msecs-start 2) :to-equal 
orig-start-2)
+                  (expect (subed--subtitle-msecs-stop 2) :to-equal orig-stop-2)
+                  (expect (subed--subtitle-msecs-start 3) :to-equal 
orig-start-3)
+                  (expect (subed--subtitle-msecs-stop 3) :to-equal 
orig-stop-3))))
+          )
+
 (describe "Syncing player to point"
           :var (subed-mpv-playback-position)
           (before-each



reply via email to

[Prev in Thread] Current Thread [Next in Thread]