branch: elpa/subed commit 1571de4bbd2337a51e20f66721e8bd2d32da3771 Author: Random User <rnd...@posteo.de> Commit: Random User <rnd...@posteo.de>
Use prefix arg to set start/stop time adjustment --- subed/subed-config.el | 19 +++++++++++---- subed/subed-srt.el | 63 ++++++++++++++++++++++++++++++++++++------------- subed/subed.el | 8 +++---- tests/test-subed-srt.el | 42 +++++++++++++++++++++++++-------- 4 files changed, 98 insertions(+), 34 deletions(-) diff --git a/subed/subed-config.el b/subed/subed-config.el index daf3742..2f234f0 100644 --- a/subed/subed-config.el +++ b/subed/subed-config.el @@ -29,10 +29,10 @@ (define-key subed-mode-map (kbd "M-p") 'subed-backward-subtitle-text) (define-key subed-mode-map (kbd "C-M-a") 'subed-move-to-subtitle-text) (define-key subed-mode-map (kbd "C-M-e") 'subed-move-to-subtitle-end) - (define-key subed-mode-map (kbd "M-[") 'subed-decrease-start-time-100ms) - (define-key subed-mode-map (kbd "M-]") 'subed-increase-start-time-100ms) - (define-key subed-mode-map (kbd "M-{") 'subed-decrease-stop-time-100ms) - (define-key subed-mode-map (kbd "M-}") 'subed-increase-stop-time-100ms) + (define-key subed-mode-map (kbd "M-[") 'subed-decrease-start-time) + (define-key subed-mode-map (kbd "M-]") 'subed-increase-start-time) + (define-key subed-mode-map (kbd "M-{") 'subed-decrease-stop-time) + (define-key subed-mode-map (kbd "M-}") 'subed-increase-stop-time) (define-key subed-mode-map (kbd "M-i") 'subed-subtitle-insert) (define-key subed-mode-map (kbd "M-k") 'subed-subtitle-kill) (define-key subed-mode-map (kbd "M-s") 'subed-sort) @@ -107,6 +107,17 @@ The first existing file is then passed to `subed-open-video'." :type 'boolean :group 'subed) +(defcustom subed-seconds-adjust 100 + "Number of milliseconds to add/subtract to subtitle start/stop +time with `subed-increase-start-time', +`subed-decrease-start-time', `subed-increase-stop-time' and +`subed-decrease-stop-time'. + +This variable is set if these functions are called with a prefix +argument. See `subed-increase-start-time'." + :type 'float + :group 'subed) + (defcustom subed-playback-speed-while-typing 0.3 "Video playback speed while the user is editing the buffer. If set to zero or smaller, playback is paused." diff --git a/subed/subed-srt.el b/subed/subed-srt.el index 15a1f71..21f21f8 100644 --- a/subed/subed-srt.el +++ b/subed/subed-srt.el @@ -317,25 +317,56 @@ Return point or nil if there is no previous subtitle." (let ((sub-id (subed-srt--subtitle-id))) (run-hook-with-args 'subed-subtitle-time-adjusted-hook sub-id msecs-new))))) -(defun subed-srt-increase-start-time-100ms () - "Add 100 milliseconds to start time of current subtitle." - (interactive) - (subed-srt--adjust-subtitle-start-relative 100)) +(defun subed-srt--get-adjust-time (arg) + "Set `subed-seconds-adjust' to `arg' if it's a number. If +`arg' is non-nil, reset `subed-seconds-adjust' to its default." + (subed-debug "arg: %S (%S)" arg (type-of arg)) + (cond ((integerp arg) + (setq subed-seconds-adjust arg)) ;; Custom adjustment + ((not (eq nil arg)) + (custom-reevaluate-setting 'subed-seconds-adjust))) ;; Reset to default + subed-seconds-adjust) + +(defun subed-srt-increase-start-time (&optional arg) + "Add `subed-seconds-adjust' milliseconds to start time of current subtitle. + +`subed-seconds-adjust' is set to the value of a numerical prefix +argument if provided. If the prefix argument is not numerical, +`subed-seconds-adjust' is reset to it's default value. + +Example usage: + \\[universal-argument] 1000 \\[subed-increase-start-time] Increase start time by 1000ms + \\[subed-increase-start-time] Increase start time by 1000ms again + [...] [...] + \\[universal-argument] 500 \\[subed-increase-start-time] Increase start time by 500ms + \\[subed-increase-start-time] Increase start time by 500ms again + [...] [...] + \\[universal-argument] \\[subed-increase-start-time] Increase start time by 100ms + \\[subed-increase-start-time] Increase start time by 100ms again + [...] [...]" + (interactive "P") + (subed-srt--adjust-subtitle-start-relative (subed-srt--get-adjust-time arg))) -(defun subed-srt-decrease-start-time-100ms () - "Subtract 100 milliseconds from start time of current subtitle." - (interactive) - (subed-srt--adjust-subtitle-start-relative -100)) +(defun subed-srt-decrease-start-time (&optional arg) + "Subtract `subed-seconds-adjust' milliseconds from start time of current subtitle. -(defun subed-srt-increase-stop-time-100ms () - "Add 100 milliseconds to stop time of current subtitle." - (interactive) - (subed-srt--adjust-subtitle-stop-relative 100)) +See also `subed-increase-start-time'." + (interactive "P") + (subed-srt--adjust-subtitle-start-relative (* -1 (subed-srt--get-adjust-time arg)))) -(defun subed-srt-decrease-stop-time-100ms () - "Subtract 100 milliseconds from stop time of current subtitle." - (interactive) - (subed-srt--adjust-subtitle-stop-relative -100)) +(defun subed-srt-increase-stop-time (&optional arg) + "Add `subed-seconds-adjust' milliseconds to stop time of current subtitle. + +See also `subed-increase-start-time'." + (interactive "P") + (subed-srt--adjust-subtitle-stop-relative (subed-srt--get-adjust-time arg))) + +(defun subed-srt-decrease-stop-time (&optional arg) + "Subtract `subed-seconds-adjust' milliseconds from stop time of current subtitle. + +See also `subed-increase-start-time'." + (interactive "P") + (subed-srt--adjust-subtitle-stop-relative (* -1 (subed-srt--get-adjust-time arg)))) (defun subed-srt-subtitle-insert (arg) "Insert subtitle(s). diff --git a/subed/subed.el b/subed/subed.el index dd58645..d09987f 100644 --- a/subed/subed.el +++ b/subed/subed.el @@ -53,10 +53,10 @@ (fset 'subed-forward-subtitle-time-stop 'subed-srt-forward-subtitle-time-stop) (fset 'subed-backward-subtitle-time-stop 'subed-srt-backward-subtitle-time-stop) -(fset 'subed-increase-start-time-100ms 'subed-srt-increase-start-time-100ms) -(fset 'subed-decrease-start-time-100ms 'subed-srt-decrease-start-time-100ms) -(fset 'subed-increase-stop-time-100ms 'subed-srt-increase-stop-time-100ms) -(fset 'subed-decrease-stop-time-100ms 'subed-srt-decrease-stop-time-100ms) +(fset 'subed-increase-start-time 'subed-srt-increase-start-time) +(fset 'subed-decrease-start-time 'subed-srt-decrease-start-time) +(fset 'subed-increase-stop-time 'subed-srt-increase-stop-time) +(fset 'subed-decrease-stop-time 'subed-srt-decrease-stop-time) (fset 'subed-subtitle-insert 'subed-srt-subtitle-insert) (fset 'subed-subtitle-kill 'subed-srt-subtitle-kill) diff --git a/tests/test-subed-srt.el b/tests/test-subed-srt.el index 8386f05..46aebbf 100644 --- a/tests/test-subed-srt.el +++ b/tests/test-subed-srt.el @@ -591,39 +591,61 @@ Baz. (add-hook 'subed-subtitle-time-adjusted-hook 'foo) (with-temp-buffer (insert mock-srt-data) - (subed-srt-increase-start-time-100ms) + (subed-srt-increase-start-time) (expect 'foo :to-have-been-called-with 3 183556) (expect 'foo :to-have-been-called-times 1) (subed-srt-move-to-subtitle-id 1) - (subed-srt-increase-stop-time-100ms) + (subed-srt-increase-stop-time) (expect 'foo :to-have-been-called-with 1 65223) (expect 'foo :to-have-been-called-times 2) (subed-srt-move-to-subtitle-end 2) - (subed-srt-decrease-start-time-100ms) + (subed-srt-decrease-start-time) (expect 'foo :to-have-been-called-with 2 122134) (expect 'foo :to-have-been-called-times 3) (subed-srt-move-to-subtitle-text 3) - (subed-srt-decrease-stop-time-100ms) + (subed-srt-decrease-stop-time) (expect 'foo :to-have-been-called-with 3 195467) (expect 'foo :to-have-been-called-times 4)))) (it "adjusts the start/stop time." (with-temp-buffer (insert mock-srt-data) (subed-srt-move-to-subtitle-id 1) - (subed-srt-increase-start-time-100ms) + (subed-srt-increase-start-time) (expect (save-excursion (subed-srt-move-to-subtitle-time-start) (thing-at-point 'line)) :to-equal "00:01:01,100 --> 00:01:05,123\n") - (subed-srt-decrease-start-time-100ms) - (subed-srt-decrease-start-time-100ms) + (subed-srt-decrease-start-time) + (subed-srt-decrease-start-time) (expect (save-excursion (subed-srt-move-to-subtitle-time-start) (thing-at-point 'line)) :to-equal "00:01:00,900 --> 00:01:05,123\n") - (subed-srt-increase-stop-time-100ms) - (subed-srt-increase-stop-time-100ms) + (subed-srt-increase-stop-time) + (subed-srt-increase-stop-time) (expect (save-excursion (subed-srt-move-to-subtitle-time-start) (thing-at-point 'line)) :to-equal "00:01:00,900 --> 00:01:05,323\n") - (subed-srt-decrease-stop-time-100ms) + (subed-srt-decrease-stop-time) (expect (save-excursion (subed-srt-move-to-subtitle-time-start) (thing-at-point 'line)) :to-equal "00:01:00,900 --> 00:01:05,223\n"))) + (it "sets the number of seconds when given an argument." + (with-temp-buffer + (insert mock-srt-data) + (subed-srt-move-to-subtitle-id 1) + (subed-srt-increase-start-time 200) + (subed-srt-increase-start-time) + (subed-srt-increase-start-time) + (expect (save-excursion (subed-srt-move-to-subtitle-time-start) + (thing-at-point 'line)) :to-equal "00:01:01,600 --> 00:01:05,123\n") + (subed-srt-decrease-start-time 50) + (subed-srt-decrease-start-time) + (expect (save-excursion (subed-srt-move-to-subtitle-time-start) + (thing-at-point 'line)) :to-equal "00:01:01,500 --> 00:01:05,123\n") + (subed-srt-decrease-stop-time 1000) + (subed-srt-decrease-stop-time) + (subed-srt-decrease-stop-time) + (expect (save-excursion (subed-srt-move-to-subtitle-time-start) + (thing-at-point 'line)) :to-equal "00:01:01,500 --> 00:01:02,123\n") + (subed-srt-increase-stop-time 2000) + (subed-srt-increase-stop-time) + (expect (save-excursion (subed-srt-move-to-subtitle-time-start) + (thing-at-point 'line)) :to-equal "00:01:01,500 --> 00:01:06,123\n"))) ) (describe "Killing a subtitle"