summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSacha Chua <sacha@sachachua.com>2023-10-22 08:47:00 -0400
committerSacha Chua <sacha@sachachua.com>2023-10-22 08:47:00 -0400
commitd89ab2fcbc404a68770ea41256430f2643052c2a (patch)
tree9c5d354f152d4b2c9eaf2dc017ccf7d77de827c5
parentebacf717e1a592ebff85b5460b9299547820b1b5 (diff)
downloademacsconf-el-d89ab2fcbc404a68770ea41256430f2643052c2a.tar.xz
emacsconf-el-d89ab2fcbc404a68770ea41256430f2643052c2a.zip
matching subtitles
-rw-r--r--emacsconf-subed.el92
1 files changed, 91 insertions, 1 deletions
diff --git a/emacsconf-subed.el b/emacsconf-subed.el
index 6369cdd..745ed51 100644
--- a/emacsconf-subed.el
+++ b/emacsconf-subed.el
@@ -298,7 +298,8 @@ Create it if necessary."
(interactive "e")
(goto-char (posn-point (event-start event)))
(skip-syntax-backward "w")
- (subed-split-subtitle))
+ (subed-split-subtitle)
+ (recenter))
(defun emacsconf-subed-merge-and-fill ()
"Merge this subtitle with the next one."
@@ -316,11 +317,100 @@ Create it if necessary."
(define-key map [up-1] #'ignore)
(define-key map [drag-mouse-1] #'ignore)
(define-key map [mouse-movement] #'ignore)
+ (define-key map (kbd "<down>") #'scroll-up)
(define-key map "q" #'fill-paragraph)
(define-key map "." #'emacsconf-subed-merge-and-fill)
+ (define-key map "u" #'undo)
(define-key map (kbd "SPC") #'scroll-up)
map)
t))
+(defun emacsconf-subed-intro-subtitles ()
+ "Create the introduction as subtitles."
+ (interactive)
+ (subed-auto-insert)
+ (let ((emacsconf-publishing-phase 'conference))
+ (mapc
+ (lambda (sub) (apply #'subed-append-subtitle nil (cdr sub)))
+ (seq-map-indexed
+ (lambda (talk i)
+ (list
+ nil
+ (* i 5000)
+ (1- (* i 5000))
+ (format "#+OUTPUT: %s.webm\n[[file:%s]]\n%s"
+ (plist-get talk :slug)
+ (expand-file-name
+ (concat (plist-get talk :slug) ".svg.png")
+ (expand-file-name "in-between" emacsconf-stream-asset-dir))
+ (emacsconf-pad-expand-intro talk))))
+ (emacsconf-publish-prepare-for-display (emacsconf-get-talk-info))))))
+
+(defvar-local emacsconf-subed-subtitle-source nil "Buffer with the intended subtitles.")
+
+(defun emacsconf-subed-prepare-string-for-matching (s)
+ (downcase
+ (replace-regexp-in-string "[^A-Za-z0-9]" ""
+ (replace-regexp-in-string "^\\(\\[\\[.*?\]\\]\\|#\\+.*?\\)\\(\n\\|$\\)" "" s))))
+
+(defun emacsconf-subed-similar-p (source current)
+ (let* ((current-stripped (emacsconf-subed-prepare-string-for-matching current))
+ (distance (string-distance current-stripped
+ (emacsconf-subed-prepare-string-for-matching source)))
+ (ratio (/ (* 100.0 distance) (length current-stripped)))
+ (threshold 10))
+ (< ratio threshold)))
+
+(defun emacsconf-subed-source-backward ()
+ (interactive)
+ (with-current-buffer (get-buffer emacsconf-subed-subtitle-source)
+ (subed-backward-subtitle-end)
+ (set-mark (point))
+ (subed-jump-to-subtitle-text)
+ (when (get-buffer-window (current-buffer))
+ (set-window-point
+ (get-buffer-window (current-buffer)) (point))
+ (with-selected-window (get-buffer-window (current-buffer))
+ (recenter)))))
+
+(defun emacsconf-subed-source-forward ()
+ (interactive)
+ (with-current-buffer (get-buffer emacsconf-subed-subtitle-source)
+ (subed-forward-subtitle-end)
+ (set-mark (point))
+ (subed-jump-to-subtitle-text)
+ (when (get-buffer-window (current-buffer))
+ (set-window-point
+ (get-buffer-window (current-buffer)) (point))
+ (with-selected-window (get-buffer-window (current-buffer))
+ (recenter)))))
+
+(defun emacsconf-subed-match-up-subtitles ()
+ (interactive)
+ (let* ((source
+ (with-current-buffer (get-buffer emacsconf-subed-subtitle-source)
+ (or (subed-subtitle-text) (subed-forward-subtitle-text) (subed-subtitle-text)))))
+ (subed-set-subtitle-text source)
+ (subed-forward-subtitle-text)
+ (emacsconf-subed-source-forward)))
+
+(defun emacsconf-subed-match-multiple (prefix)
+ "Set up for matching multiple subtitles."
+ (interactive "p")
+ (when (or (>= prefix 4) (null emacsconf-subed-subtitle-source))
+ (setq-local emacsconf-subed-subtitle-source (read-buffer "Source subtitles: " nil t)))
+ (set-transient-map
+ (let ((map (make-sparse-keymap)))
+ (define-key map (kbd "RET") #'emacsconf-subed-match-up-subtitles)
+ (define-key map (kbd "SPC") #'emacsconf-subed-match-up-subtitles)
+ (define-key map (kbd "<up>") #'subed-backward-subtitle-text)
+ (define-key map (kbd "<down>") #'subed-forward-subtitle-text)
+ (define-key map (kbd "<S-up>") #'emacsconf-subed-source-backward)
+ (define-key map (kbd "<S-down>") #'emacsconf-subed-source-forward)
+ (define-key map "k" #'subed-kill-subtitle)
+ (define-key map "m" #'emacsconf-subed-merge-and-fill)
+ map)
+ t))
+
(provide 'emacsconf-subed)
;;; emacsconf-subed.el ends here