From 4dac85ef27c35d526edcb5c6bc1965bb26f84472 Mon Sep 17 00:00:00 2001 From: Sacha Chua Date: Sat, 12 Dec 2020 00:52:38 -0500 Subject: More tweaks to code --- 2020/submissions.org | 448 ++++++++------------------------------------------- 1 file changed, 64 insertions(+), 384 deletions(-) (limited to '2020/submissions.org') diff --git a/2020/submissions.org b/2020/submissions.org index e6a41970..5d7416f7 100644 --- a/2020/submissions.org +++ b/2020/submissions.org @@ -12,13 +12,15 @@ You can check out the Org Mode source for this page by following the [[https://e #+TOC: headlines 3 - * Actions -- [[elisp:(org-babel-execute-buffer)][Execute buffer]] - start with this to get the function definitions +You may want to =(setq org-confirm-babel-evaluate nil)=. + +- [[elisp:(org-babel-load-file "organizers-notebook.org")][Load code from organizers-notebook.org]] - run this to load function definitions or reset conf/info if the talk info changes - [[elisp:(conf/update-talks)][Update talk info]] - run this after changing talk time or order - [[elisp:(let ((org-agenda-skip-function (lambda () (unless (elt (org-heading-components) 2) (org-entry-end-position)))) (org-agenda-files (list (buffer-file-name)))) (org-agenda-list nil (org-read-date nil nil "2020-11-28") 2))][View as agenda]] -- [[elisp:conf/generate-schedule-files][Generate schedule files]] +- [[elisp:conf/generate-schedule-files][Generate schedule files]] - updates schedule-details.md; set conf/autogenerate-talk-pages to t if you want to overwrite individual talk pages too. +- [[elisp:(org-md-export-to-markdown)][Export this file to Markdown]] To update the information included in the individual talk page, execute the buffer, update the talk's info/TALKID.md file. @@ -32,17 +34,17 @@ execute the buffer, update the talk's info/TALKID.md file. |------------+-------------+--------------+-------------------------------| | Needs: 112 | 768 | 880 | Talks | | | | | NOVEMBER 28 (Saturday) | -| | | | 9:00 - 9:30 Opening remarks | +| | | | Day 1 opening remarks | | Needs: 30 | 120 | 150 | 9:30 - 12:00 User talks | | | | | 12:00 - 13:00 Lunch | | Needs: 12 | 168 | 180 | 13:00 - 16:30 Afternoon talks | -| | | | 16:30 - 17:00 Closing remarks | +| | | | Day 1 closing remarks | | | | | NOVEMBER 29 (Sunday) | -| | | | 9:00 - 9:10 Opening remarks | +| | | | Day 2 opening remarks | | Extra: 3 | 140 | 137 | 9:10 - 12:00 Morning talks | | | | | 12:00 - 13:00 Lunch | | Needs: 25 | 168 | 193 | 13:00 - 16:30 Afternoon talks | -| | | | 16:30 - 17:00 Closing remarks | +| | | | Day 2 closing remarks | #+END: ** By slot @@ -52,17 +54,17 @@ execute the buffer, update the talk's info/TALKID.md file. **** 9:30 - 12:00 User talks :morning: #+BEGIN: columnview :hlines 1 :id "talks" :format "%SCHEDULED%20ITEM%NAME%PREREC%AVAILABILITY" :match "sat+morning/!" -| SCHEDULED | ITEM | NAME | PREREC | AVAILABILITY | -|------------------------------+------------------------------------------------------------------------+-----------------------------+----------------+-------------------------------------| -| <2020-11-28 Sat 09:33-09:37> | Emacs News Highlights | Sacha Chua | ready | prerec, maybe 9am-3pm EST | -| <2020-11-28 Sat 09:40-10:00> | An Emacs Developer Story: From User to Package Maintainer | Leo Vivier | | 9am-12pm EST | -| <2020-11-28 Sat 10:03-10:13> | Idea to Novel Superstructure: Emacs for Writing | Bala Ramadurai | done, live Q&A | 8:30am EST-12pm EST | -| <2020-11-28 Sat 10:16-10:26> | Music in Plain Text | Jonathan Gregory | planned | ok | -| <2020-11-28 Sat 10:29-10:45> | Bard Bivou(m)acs - Building a bandcamp-like page for an album of music | Grant Shangreaux | | 10am-5pm EST, daylight Central US | -| <2020-11-28 Sat 10:48-10:58> | Trivial Emacs Kits | Corwin Brust | | ok | -| <2020-11-28 Sat 11:01-11:21> | Beyond Vim and Emacs: A Scalable UI Paradigm | Sid Kasivajhula (countvaj`) | | PST, so maybe 11 AM EST - 5 PM EST? | -| <2020-11-28 Sat 11:24-11:44> | Building reproducible Emacs | Andrew Tropin (abcdw) | | After 4pm UTC - 11am-5pm EST | -| <2020-11-28 Sat 11:47-12:27> | On why most of the best features in eev look like 5-minute hacks | Eduardo Ochs (edrx) | planned | ok | +| SCHEDULED | ITEM | NAME | PREREC | AVAILABILITY | +|------------------------------+------------------------------------------------------------------------+--------------------------------+----------------+-------------------------------------| +| <2020-11-28 Sat 09:33-09:37> | Emacs News Highlights | Sacha Chua | ready | prerec, maybe 9am-3pm EST | +| <2020-11-28 Sat 09:40-10:00> | An Emacs Developer Story: From User to Package Maintainer | Leo Vivier | | 9am-12pm EST | +| <2020-11-28 Sat 10:03-10:13> | Idea to Novel Superstructure: Emacs for Writing | Bala Ramadurai | done, live Q&A | 8:30am EST-12pm EST | +| <2020-11-28 Sat 10:16-10:26> | Music in Plain Text | Jonathan Gregory | planned | ok | +| <2020-11-28 Sat 10:29-10:45> | Bard Bivou(m)acs - Building a bandcamp-like page for an album of music | Grant Shangreaux | | 10am-5pm EST, daylight Central US | +| <2020-11-28 Sat 10:48-10:58> | Trivial Emacs Kits | Corwin Brust (mplsCorwin) | | ok | +| <2020-11-28 Sat 11:01-11:21> | Beyond Vim and Emacs: A Scalable UI Paradigm | Sid Kasivajhula (countvajhula) | | PST, so maybe 11 AM EST - 5 PM EST? | +| <2020-11-28 Sat 11:24-11:44> | Building reproducible Emacs | Andrew Tropin (abcdw) | | After 4pm UTC - 11am-5pm EST | +| <2020-11-28 Sat 11:47-12:27> | On why most of the best features in eev look like 5-minute hacks | Eduardo Ochs (edrx) | planned | ok | #+END: **** 13:00 - 16:30 Afternoon talks :afternoon: @@ -81,7 +83,7 @@ execute the buffer, update the talk's info/TALKID.md file. | <2020-11-28 Sat 15:17-15:37> | Org-mode and Org-Roam for Scholars and Researchers | Noorah Alhasan | | ok | | <2020-11-28 Sat 15:40-16:00> | Org-roam: Technical Presentation | Leo Vivier | | 2:30-ish EST ok with tea; in CET timezone | | <2020-11-28 Sat 16:03-16:13> | Sharing blogs (and more) with org-webring | Brett Gilio | | ok | -| <2020-11-28 Sat 16:16-16:36> | OMG Macros | Corwin Brust | | ok | +| <2020-11-28 Sat 16:16-16:36> | OMG Macros | Corwin Brust (mplsCorwin) | | ok | #+END: *** Sunday @@ -102,18 +104,18 @@ execute the buffer, update the talk's info/TALKID.md file. **** 13:00 - 16:30 Afternoon talks :afternoon: #+BEGIN: columnview :hlines 1 :id "talks" :format "%SCHEDULED%20ITEM%NAME%PREREC%AVAILABILITY" :match "sun+afternoon/!" -| SCHEDULED | ITEM | NAME | PREREC | AVAILABILITY | -|------------------------------+---------------------------------------------------+----------------------------------+---------+----------------------------------------------------------------------------| -| <2020-11-29 Sun 13:03-13:13> | Emacs as a Highschooler: How It Changed My Life | Pierce Wang | done | Sun 12pm EST onwards | -| <2020-11-29 Sun 13:16-13:26> | State of Retro Gaming in Emacs | Vasilij "wasamasa" Schneidermann | done | 8am-10pm CET, so 9am-3pm EST | -| <2020-11-29 Sun 13:29-14:19> | Welcome To The Dungeon | Erik Elmshauser and Corwin Brust | | ok | -| <2020-11-29 Sun 14:22-14:42> | Pathing of Least Resistance | Erik Elmshauser and Corwin Brust | | ok | -| <2020-11-29 Sun 14:45-14:55> | A tour of vterm | Gabriele Bozzola (@sbozzolo) | done | MST, so 11am-5pm EST | -| <2020-11-29 Sun 14:58-15:14> | Lakota Language and Emacs | Grant Shangreaux | done | Central time, 10am EST-5pm EST | -| <2020-11-29 Sun 15:17-15:41> | Object Oriented Code in the Gnus Newsreader | Eric Abrahamsen | planned | ok | -| <2020-11-29 Sun 15:44-16:04> | Maxima a computer algebra system in Emacs | Fermin MF | | afternoon if possible | -| <2020-11-29 Sun 16:07-16:27> | Extend Emacs to Modern GUI Applications with EAF | Matthew Zeng | | after 12pm EST both days; confirmed available November 29, 1pm-4:30pm EST. | -| <2020-11-29 Sun 16:30-16:40> | WAVEing at Repetitive Repetitive Repetitive Music | Zachary Kanfer | done | ok | +| SCHEDULED | ITEM | NAME | PREREC | AVAILABILITY | +|------------------------------+---------------------------------------------------+-----------------------------------------------+---------+----------------------------------------------------------------------------| +| <2020-11-29 Sun 13:03-13:13> | Emacs as a Highschooler: How It Changed My Life | Pierce Wang | done | Sun 12pm EST onwards | +| <2020-11-29 Sun 13:16-13:26> | State of Retro Gaming in Emacs | Vasilij "wasamasa" Schneidermann | done | 8am-10pm CET, so 9am-3pm EST | +| <2020-11-29 Sun 13:29-14:19> | Welcome To The Dungeon | Erik Elmshauser and Corwin Brust | | ok | +| <2020-11-29 Sun 14:22-14:42> | Pathing of Least Resistance | Erik Elmshauser and Corwin Brust (mplsCorwin) | | ok | +| <2020-11-29 Sun 14:45-14:55> | A tour of vterm | Gabriele Bozzola (@sbozzolo) | done | MST, so 11am-5pm EST | +| <2020-11-29 Sun 14:58-15:14> | Lakota Language and Emacs | Grant Shangreaux | done | Central time, 10am EST-5pm EST | +| <2020-11-29 Sun 15:17-15:41> | Object Oriented Code in the Gnus Newsreader | Eric Abrahamsen | planned | ok | +| <2020-11-29 Sun 15:44-16:04> | Maxima a computer algebra system in Emacs | Fermin MF | | afternoon if possible | +| <2020-11-29 Sun 16:07-16:30> | Extend Emacs to Modern GUI Applications with EAF | Matthew Zeng | | after 12pm EST both days; confirmed available November 29, 1pm-4:30pm EST. | +| <2020-11-29 Sun 16:33-16:43> | WAVEing at Repetitive Repetitive Repetitive Music | Zachary Kanfer | done | ok | #+END: ** Table for all talks @@ -126,8 +128,8 @@ execute the buffer, update the talk's info/TALKID.md file. | done, live Q&A | <2020-11-28 Sat 10:03-10:13> | Idea to Novel Superstructure: Emacs for Writing | Bala Ramadurai | | planned | <2020-11-28 Sat 10:16-10:26> | Music in Plain Text | Jonathan Gregory | | | <2020-11-28 Sat 10:29-10:45> | Bard Bivou(m)acs - Building a bandcamp-like page for an album of music | Grant Shangreaux | -| | <2020-11-28 Sat 10:48-10:58> | Trivial Emacs Kits | Corwin Brust | -| | <2020-11-28 Sat 11:01-11:21> | Beyond Vim and Emacs: A Scalable UI Paradigm | Sid Kasivajhula (countvaj`) | +| | <2020-11-28 Sat 10:48-10:58> | Trivial Emacs Kits | Corwin Brust (mplsCorwin) | +| | <2020-11-28 Sat 11:01-11:21> | Beyond Vim and Emacs: A Scalable UI Paradigm | Sid Kasivajhula (countvajhula) | | | <2020-11-28 Sat 11:24-11:44> | Building reproducible Emacs | Andrew Tropin (abcdw) | | planned | <2020-11-28 Sat 11:47-12:27> | On why most of the best features in eev look like 5-minute hacks | Eduardo Ochs (edrx) | | | <2020-11-28 Sat 13:03-13:13> | Orgmode - your life in plain text | Rainer König | @@ -141,7 +143,7 @@ execute the buffer, update the talk's info/TALKID.md file. | | <2020-11-28 Sat 15:17-15:37> | Org-mode and Org-Roam for Scholars and Researchers | Noorah Alhasan | | | <2020-11-28 Sat 15:40-16:00> | Org-roam: Technical Presentation | Leo Vivier | | | <2020-11-28 Sat 16:03-16:13> | Sharing blogs (and more) with org-webring | Brett Gilio | -| | <2020-11-28 Sat 16:16-16:36> | OMG Macros | Corwin Brust | +| | <2020-11-28 Sat 16:16-16:36> | OMG Macros | Corwin Brust (mplsCorwin) | | done | <2020-11-29 Sun 09:13-09:30> | Emacs development update | John Wiegley | | | <2020-11-29 Sun 09:33-09:53> | Powering-up Special Blocks | Musa Al-hassy | | 24min | <2020-11-29 Sun 09:56-10:46> | Incremental Parsing with emacs-tree-sitter | Tuấn-Anh Nguyễn | @@ -151,13 +153,13 @@ execute the buffer, update the talk's info/TALKID.md file. | done | <2020-11-29 Sun 13:03-13:13> | Emacs as a Highschooler: How It Changed My Life | Pierce Wang | | done | <2020-11-29 Sun 13:16-13:26> | State of Retro Gaming in Emacs | Vasilij "wasamasa" Schneidermann | | | <2020-11-29 Sun 13:29-14:19> | Welcome To The Dungeon | Erik Elmshauser and Corwin Brust | -| | <2020-11-29 Sun 14:22-14:42> | Pathing of Least Resistance | Erik Elmshauser and Corwin Brust | +| | <2020-11-29 Sun 14:22-14:42> | Pathing of Least Resistance | Erik Elmshauser and Corwin Brust (mplsCorwin) | | done | <2020-11-29 Sun 14:45-14:55> | A tour of vterm | Gabriele Bozzola (@sbozzolo) | | done | <2020-11-29 Sun 14:58-15:14> | Lakota Language and Emacs | Grant Shangreaux | | planned | <2020-11-29 Sun 15:17-15:41> | Object Oriented Code in the Gnus Newsreader | Eric Abrahamsen | | | <2020-11-29 Sun 15:44-16:04> | Maxima a computer algebra system in Emacs | Fermin MF | -| | <2020-11-29 Sun 16:07-16:27> | Extend Emacs to Modern GUI Applications with EAF | Matthew Zeng | -| done | <2020-11-29 Sun 16:30-16:40> | WAVEing at Repetitive Repetitive Repetitive Music | Zachary Kanfer | +| | <2020-11-29 Sun 16:07-16:30> | Extend Emacs to Modern GUI Applications with EAF | Matthew Zeng | +| done | <2020-11-29 Sun 16:33-16:43> | WAVEing at Repetitive Repetitive Repetitive Music | Zachary Kanfer | #+END: * Talks @@ -196,17 +198,17 @@ SCHEDULED: <2020-11-28 Sat 09:00-09:30> | -30 | 150 | 120 | #+BEGIN: columnview :hlines 1 :id "talks" :format "%SCHEDULED%20ITEM%NAME%PREREC%AVAILABILITY" :match "sat+morning/!" -| SCHEDULED | ITEM | NAME | PREREC | AVAILABILITY | -|------------------------------+------------------------------------------------------------------------+-----------------------------+----------------+-------------------------------------| -| <2020-11-28 Sat 09:33-09:37> | Emacs News Highlights | Sacha Chua | ready | prerec, maybe 9am-3pm EST | -| <2020-11-28 Sat 09:40-10:00> | An Emacs Developer Story: From User to Package Maintainer | Leo Vivier | | 9am-12pm EST | -| <2020-11-28 Sat 10:03-10:13> | Idea to Novel Superstructure: Emacs for Writing | Bala Ramadurai | done, live Q&A | 8:30am EST-12pm EST | -| <2020-11-28 Sat 10:16-10:26> | Music in Plain Text | Jonathan Gregory | planned | ok | -| <2020-11-28 Sat 10:29-10:45> | Bard Bivou(m)acs - Building a bandcamp-like page for an album of music | Grant Shangreaux | | 10am-5pm EST, daylight Central US | -| <2020-11-28 Sat 10:48-10:58> | Trivial Emacs Kits | Corwin Brust | | ok | -| <2020-11-28 Sat 11:01-11:21> | Beyond Vim and Emacs: A Scalable UI Paradigm | Sid Kasivajhula (countvaj`) | | PST, so maybe 11 AM EST - 5 PM EST? | -| <2020-11-28 Sat 11:24-11:44> | Building reproducible Emacs | Andrew Tropin (abcdw) | | After 4pm UTC - 11am-5pm EST | -| <2020-11-28 Sat 11:47-12:27> | On why most of the best features in eev look like 5-minute hacks | Eduardo Ochs (edrx) | planned | ok | +| SCHEDULED | ITEM | NAME | PREREC | AVAILABILITY | +|------------------------------+------------------------------------------------------------------------+--------------------------------+----------------+-------------------------------------| +| <2020-11-28 Sat 09:33-09:37> | Emacs News Highlights | Sacha Chua | ready | prerec, maybe 9am-3pm EST | +| <2020-11-28 Sat 09:40-10:00> | An Emacs Developer Story: From User to Package Maintainer | Leo Vivier | | 9am-12pm EST | +| <2020-11-28 Sat 10:03-10:13> | Idea to Novel Superstructure: Emacs for Writing | Bala Ramadurai | done, live Q&A | 8:30am EST-12pm EST | +| <2020-11-28 Sat 10:16-10:26> | Music in Plain Text | Jonathan Gregory | planned | ok | +| <2020-11-28 Sat 10:29-10:45> | Bard Bivou(m)acs - Building a bandcamp-like page for an album of music | Grant Shangreaux | | 10am-5pm EST, daylight Central US | +| <2020-11-28 Sat 10:48-10:58> | Trivial Emacs Kits | Corwin Brust (mplsCorwin) | | ok | +| <2020-11-28 Sat 11:01-11:21> | Beyond Vim and Emacs: A Scalable UI Paradigm | Sid Kasivajhula (countvajhula) | | PST, so maybe 11 AM EST - 5 PM EST? | +| <2020-11-28 Sat 11:24-11:44> | Building reproducible Emacs | Andrew Tropin (abcdw) | | After 4pm UTC - 11am-5pm EST | +| <2020-11-28 Sat 11:47-12:27> | On why most of the best features in eev look like 5-minute hacks | Eduardo Ochs (edrx) | planned | ok | #+END: **** User stories @@ -935,7 +937,7 @@ SCHEDULED: <2020-11-28 Sat 12:00-13:00> | <2020-11-28 Sat 15:17-15:37> | Org-mode and Org-Roam for Scholars and Researchers | Noorah Alhasan | | ok | | <2020-11-28 Sat 15:40-16:00> | Org-roam: Technical Presentation | Leo Vivier | | 2:30-ish EST ok with tea; in CET timezone | | <2020-11-28 Sat 16:03-16:13> | Sharing blogs (and more) with org-webring | Brett Gilio | | ok | -| <2020-11-28 Sat 16:16-16:36> | OMG Macros | Corwin Brust | | ok | +| <2020-11-28 Sat 16:16-16:36> | OMG Macros | Corwin Brust (mplsCorwin) | | ok | #+END: **** in-progress Orgmode - your life in plain text :standard:tutorial:org:nudge: @@ -2234,18 +2236,18 @@ SCHEDULED: <2020-11-29 Sun 12:00-13:00> #+BEGIN: columnview :hlines 1 :id "talks" :format "%SCHEDULED%20ITEM%NAME%PREREC%AVAILABILITY" :match "sun+afternoon/!" -| SCHEDULED | ITEM | NAME | PREREC | AVAILABILITY | -|------------------------------+---------------------------------------------------+----------------------------------+---------+----------------------------------------------------------------------------| -| <2020-11-29 Sun 13:03-13:13> | Emacs as a Highschooler: How It Changed My Life | Pierce Wang | done | Sun 12pm EST onwards | -| <2020-11-29 Sun 13:16-13:26> | State of Retro Gaming in Emacs | Vasilij "wasamasa" Schneidermann | done | 8am-10pm CET, so 9am-3pm EST | -| <2020-11-29 Sun 13:29-14:19> | Welcome To The Dungeon | Erik Elmshauser and Corwin Brust | | ok | -| <2020-11-29 Sun 14:22-14:42> | Pathing of Least Resistance | Erik Elmshauser and Corwin Brust | | ok | -| <2020-11-29 Sun 14:45-14:55> | A tour of vterm | Gabriele Bozzola (@sbozzolo) | done | MST, so 11am-5pm EST | -| <2020-11-29 Sun 14:58-15:14> | Lakota Language and Emacs | Grant Shangreaux | done | Central time, 10am EST-5pm EST | -| <2020-11-29 Sun 15:17-15:41> | Object Oriented Code in the Gnus Newsreader | Eric Abrahamsen | planned | ok | -| <2020-11-29 Sun 15:44-16:04> | Maxima a computer algebra system in Emacs | Fermin MF | | afternoon if possible | -| <2020-11-29 Sun 16:07-16:27> | Extend Emacs to Modern GUI Applications with EAF | Matthew Zeng | | after 12pm EST both days; confirmed available November 29, 1pm-4:30pm EST. | -| <2020-11-29 Sun 16:30-16:40> | WAVEing at Repetitive Repetitive Repetitive Music | Zachary Kanfer | done | ok | +| SCHEDULED | ITEM | NAME | PREREC | AVAILABILITY | +|------------------------------+---------------------------------------------------+-----------------------------------------------+---------+----------------------------------------------------------------------------| +| <2020-11-29 Sun 13:03-13:13> | Emacs as a Highschooler: How It Changed My Life | Pierce Wang | done | Sun 12pm EST onwards | +| <2020-11-29 Sun 13:16-13:26> | State of Retro Gaming in Emacs | Vasilij "wasamasa" Schneidermann | done | 8am-10pm CET, so 9am-3pm EST | +| <2020-11-29 Sun 13:29-14:19> | Welcome To The Dungeon | Erik Elmshauser and Corwin Brust | | ok | +| <2020-11-29 Sun 14:22-14:42> | Pathing of Least Resistance | Erik Elmshauser and Corwin Brust (mplsCorwin) | | ok | +| <2020-11-29 Sun 14:45-14:55> | A tour of vterm | Gabriele Bozzola (@sbozzolo) | done | MST, so 11am-5pm EST | +| <2020-11-29 Sun 14:58-15:14> | Lakota Language and Emacs | Grant Shangreaux | done | Central time, 10am EST-5pm EST | +| <2020-11-29 Sun 15:17-15:41> | Object Oriented Code in the Gnus Newsreader | Eric Abrahamsen | planned | ok | +| <2020-11-29 Sun 15:44-16:04> | Maxima a computer algebra system in Emacs | Fermin MF | | afternoon if possible | +| <2020-11-29 Sun 16:07-16:30> | Extend Emacs to Modern GUI Applications with EAF | Matthew Zeng | | after 12pm EST both days; confirmed available November 29, 1pm-4:30pm EST. | +| <2020-11-29 Sun 16:33-16:43> | WAVEing at Repetitive Repetitive Repetitive Music | Zachary Kanfer | done | ok | #+END: **** in-progress Emacs as a Highschooler: How It Changed My Life :standard:user:community:timing:nudge: @@ -3070,328 +3072,6 @@ the target time. (org-entry-get (point) "TARGET_TIME"))) #+end_src -Some conference-related functions - -#+begin_src emacs-lisp :exports code :results none :tangle "conf.el" - (defun conf/find-talk (filter &optional info) - (setq info (or info (conf/filter-talks conf/info))) - (when (stringp filter) (setq filter (list filter))) - (or (seq-find (lambda (o) (string= (plist-get o :talk-id) (car filter))) info) - (seq-find (lambda (o) - (let ((case-fold-search t) - (all (mapconcat (lambda (f) (plist-get o f)) '(:title :speakers :talk-id) " "))) - (null (seq-contains-p - (mapcar (lambda (condition) (string-match condition all)) filter) - nil)))) - info))) - -(defun conf/goto-talk-id (id) - (goto-char (org-find-property "TALK_ID" id))) - -(defun conf/assign-ids () - "Assign numeric talk IDs." - (interactive) - (goto-char (point-min)) - ;; Determine the maximum ID assigned so far - (let ((id - (1+ - (apply 'max - (or (mapcar - 'string-to-number - (org-map-entries - (lambda () - (let ((org-trust-scanner-tags t)) - (org-entry-get (point) "TALK_ID"))) "TALK_ID>0" 'file)) - '(0)))))) - (goto-char (point-min)) - (while (re-search-forward "^ *:NAME: " nil t) - (unless (org-entry-get (point) "TALK_ID") - (org-set-property "TALK_ID" (format "%02d" id)) - (org-set-property "CUSTOM_ID" (format "talk%02d" id)) - (setq id (1+ id)))))) - -(defun conf/update-talks () - (interactive) - (save-excursion - (conf/update-times) - (conf/update-tables) - (conf/update-schedules))) - -(defun conf/update-times () - (goto-char (point-min)) - (org-map-entries - (lambda () - (when (org-entry-get (point) "TARGET_TIME") - (conf/org-sum-min-time-in-subtree) - (org-entry-put - (point) - "DIFFERENCE" - (let ((diff - (- - (string-to-number (org-entry-get (point) "TARGET_TIME")) - (string-to-number (org-entry-get (point) "MIN_TIME_SUM"))))) - (cond - ((> diff 0) (format "Extra: %d" diff)) - ((< diff 0) (format "Needs: %d" (- diff))) - (t "")))))) nil 'file)) -(defun conf/update-tables () - (goto-char (point-min)) - (while (re-search-forward "#\\+CALL: check_time()" nil t) - (org-ctrl-c-ctrl-c)) - (goto-char (point-min)) - (while (re-search-forward "#\\+BEGIN: columnview" nil t) - (org-ctrl-c-ctrl-c))) -(defun conf/update-schedules () - (interactive) - (goto-char (org-find-exact-headline-in-buffer "Talks")) - (let (current-time scheduled end-time duration (buffer (seconds-to-time (* 3 60)))) ;; assumption: 3 minutes between talks - (org-map-entries (lambda () - (if (org-entry-get (point) "FIXED_TIME") - (setq current-time (org-get-scheduled-time (point)))) - (when (org-entry-get (point) "MIN_TIME") - (setq duration (* (string-to-number (org-entry-get (point) "MIN_TIME")) 60) - end-time (time-add current-time (seconds-to-time duration))) - (org-set-property "SCHEDULED" (format "%s-%s" (org-format-time-string "%Y-%m-%d %H:%M" current-time) - (org-format-time-string "%H:%M" end-time))) - (setq current-time (time-add end-time buffer)))) - nil 'tree))) - -(defun conf/org-sum-min-time-in-subtree () - "Add up all the MIN_TIME properties of headings underneath the current one -The total is written to the MIN_TIME_SUM property of this heading" - (interactive) - (org-entry-put - (point) - "MIN_TIME_SUM" - (save-excursion - (format "%d" - (apply - '+ - (mapcar 'string-to-number - (delq nil - (org-map-entries - (lambda () (org-entry-get (point) "MIN_TIME")) nil 'tree)))))))) - -#+end_src -** Generate schedule file - -#+begin_src emacs-lisp :results none :eval yes :exports code :tangle "conf.el" - -(defvar conf/timezones '("EST" "America/Los_Angeles" "UTC" "CET" "Asia/Singapore") "List of timezones") - -(defun conf/get-talk-info () - (let (talk results) - (org-map-entries (lambda () - (let ((heading (org-heading-components))) - (cond - ((and (elt heading 2) (or (null talk) - (<= (car heading) - (plist-get talk :level)))) ;; has a todo, therefore is a talk - (when talk (setq results (cons talk results))) - (setq talk (list - :type 'talk - :title (elt heading 4) - :talk-id (org-entry-get (point) "TALK_ID") - :status (elt heading 2) - :level (car heading) - :scheduled (org-entry-get (point) "SCHEDULED") - :duration (org-entry-get (point) "DURATION") - :time (org-entry-get (point) "MIN_TIME") - :speakers (org-entry-get (point) "NAME")))) - ((string-match "^ *Talk information *$" (elt heading 4)) - (plist-put talk :info - (org-export-as 'md t nil t))) - ((or (null talk) (< (car heading) (plist-get talk :level))) ;; heading above - (when talk - (setq results (cons talk results)) - (setq talk nil)) - (setq results (cons - (list :type 'headline - :level (car heading) - :speakers (org-entry-get (point) "NAME") - :duration (org-entry-get (point) "DURATION") - :talk-id (org-entry-get (point) "TALK_ID") - :title (elt heading 4) - :scheduled (org-entry-get (point) "SCHEDULED")) - results)))))) - nil 'tree) - (when talk (setq results (cons talk results))) - (reverse results))) - -(defun conf/filter-talks (list) - "Return only talk info in LIST." - (seq-filter - (lambda (talk) (eq (plist-get talk :type) 'talk)) - list)) - -(defun conf/format-talk-link (talk) - (and talk (if (plist-get talk :talk-id) - (format "%s" - (plist-get talk :talk-id) - (plist-get talk :title)) - (plist-get talk :title)))) - -(defun conf/format-talk-info-as-schedule (info) - (format "%s
" - (mapconcat - (lambda (o) - (let* ((time-fmt "%l:%M %p") - (timestamp (org-timestamp-from-string (plist-get o :scheduled))) - (start (if timestamp (format-time-string time-fmt (org-timestamp-to-time (org-timestamp-split-range timestamp))) "")) - (end (if timestamp (format-time-string time-fmt (org-timestamp-to-time (org-timestamp-split-range timestamp t))) "")) - (title (plist-get o :title)) - (speakers (plist-get o :speakers))) - (if (eq (plist-get o :type) 'headline) - (format "%s" - (if (plist-get o :talk-id) - (conf/format-talk-link o) - title)) - (format "~%s~%s%s%s" - start end (conf/format-talk-link o) speakers)))) - (cdr info) "\n"))) - -(defun conf/filter-talks (info) - (seq-filter (lambda (o) (plist-get o :talk-id)) info)) - -(defun conf/split-out-talk-information () - (interactive) - (let ((talks (conf/filter-talks (conf/get-talk-info-from-file)))) - (mapc (lambda (o) - (with-temp-buffer - (insert - (format "# %s\n%s\n\n%s" - (plist-get o :title) - (plist-get o :speakers) - (plist-get o :info))) - (write-file (expand-file-name (format "%s.md" (plist-get o :talk-id)) "info")))) - talks))) - -(defun conf/format-talk-pages (info) - (let* ((talks (conf/filter-talks info)) - (next-talks (cdr talks)) - (prev-talks (cons nil talks))) - (mapc (lambda (o) - (with-temp-buffer - (let* ((timestamp (org-timestamp-from-string (plist-get o :scheduled))) - (next-talk (conf/format-talk-link (pop next-talks))) - (prev-talk (conf/format-talk-link (pop prev-talks))) - (schedule (mapconcat - (lambda (tz) - (format "%s - %s" - (format-time-string "%A, %b %e %Y, ~%l:%M %p" - (org-timestamp-to-time (org-timestamp-split-range timestamp)) tz) - (format-time-string "%l:%M %p %Z" - (org-timestamp-to-time (org-timestamp-split-range timestamp t)) tz))) - conf/timezones - " \n")) - (nav-links (format "Back to the [[schedule]] \n%s%s" - (if prev-talk (format "Previous: %s \n" prev-talk) "") - (if next-talk (format "Next: %s \n" next-talk) "")))) - (insert (format "[[%s title=\"%s\"]] -[[%s copyright=\"Copyright © 2020 %s\"]] - -\n - -%s - -[[!inline pages=\"internal(2020/info/%s)\" raw=\"yes\"]] - -%s - -%s - -" - "!meta" - (replace-regexp-in-string "\"" "\\\\\"" (plist-get o :title)) - "!meta" - (plist-get o :speakers) - nav-links - (plist-get o :talk-id) - schedule - nav-links))) - (write-file (format "talks/%s.md" (plist-get o :talk-id))))) - talks))) - -(defun conf/get-talk-info-from-file (&optional filename) - (with-temp-buffer - (insert-file-contents (or filename "submissions.org")) - (org-mode) - (org-show-all) - (goto-char (point-min)) - (goto-char (org-find-property "ID" "talks")) - (conf/get-talk-info))) - (defvar conf/info nil) - (setq conf/info (conf/get-talk-info-from-file)) - -(defun conf/generate-pad-template () - (interactive) - (let ((talks (conf/filter-talks (conf/get-talk-info-from-file filename)))) - (with-current-buffer (find-file "pad-template.md") - (erase-buffer) - (insert - (concat - "Conference info, how to watch/participate: -Code of conduct: - -" - (mapconcat - (lambda (o) - (format "**%s** -Speaker(s): %s -Talk page: - -,*Questions:* - -,* Put your questions here, most recent on top -,* sample text - -,*Links:* - -,* sample text -,* sample text - -,*Other notes:* - -,* sample text -,* sample text -
-
-" (plist-get o :title) (plist-get o :speakers) (plist-get o :talk-id))) talks " \n \n"))) - (save-buffer)))) - -(defun conf/generate-talks-page () - (let ((info conf/info)) - (with-temp-buffer - (find-file "talk-details.md") - (erase-buffer) - (insert (format "%s
DurationTitleSpeakers
" - (mapconcat - (lambda (o) - (let* ((title (plist-get o :title)) - (speakers (plist-get o :speakers))) - (if (null (plist-get o :talk-id)) - (format "%s" (conf/format-talk-link o)) - (format "%s%s%s" - (plist-get o :duration) - (conf/format-talk-link o) - (plist-get o :speakers))))) - info "\n"))) - (save-buffer)))) - -(defun conf/generate-schedule-files (&optional filename) - (interactive) - (let ((info (conf/get-talk-info-from-file filename))) - ;(conf/generate-talks-page) - (with-temp-buffer - (insert (conf/format-talk-info-as-schedule info)) - (write-file "schedule-details.md")) - (conf/format-talk-pages info))) -#+end_src - -#+RESULTS: - -** Copy the pad - ** Yasnippet for adding video links to the individual talk page #+begin_example @@ -3431,7 +3111,7 @@ or with the source code from the directory listing: Copyright (C) 2020 Sacha Chua, and authors of submitted proposals -The EmacsConf 2020 submissions is part of the EmacsConf wiki, and is +The EmacsConf 2020 submissions are part of the EmacsConf wiki, and is dual-licensed under the terms of the Creative Commons Attribution-ShareAlike 4.0 International Public License; and the GNU General Public License as published by the Free Software Foundation, -- cgit v1.2.3