[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
- [nongnu] elpa/subed 6391996 056/389: Kill debugging buffer+window in subed-disable-debugging, (continued)
- [nongnu] elpa/subed 6391996 056/389: Kill debugging buffer+window in subed-disable-debugging, ELPA Syncer, 2021/12/03
- [nongnu] elpa/subed 0fe0c82 059/389: When opening debug window, always split horizontally, ELPA Syncer, 2021/12/03
- [nongnu] elpa/subed 4e31010 062/389: mpv returns nil as "time-pos" in at least one circumstance, ELPA Syncer, 2021/12/03
- [nongnu] elpa/subed 1c8e0d1 064/389: Sanitize separator between start and stop time, ELPA Syncer, 2021/12/03
- [nongnu] elpa/subed 3c1a1b4 065/389: Don't validate anything if buffer is empty, ELPA Syncer, 2021/12/03
- [nongnu] elpa/subed ce14b0d 074/389: Adjust comment, ELPA Syncer, 2021/12/03
- [nongnu] elpa/subed 8fa0f6c 078/389: Remove debugging messages, ELPA Syncer, 2021/12/03
- [nongnu] elpa/subed 96e7fcf 086/389: Add subed--get-seconds-move, ELPA Syncer, 2021/12/03
- [nongnu] elpa/subed 189e5aa 088/389: Make more functions available format-agnosticly, ELPA Syncer, 2021/12/03
- [nongnu] elpa/subed 14d52d7 089/389: Add subed--for-each-subtitle, ELPA Syncer, 2021/12/03
- [nongnu] elpa/subed 7710790 090/389: Add subed-move-subtitle-forward/backward,
ELPA Syncer <=
- [nongnu] elpa/subed 3511026 091/389: Move utilities to the top, ELPA Syncer, 2021/12/03
- [nongnu] elpa/subed 81aca87 008/389: Be more robust when moving forward/backward to subtitle text, ELPA Syncer, 2021/12/03
- [nongnu] elpa/subed 8e4bd20 069/389: Fix indentation, ELPA Syncer, 2021/12/03
- [nongnu] elpa/subed 6e525b9 079/389: Add screenshot, ELPA Syncer, 2021/12/03
- [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