From c1a32ad031d6a5fc7dc644fcfc442c3c9a6e107c Mon Sep 17 00:00:00 2001 From: Sacha Chua Date: Fri, 9 Dec 2022 22:46:25 -0500 Subject: code for adding questions to the Q&A transcript --- emacsconf-extract.el | 35 +++++++++++++++++++++++++++++++++++ emacsconf-publish.el | 30 ++++++++++++++++++++++++++---- emacsconf-subed.el | 8 ++++---- emacsconf.el | 13 ++++++++----- 4 files changed, 73 insertions(+), 13 deletions(-) diff --git a/emacsconf-extract.el b/emacsconf-extract.el index 77c8d0b..e158764 100644 --- a/emacsconf-extract.el +++ b/emacsconf-extract.el @@ -270,5 +270,40 @@ (unless (string= (or questions "") "") (insert "## Questions and answers\n\n" questions "\n\n")) ))) + +(defun emacsconf-extract-question-headings (slug) + (with-temp-buffer + (insert-file-contents + (expand-file-name + (concat slug ".md") + (expand-file-name "talks" + (expand-file-name emacsconf-year emacsconf-directory)))) + (goto-char (point-min)) + (let (results) + (while (re-search-forward "^-[ \t]+Q:[  ]*" nil t) + (setq results + (cons + (string-trim + (replace-regexp-in-string + "[\n \t ]+" " " + (replace-regexp-in-string + "\\\\" + "" + (buffer-substring + (point) + (and (re-search-forward "^[ \t]+-\\|^[ \t]+*$" nil t) + (match-beginning 0)))))) + results))) + (nreverse results)))) +;; (emacsconf-extract-question-headings "asmblox") + +(defun emacsconf-extract-insert-note-with-question-heading (question) + (interactive + (list + (completing-read + "Question: " + (emacsconf-extract-question-headings + (emacsconf-get-slug-from-string (file-name-base (buffer-file-name))))))) + (insert "NOTE " question "\n\n")) (provide 'emacsconf-extract) ;;; emacsconf-extract.el ends here diff --git a/emacsconf-publish.el b/emacsconf-publish.el index 29467d9..6449bf4 100644 --- a/emacsconf-publish.el +++ b/emacsconf-publish.el @@ -30,7 +30,7 @@ :type 'string :group 'emacsconf) -(defcustom emacsconf-main-extensions '(".webm" "--main.webm" "--main.org" ".org" ".odp" ".pdf" ".el" "--compressed56.webm" "--main.vtt" "--main_fr.vtt" "--main_ja.vtt" "--main_es.vtt" "--chapters.vtt" "--main--chapters.vtt" "--script.fountain") +(defcustom emacsconf-main-extensions '(".webm" "--main.webm" "--main.org" ".org" ".odp" ".pdf" ".el" "--compressed56.webm" "--main.vtt" "--main_fr.vtt" "--main_ja.vtt" "--main_es.vtt" "--chapters.vtt" "--main--chapters.vtt" "--script.fountain" "--main.pdf" "--slides.pdf") "Extensions to list on public pages." :type '(repeat string) :group 'emacsconf) @@ -468,6 +468,7 @@ resources." :public 1 :video-id (concat (plist-get o :slug) "-qanda") :toobnix-url nil + :captions-edited (plist-get o :qa-captions-edited) :video-file (expand-file-name (concat (file-name-sans-extension (plist-get o :video-slug)) "--answers.webm") emacsconf-cache-dir)) @@ -1170,7 +1171,26 @@ Entries are sorted chronologically, with different tracks interleaved." (assoc-default "TO_STREAM" by-status) "\n")) (let ((status "TO_ARCHIVE")) (format - "

%d talk(s) to archive (%d minutes)

    %s
" + "

%d talk(s) to archive (%d minutes)

Last year, we copied the questions, answers, and notes into the wiki +pages, removing people's nicks and combining duplicate +things (ex: question was asked on IRC and was copied over to the +pad). That way, it's easier for people to see the questions and +answers without needing to listen to everything again, and the +speakers can see any questions they've missed and all the +wonderful feedback people have shared. You can see the talk pages +at https://emacsconf.org/2021/talks/ +for examples of a Discussion section with sections for Q&A and +feedback (ex: frownies, +freedom). +If you feel like collecting things from the Q&A (or any other +one), that would be great. You can either edit the wiki page +directly (which involves git and ssh), or you can e-mail things +to emacsconf-submit@gnu.org +and I'll merge them in. - Sacha
    %s
" (length (assoc-default status by-status)) (emacsconf-sum :video-time (assoc-default status by-status)) (mapconcat (lambda (f) @@ -1735,7 +1755,7 @@ This video is available under the terms of the Creative Commons Attribution-Shar )) -(defvar emacsconf-publish-autocommit-wiki t) +(defvar emacsconf-publish-autocommit-wiki nil) (defun emacsconf-publish-commit-and-push-wiki-maybe (&optional do-it message) (interactive (list t)) (let ((default-directory emacsconf-directory)) @@ -1748,7 +1768,9 @@ This video is available under the terms of the Creative Commons Attribution-Shar (declare (indent 0) (debug t)) `(progn ,@body - (emacsconf-publish-commit-and-push-wiki-maybe t (and (stringp ,(car body)) ,(car body))))) + (emacsconf-publish-commit-and-push-wiki-maybe + ,emacsconf-publish-autocommit-wiki + (and (stringp ,(car body)) ,(car body))))) (defun emacsconf-publish-schedule-svg-snippets () (interactive) diff --git a/emacsconf-subed.el b/emacsconf-subed.el index b219a6a..ec02a9d 100644 --- a/emacsconf-subed.el +++ b/emacsconf-subed.el @@ -29,8 +29,8 @@ (require 'subed) -(defcustom emacsconf-subed-subtitle-max-length 60 - "Target number of characters." +(defcustom emacsconf-subed-subtitle-max-length nil + "Target number of characters. Default to `fill-column'." :group 'emacsconf :type 'integer) @@ -123,7 +123,7 @@ TYPE can be 'end if you want the match end instead of the beginning." (defun emacsconf-reflow-automatically () (interactive) - (let* ((subtitle-text-limit emacsconf-subed-subtitle-max-length) + (let* ((subtitle-text-limit (or emacsconf-subed-subtitle-max-length fill-column)) (auto-space-msecs 700) (subtitles (mapconcat @@ -287,7 +287,7 @@ Create it if necessary." "Do some simple validation of subtitles." (interactive) (while (not (eobp)) - (if (> (length (subed-subtitle-text)) emacsconf-subed-subtitle-max-length) + (if (> (length (subed-subtitle-text)) (or emacsconf-subed-subtitle-max-length fill-column)) (error "Length %d exceeds maximum length" (length (subed-subtitle-text)))) (if (< (- (subed-subtitle-msecs-stop) (subed-subtitle-msecs-start)) emacsconf-subed-subtitle-minimum-duration-ms) (error "Duration %d is less than minimum" (- (subed-subtitle-msecs-stop) (subed-subtitle-msecs-start)))) diff --git a/emacsconf.el b/emacsconf.el index 395db45..7157efd 100644 --- a/emacsconf.el +++ b/emacsconf.el @@ -311,10 +311,13 @@ (emacsconf-search-talk-info (emacsconf-complete-talk info) info)) (defun emacsconf-get-slug-from-string (search) - (if (listp search) (setq search (car search))) - (if (and search (string-match "\\(.*?\\) - " search)) - (match-string 1 search) - search)) + (when (listp search) (setq search (car search))) + (cond + ((and search (stringp search) (string-match "\\(.*?\\) - " search)) + (match-string 1 search)) + ((and (stringp search) (string-match (concat "^" emacsconf-id "-" emacsconf-year "-\\(.+?\\)--") search)) + (match-string 1 search)) + (t search))) (defun emacsconf-go-to-talk (search) (interactive (list (emacsconf-complete-talk))) @@ -1232,7 +1235,7 @@ Filter by TRACK if given. Use INFO as the list of talks." (or info (emacsconf-get-volunteer-info)))) (defun emacsconf-complete-volunteer (&optional info) - (setq info (or info (emacsconf-get-volunteer-info info))) + (setq info (or info (emacsconf-get-volunteer-info))) (let* ((choices (emacsconf-volunteer-emails-for-completion)) (choice (completing-read -- cgit v1.2.3