branch: externals/eev
commit 77675d5a9fefd65de5917188fa45f634d83aa6fb
Author: Eduardo Ochs <eduardoo...@gmail.com>
Commit: Eduardo Ochs <eduardoo...@gmail.com>

    Generate the functions like `find-{c}video' automatically.
---
 ChangeLog                |  42 ++++
 VERSION                  |   4 +-
 eev-strange-functions.el |   5 +-
 eev-tlinks.el            | 229 +++++++++++++++------
 eev-videolinks.el        | 524 +++++------------------------------------------
 5 files changed, 264 insertions(+), 540 deletions(-)

diff --git a/ChangeLog b/ChangeLog
index 9de86ef885..0b6f4937a9 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,45 @@
+2024-02-20  Eduardo Ochs  <eduardoo...@gmail.com>
+
+       * eev-videolinks.el (find-eev2019video, find-eev2020video)
+       (find-eev2021video, find-eev2021bvideo, find-eevnavvideo)
+       (find-eevtemplvideo, find-eevfherelvideo, find-eevtestblsvideo)
+       (find-eevvlinksvideo, find-oficina20210video)
+       (find-oficina2021avideo, find-oficina2021bvideo)
+       (find-2021ssrvideo, find-2021workshop1video)
+       (find-2021workshop2video, find-2021workshop3video)
+       (find-2021workshop4video, find-2021workshop5video)
+       (find-2021workshop6video, find-2021orgfornonusersvideo)
+       (find-2021ffllvideo, find-2022eevmake0video)
+       (find-2022findeevanggvideo, find-2022findelispintrovideo)
+       (find-2022pict2eluavideo, find-2022eevwconfigpt1video)
+       (find-2022eevwconfigpt2video, find-2022eevwconfigvideo)
+       (find-2022yttranscriptvideo, find-2022tikzvideo)
+       (find-eev2022klavideo, find-eev2022pyvideo)
+       (find-eev2023replsvideo, find-eev2023replsbvideo)
+       (find-2024gitvideo, find-2024luasovideo): deleted - all these
+       functions are now generated by a single call to
+       `(code-1stclassvideos)'.
+       (ee-all-cs-with-subs, code-lsubs, find-code-lsubs)
+       (ee-code-lsubs, code-all-lsubs, find-code-all-lsubs)
+       (ee-code-all-lsubs): deleted - these functions were used to
+       generate some of the functions generated by the call to
+       `(code-1stclassvideos)'.
+
+       * eev-tlinks.el (ee-find-1stclassvideo-links): rewritten.
+       (ee-1stclassvideo-basicinfo, ee-1stclassvideo-basicsexps)
+       (ee-1stclassvideo-defuns, code-1stclassvideo)
+       (find-code-1stclassvideo, ee-code-1stclassvideo): new functions.
+       (ee-find-1stclassvideo-defun): deleted.
+       (code-1stclassvideos, find-code-1stclassvideos)
+       (ee-code-1stclassvideos): new functions.
+
+2024-02-19  Eduardo Ochs  <eduardoo...@gmail.com>
+
+       * eev-tlinks.el (ee-1stclassvideo-dlsubs): small changes.
+       (ee-1stclassvideo-dlsubs0): new function.
+
+       * eev-kl-here.el (kl, kll, kls): now they are aliases.
+
 2024-02-18  Eduardo Ochs  <eduardoo...@gmail.com>
 
        * eev-strange-functions.el (ee-sf-1stclassvideo-p): new file.
diff --git a/VERSION b/VERSION
index 9cf453ae52..4413529ba2 100644
--- a/VERSION
+++ b/VERSION
@@ -1,2 +1,2 @@
-Mon Feb 19 13:50:45 GMT 2024
-Mon Feb 19 10:50:45 -03 2024
+Tue Feb 20 06:41:18 GMT 2024
+Tue Feb 20 03:41:18 -03 2024
diff --git a/eev-strange-functions.el b/eev-strange-functions.el
index 4ae7f59218..dd1142c25e 100644
--- a/eev-strange-functions.el
+++ b/eev-strange-functions.el
@@ -72,8 +72,7 @@
     find-1stclassvideo-links))
 
 (defvar ee-sf-1stclassvideo-re
-  (rx bos "find-" (group (+ any))
-      (or "video" "hsubs" "lsubs") eos))
+  (rx bos "find-" (group (+ any)) (or "video" "hsubs" "lsubs") eos))
 
 (defun ee-sf-1stclassvideo-stem (f)
   (and (symbolp f)
@@ -116,7 +115,7 @@
          (hsubs       (if hsubs    (ee-template0 hsubs-t0)    ""))
          (lsubs       (if hassubs  (ee-template0 lsubs-t0)    ""))
          (index       (if hasindex (ee-template0 index-t0)    ""))
-         (dlsubs      (ee-1stclassvideos-dlsubs c))
+         (dlsubs      (ee-1stclassvideo-dlsubs c))
          )
      `("foo"
        "bar"
diff --git a/eev-tlinks.el b/eev-tlinks.el
index 6b638d2761..1a0ffc4b27 100644
--- a/eev-tlinks.el
+++ b/eev-tlinks.el
@@ -19,7 +19,7 @@
 ;;
 ;; Author:     Eduardo Ochs <eduardoo...@gmail.com>
 ;; Maintainer: Eduardo Ochs <eduardoo...@gmail.com>
-;; Version:    20240217
+;; Version:    20240220
 ;; Keywords:   e-scripts
 ;;
 ;; Latest version: <http://anggtwu.net/eev-current/eev-tlinks.el>
@@ -138,6 +138,12 @@
 ;;   «.ee-use-red-bullets»             (to "ee-use-red-bullets")
 ;; «.find-angg-es-links»               (to "find-angg-es-links")
 ;; «.find-1stclassvideo-links»         (to "find-1stclassvideo-links")
+;;   «.ee-1stclassvideo-basicinfo»     (to "ee-1stclassvideo-basicinfo")
+;;   «.ee-1stclassvideo-basicsexps»    (to "ee-1stclassvideo-basicsexps")
+;;   «.ee-1stclassvideo-dlsubs»                (to "ee-1stclassvideo-dlsubs")
+;;   «.ee-1stclassvideo-defuns»                (to "ee-1stclassvideo-defuns")
+;;   «.code-1stclassvideo»             (to "code-1stclassvideo")
+;;   «.code-1stclassvideos»            (to "code-1stclassvideos")
 ;; «.find-1stclassvideoindex»          (to "find-1stclassvideoindex")
 ;; «.find-1stclassvideohsubs»          (to "find-1stclassvideohsubs")
 ;; «.find-1stclassvideolsubs»          (to "find-1stclassvideolsubs")
@@ -3204,7 +3210,12 @@ This function is used by `ee-0x0-upload-region'."
 
 
 
-
+;;;               _       _                      __  _           _ _      _    
   
+;;;  _ __ ___  __| |  ___| |_ __ _ _ __ ___     / / | |__  _   _| | | ___| |_ 
___ 
+;;; | '__/ _ \/ _` | / __| __/ _` | '__/ __|   / /  | '_ \| | | | | |/ _ \ __/ 
__|
+;;; | | |  __/ (_| | \__ \ || (_| | |  \__ \  / /   | |_) | |_| | | |  __/ 
|_\__ \
+;;; |_|  \___|\__,_| |___/\__\__,_|_|  |___/ /_/    |_.__/ 
\__,_|_|_|\___|\__|___/
+;;;                                                                            
   
 ;; «find-eepitch-bullet-links»  (to ".find-eepitch-bullet-links")
 ;; «find-red-star-links»        (to ".find-red-star-links")
 ;; Skel: (find-find-links-links-new "red-star" "" "")
@@ -3303,7 +3314,13 @@ This function is used by `ee-0x0-upload-region'."
 
 
 
-
+;;;                                          
+;;;   __ _ _ __   __ _  __ _        ___  ___ 
+;;;  / _` | '_ \ / _` |/ _` |_____ / _ \/ __|
+;;; | (_| | | | | (_| | (_| |_____|  __/\__ \
+;;;  \__,_|_| |_|\__, |\__, |      \___||___/
+;;;              |___/ |___/                 
+;;
 ;; «find-angg-es-links»  (to ".find-angg-es-links")
 ;; Skel: (find-find-links-links-new "angg-es" "" "")
 ;; Test: (find-angg-es-links)
@@ -3394,6 +3411,12 @@ This function is used by `ee-0x0-upload-region'."
 
 
 
+;;;  _     _       _                     _     _            
+;;; / |___| |_ ___| | __ _ ___ _____   _(_) __| | ___  ___  
+;;; | / __| __/ __| |/ _` / __/ __\ \ / / |/ _` |/ _ \/ _ \ 
+;;; | \__ \ || (__| | (_| \__ \__ \\ V /| | (_| |  __/ (_) |
+;;; |_|___/\__\___|_|\__,_|___/___/ \_/ |_|\__,_|\___|\___/ 
+;;;                                                         
 ;; «find-1stclassvideo-links»  (to ".find-1stclassvideo-links")
 ;; Skel: (find-find-links-links-new "1stclassvideo" "c" "body")
 ;;  See: (find-eev "eev-videolinks.el" "first-class-videos")
@@ -3448,20 +3471,38 @@ This function is used by `ee-0x0-upload-region'."
 
 ;; Test:
 ;; (find-estring-elisp (ee-find-1stclassvideo-links "eev2021"))
+;; (find-estring-elisp (ee-find-1stclassvideo-links "2021ssr"))
 ;;
 (defun ee-find-1stclassvideo-links (c)
   "An internal function used by `find-1stclassvideo-links'."
+  (let* ((basicinfo   (ee-1stclassvideo-basicinfo c))
+        (basicsexps  (ee-1stclassvideo-basicsexps c))
+        (dlsubs      (ee-1stclassvideo-dlsubs c))
+        (defuns      (ee-1stclassvideo-defuns c)))
+    (ee-template0 "\
+{basicinfo}\
+;;
+{basicsexps}\
+;;
+{dlsubs}\
+
+;; See:
+;; (find-video-links-intro \"9. First-class videos\")
+;; (find-eev \"eev-videolinks.el\" \"first-class-videos\")
+;; (find-eev \"eev-videolinks.el\" \"second-class-videos\")
+
+{defuns}
+")))
+
+;; «ee-1stclassvideo-basicinfo»  (to ".ee-1stclassvideo-basicinfo")
+;; Tests: (find-estring (ee-1stclassvideo-basicinfo "eev2021"))
+;;        (find-estring (ee-1stclassvideo-basicinfo "2021ssr"))
+;;
+(defun ee-1stclassvideo-basicinfo (c)
   (ee-let*-macro-1stclassvideo-c
    c
    (let* ((hsubsurl-t0 ";; HSubs: {hsubs}\n")
-         (hsubs-t0    ";; HSubs: (find-{c}hsubs \"{subsinit}\")\n")
-         (lsubs-t0    ";; LSubs: (find-{c}lsubs \"{subsinit}\")\n")
-         (index-t0    ";; Index: (find-1stclassvideo-index \"{c}\")\n")
-         (hsubsurl    (if hsubs    (ee-template0 hsubsurl-t0) ""))
-         (hsubs       (if hsubs    (ee-template0 hsubs-t0)    ""))
-         (lsubs       (if hassubs  (ee-template0 lsubs-t0)    ""))
-         (index       (if hasindex (ee-template0 index-t0)    ""))
-         (dlsubs      (ee-1stclassvideos-dlsubs c)))
+         (hsubsurl    (if hsubs (ee-template0 hsubsurl-t0) "")))
      (ee-template0 "\
 ;; Title: {title}
 ;; MP4:   {mp4}
@@ -3471,75 +3512,149 @@ This function is used by `ee-0x0-upload-region'."
 ;; Comment: {comment}
 ;; Date:    {date}
 ;; Length:  {length}
+"))))
+
+;; «ee-1stclassvideo-basicsexps»  (to ".ee-1stclassvideo-basicsexps")
+;; Tests: (find-estring (ee-1stclassvideo-basicsexps "eev2021"))
+;;        (find-estring (ee-1stclassvideo-basicsexps "2021ssr"))
 ;;
+(defun ee-1stclassvideo-basicsexps (c &optional pos)
+  (ee-let*-macro-1stclassvideo-c
+   c
+   (let* ((init        (or pos subsinit "00:00"))
+         (hsubs-t0    ";; HSubs: (find-{c}hsubs \"{init}\")\n")
+         (lsubs-t0    ";; LSubs: (find-{c}lsubs \"{init}\")\n")
+         (index-t0    ";; Index: (find-1stclassvideo-index \"{c}\")\n")
+         (hsubs-sexp  (if hsubs    (ee-template0 hsubs-t0)    ""))
+         (lsubs-sexp  (if hassubs  (ee-template0 lsubs-t0)    ""))
+         (index-sexp  (if hasindex (ee-template0 index-t0)    "")))
+     (ee-template0 "\
 ;; Play:  (find-{c}video \"00:00\")
-{hsubs}\
-{lsubs}\
-{index}\
+{hsubs-sexp}\
+{lsubs-sexp}\
+{index-sexp}\
 ;; Info:  (find-1stclassvideo-links \"{c}\")
 ;;        (find-1stclassvideo-def   \"{c}\")
-{dlsubs}\
-
-;; See:
-;; (find-video-links-intro \"9. First-class videos\")
-;; (find-eev \"eev-videolinks.el\" \"first-class-videos\")
-;; (find-eev \"eev-videolinks.el\" \"second-class-videos\")
 "))))
 
-
-
-;; Test:
-;; (find-estring-elisp (ee-find-1stclassvideo-defun "C" "M" "H"))
-;;
-(defun ee-find-1stclassvideo-defun (c mp4stem hash)
-  (ee-template0 "\
-;; <find-{c}video>
-;; Info: (find-1stclassvideo-links \"{c}\")
-;; Play: (find-{c}video \"0:00\")
-\(defun find-{c}video (&optional time &rest rest)
-  \"Play one of the first-class videos of eev starting at TIME.
-For more info on this particular video, run:
-  (find-1stclassvideo-links \\\"{c}\\\")\"
-  (interactive)
-  (find-1stclassvideo-video \"{c}\" time))
-"))
-
-
-;; Tests: (ee-1stclassvideos-dlsubs "2022pict2elua")
-;;        (find-1stclassvideo-links "2022pict2elua")
-;;        (ee-1stclassvideos-dlsubs "2021workshop6")
-;;        (find-1stclassvideo-links "2021workshop6")
-;; See: (find-eev "eev-videolinks.el" "ee-1stclassvideos-field")
+;; «ee-1stclassvideo-dlsubs»  (to ".ee-1stclassvideo-dlsubs")
+;; Tests: (find-estring (ee-1stclassvideo-dlsubs0 "eev2021" nil nil))
+;;        (find-estring (ee-1stclassvideo-dlsubs0 "eev2021" nil t))
+;;        (find-estring (ee-1stclassvideo-dlsubs0 "eev2021" t nil))
+;;        (find-estring (ee-1stclassvideo-dlsubs0 "eev2021" t t))
+;;        (find-estring (ee-1stclassvideo-dlsubs  "eev2021"))
+;;        (find-estring (ee-1stclassvideo-dlsubs  "2021ssr"))
 ;;
-(defun ee-1stclassvideos-dlsubs (c)
-  "An internal function used by `find-1stclassvideo-links'."
+(defun ee-1stclassvideo-dlsubs (c)
   (ee-let*-macro-1stclassvideo-c
    c
-   (let* ((template00 ";;
+   (ee-1stclassvideo-dlsubs0 c mp4found hassubs)))
+
+(defun ee-1stclassvideo-dlsubs0 (c haslocal hassubs)
+  "An internal function used by `find-1stclassvideo-links'."
+  (let* ((template-nolocal-nosubs "\
 ;; You don't have a local copy of this video.
 ;; To download a local copy, run this:
 ;;       (find-1stclassvideo-psne \"{c}\")
 ;; This video doesn't have subtitles.\n")
-         (template01 ";;
+        (template-nolocal-hassubs "\
 ;; You don't have a local copy of this video.
 ;; To download a local copy of the video with subtitles, run:
 ;;       (find-1stclassvideo-psne \"{c}\")\n")
-         (template10 ";;
+        (template-haslocal-nosubs "\
 ;; We have a local copy of this video.
 ;; This video doesn't have subtitles.\n")
-         (template11 ";;
+        (template-haslocal-hassubs "\
 ;; You have a local copy of this video.
 ;; The upstream copy of this video has subtitles.
 ;; If you don't have a local copy of its subtitles, or if you
 ;; want to update the local copy of the subtitles, run this:
 ;;        (find-1stclassvideo-psne \"{c}\")\n"))
-     (if mp4found
-        (if hassubs
-            (ee-template0 template11)
-          (ee-template0 template10))
-       (if hassubs
-          (ee-template0 template01)
-        (ee-template0 template00))))))
+    (if haslocal
+       (if hassubs
+           (ee-template0 template-haslocal-hassubs)
+         (ee-template0   template-haslocal-nosubs))
+      (if hassubs
+         (ee-template0   template-nolocal-hassubs)
+       (ee-template0     template-nolocal-nosubs)))))
+
+;; «ee-1stclassvideo-defuns»  (to ".ee-1stclassvideo-defuns")
+;; Tests: (find-estring-elisp (ee-1stclassvideo-defuns "eev2021"))
+;;        (find-estring-elisp (ee-1stclassvideo-defuns "2021ssr"))
+;; (find-eev "eev-videolinks.el" "code-lsubs")
+;;
+(defun ee-1stclassvideo-defuns (c)
+  (ee-let*-macro-1stclassvideo-c
+   c
+   (if hassubs
+       (ee-template0 "\
+;; From: (find-code-1stclassvideo \"{c}\")
+;;  See: (find-1stclassvideo-links \"{c}\")
+;;
+(defun find-{c}video (&optional time &rest rest)
+  (interactive)
+  (find-1stclassvideo-video \"{c}\" time))
+
+(defun find-{c}lsubs (&optional time &rest rest)
+  (interactive)
+  (apply 'find-1stclassvideo-lsubs \"{c}\" time rest))
+
+(defun find-{c}hsubs (&optional time &rest rest)
+  (interactive)
+  (find-1stclassvideo-hsubs \"{c}\" time))
+")
+     (ee-template0 "\
+;; From: (find-code-1stclassvideo \"{c}\")
+;;  See: (find-1stclassvideo-links \"{c}\")
+;;
+(defun find-{c}video (&optional time &rest rest)
+  (interactive)
+  (find-1stclassvideo-video \"{c}\" time))
+"))))
+
+
+
+;; «code-1stclassvideo»  (to ".code-1stclassvideo")
+;; Skel:  (find-code-xxx-links "1stclassvideo" "c" "")
+;; Tests: (find-code-1stclassvideo "eev2021")
+;;        (ee-1stclassvideo-defuns "2021ssr"))
+;;
+(defun      code-1stclassvideo (c)
+  "Define the \"strange functions\" associated to the video C.
+When C is the identifier of a first-class video with subtitles,
+like \"eev2021\", define three strange functions:
+`find-{c}video', `find-{c}hsubs', and `find-{c}lsubs'. When C is
+the identifier of a first-class video without subtitles, define
+only `find-{c}video'."
+  (eval (ee-read      (ee-code-1stclassvideo c))))
+
+(defun find-code-1stclassvideo (c)
+  (find-estring-elisp (ee-code-1stclassvideo c)))
+(defun   ee-code-1stclassvideo (c)
+  (ee-1stclassvideo-defuns c))
+
+
+
+;; «code-1stclassvideos»  (to ".code-1stclassvideos")
+;; Skel:  (find-code-xxx-links "1stclassvideos" "cs" "")
+;; Tests: (find-code-1stclassvideos '("eev2021" "2021ssr"))
+;;        (find-code-1stclassvideos)
+;; See:   (find-eev "eev-videolinks.el" "strange-functions")
+;;
+(defun      code-1stclassvideos (&optional cs)
+  "Define the \"strange functions\" associated to the videos in CS.
+CS must be a list of identifiers of first-class videos. When CS
+is nil, use the result of (ee-1stclassvideos)."
+  (eval (ee-read      (ee-code-1stclassvideos cs))))
+
+(defun find-code-1stclassvideos (&optional cs)
+  (find-estring-elisp (ee-code-1stclassvideos cs)))
+(defun   ee-code-1stclassvideos (&optional cs)
+  (concat
+   ";; See: (find-eev \"eev-tlinks.el\" \"code-1stclassvideos\")\n\n"
+   (mapconcat 'ee-code-1stclassvideo
+             (or cs (ee-1stclassvideos))
+             "\n\n")))
 
 
 
diff --git a/eev-videolinks.el b/eev-videolinks.el
index ec4b66e39d..2be9e75ea4 100644
--- a/eev-videolinks.el
+++ b/eev-videolinks.el
@@ -19,7 +19,7 @@
 ;;
 ;; Author:     Eduardo Ochs <eduardoo...@gmail.com>
 ;; Maintainer: Eduardo Ochs <eduardoo...@gmail.com>
-;; Version:    20240205
+;; Version:    20240220
 ;; Keywords:   e-scripts
 ;;
 ;; Latest version: <http://anggtwu.net/eev-current/eev-videolinks.el>
@@ -37,44 +37,6 @@
 ;; «.select»                           (to "select")
 ;;   «.ee-use-youtube-videos»          (to "ee-use-youtube-videos")
 ;;   «.ee-use-local-videos»            (to "ee-use-local-videos")
-;; «.first-class-videos»               (to "first-class-videos")
-;;  «.video-tutorials»                 (to "video-tutorials")
-;;   «.find-eev2019video»              (to "find-eev2019video")
-;;   «.find-eev2020video»              (to "find-eev2020video")
-;;   «.find-eev2021video»              (to "find-eev2021video")
-;;   «.find-eev2021bvideo»             (to "find-eev2021bvideo")
-;;   «.find-eevnavvideo»               (to "find-eevnavvideo")
-;;   «.find-eevtemplvideo»             (to "find-eevtemplvideo")
-;;   «.find-eevfherelvideo»            (to "find-eevfherelvideo")
-;;   «.find-eevtestblsvideo»           (to "find-eevtestblsvideo")
-;;   «.find-eevvlinksvideo»            (to "find-eevvlinksvideo")
-;;   «.find-oficina20210video»         (to "find-oficina20210video")
-;;   «.find-oficina2021avideo»         (to "find-oficina2021avideo")
-;;   «.find-oficina2021bvideo»         (to "find-oficina2021bvideo")
-;;   «.find-2021ssrvideo»              (to "find-2021ssrvideo")
-;;   «.find-2021workshop1video»                (to "find-2021workshop1video")
-;;   «.find-2021workshop2video»                (to "find-2021workshop2video")
-;;   «.find-2021workshop3video»                (to "find-2021workshop3video")
-;;   «.find-2021workshop4video»                (to "find-2021workshop4video")
-;;   «.find-2021workshop5video»                (to "find-2021workshop5video")
-;;   «.find-2021workshop6video»                (to "find-2021workshop6video")
-;;   «.find-2021orgfornonusersvideo»   (to "find-2021orgfornonusersvideo")
-;;   «.find-2021ffllvideo»             (to "find-2021ffllvideo")
-;;   «.find-2022eevmake0video»         (to "find-2022eevmake0video")
-;;   «.find-2022findeevanggvideo»      (to "find-2022findeevanggvideo")
-;;   «.find-2022findelispintrovideo»   (to "find-2022findelispintrovideo")
-;;   «.find-2022pict2eluavideo»                (to "find-2022pict2eluavideo")
-;;   «.find-2022eevwconfigpt1video»    (to "find-2022eevwconfigpt1video")
-;;   «.find-2022eevwconfigpt2video»    (to "find-2022eevwconfigpt2video")
-;;   «.find-2022eevwconfigvideo»       (to "find-2022eevwconfigvideo")
-;;   «.find-2022yttranscriptvideo»     (to "find-2022yttranscriptvideo")
-;;   «.find-2022tikzvideo»             (to "find-2022tikzvideo")
-;;   «.find-eev2022klavideo»           (to "find-eev2022klavideo")
-;;   «.find-eev2022pyvideo»            (to "find-eev2022pyvideo")
-;;   «.find-eev2023replsvideo»         (to "find-eev2023replsvideo")
-;;   «.find-eev2023replsbvideo»                (to "find-eev2023replsbvideo")
-;;   «.find-2024gitvideo»              (to "find-2024gitvideo")
-;;   «.find-2024luasovideo»            (to "find-2024luasovideo")
 ;; «.more-info»                                (to "more-info")
 ;; «.ee-1stclassvideos-info»           (to "ee-1stclassvideos-info")
 ;;   «.eev2019»                                (to "eev2019")
@@ -116,8 +78,9 @@
 ;; «.second-class-videos»              (to "second-class-videos")
 ;;   «.code-eevvideo»                  (to "code-eevvideo")
 ;;   «.code-youtubevideo»              (to "code-youtubevideo")
-;; «.code-lsubs»                       (to "code-lsubs")
-;;   «.code-all-lsubs»                 (to "code-all-lsubs")
+;; «.first-class-videos»               (to "first-class-videos")
+;;  «.video-tutorials»                 (to "video-tutorials")
+;; «.strange-functions»                        (to "strange-functions")
 
 ;;; Commentary:
 
@@ -328,393 +291,6 @@ of the videos and play them with mpv. Compare with
 
 
 
-;;;      _       __                 
-;;;   __| | ___ / _|_   _ _ __  ___ 
-;;;  / _` |/ _ \ |_| | | | '_ \/ __|
-;;; | (_| |  __/  _| |_| | | | \__ \
-;;;  \__,_|\___|_|  \__,_|_| |_|___/
-;;;                                 
-;; «first-class-videos»  (to ".first-class-videos")
-;; «video-tutorials»     (to ".video-tutorials")
-;;
-;; This section contains one `defun' for each of one of the
-;; first-class videos. See:
-;;
-;;   (find-video-links-intro "9. First-class videos")
-;;   (find-1stclassvideos)
-;;
-;; If we defined them with `code-eevvideo' they wouldn't have
-;; docstrings and `find-efunction' wouldn't be able to find their
-;; definitions. Try:
-;;
-;;   (find-efunctiondescr 'find-eev2019video)
-;;   (find-efunction      'find-eev2019video)
-
-
-
-;; «find-eev2019video»  (to ".find-eev2019video")
-;; Info: (find-1stclassvideo-links "eev2019")
-;; Play: (find-eev2019video "0:00")
-(defun find-eev2019video (&optional time &rest rest)
-  "Play one of the first-class videos of eev starting at TIME.
-For more info on this particular video, run:
-  (find-1stclassvideo-links \"eev2019\")"
-  (interactive)
-  (find-1stclassvideo-video "eev2019" time))
-
-;; «find-eev2020video»  (to ".find-eev2020video")
-;; Info: (find-1stclassvideo-links "eev2020")
-;; Play: (find-eev2020video "0:00")
-(defun find-eev2020video (&optional time &rest rest)
-  "Play one of the first-class videos of eev starting at TIME.
-For more info on this particular video, run:
-  (find-1stclassvideo-links \"eev2020\")"
-  (interactive)
-  (find-1stclassvideo-video "eev2020" time))
-
-;; «find-eev2021video»  (to ".find-eev2021video")
-;; Info: (find-1stclassvideo-links "eev2021")
-;; Play: (find-eev2021video "0:00")
-(defun find-eev2021video (&optional time &rest rest)
-  "Play one of the first-class videos of eev starting at TIME.
-For more info on this particular video, run:
-  (find-1stclassvideo-links \"eev2021\")"
-  (interactive)
-  (find-1stclassvideo-video "eev2021" time))
-
-;; «find-eev2021bvideo»  (to ".find-eev2021bvideo")
-;; Info: (find-1stclassvideo-links "eev2021b")
-;; Play: (find-eev2021bvideo "0:00")
-(defun find-eev2021bvideo (&optional time &rest rest)
-  "Play one of the first-class videos of eev starting at TIME.
-For more info on this particular video, run:
-  (find-1stclassvideo-links \"eev2021b\")"
-  (interactive)
-  (find-1stclassvideo-video "eev2021b" time))
-
-;; «find-eevnavvideo»  (to ".find-eevnavvideo")
-;; Info: (find-1stclassvideo-links "eevnav")
-;; Play: (find-eevnavvideo "0:00")
-(defun find-eevnavvideo (&optional time &rest rest)
-  "Play one of the first-class videos of eev starting at TIME.
-For more info on this particular video, run:
-  (find-1stclassvideo-links \"eevnav\")"
-  (interactive)
-  (find-1stclassvideo-video "eevnav" time))
-
-;; «find-eevtemplvideo»  (to ".find-eevtemplvideo")
-;; Info: (find-1stclassvideo-links "eevtempl")
-;; Play: (find-eevtemplvideo "0:00")
-(defun find-eevtemplvideo (&optional time &rest rest)
-  "Play one of the first-class videos of eev starting at TIME.
-For more info on this particular video, run:
-  (find-1stclassvideo-links \"eevtempl\")"
-  (interactive)
-  (find-1stclassvideo-video "eevtempl" time))
-
-;; «find-eevfherelvideo»  (to ".find-eevfherelvideo")
-;; Info: (find-1stclassvideo-links "eevfherel")
-;; Play: (find-eevfherelvideo "0:00")
-(defun find-eevfherelvideo (&optional time &rest rest)
-  "Play one of the first-class videos of eev starting at TIME.
-For more info on this particular video, run:
-  (find-1stclassvideo-links \"eevfherel\")"
-  (interactive)
-  (find-1stclassvideo-video "eevfherel" time))
-
-;; «find-eevtestblsvideo»  (to ".find-eevtestblsvideo")
-;; Info: (find-1stclassvideo-links "eevtestbls")
-;; Play: (find-eevtestblsvideo "0:00")
-(defun find-eevtestblsvideo (&optional time &rest rest)
-  "Play one of the first-class videos of eev starting at TIME.
-For more info on this particular video, run:
-  (find-1stclassvideo-links \"eevtestbls\")"
-  (interactive)
-  (find-1stclassvideo-video "eevtestbls" time))
-
-;; «find-eevvlinksvideo»  (to ".find-eevvlinksvideo")
-;; Info: (find-1stclassvideo-links "eevvlinks")
-;; Play: (find-eevvlinksvideo "0:00")
-(defun find-eevvlinksvideo (&optional time &rest rest)
-  "Play one of the first-class videos of eev starting at TIME.
-For more info on this particular video, run:
-  (find-1stclassvideo-links \"eevvlinks\")"
-  (interactive)
-  (find-1stclassvideo-video "eevvlinks" time))
-
-;; «find-oficina20210video»  (to ".find-oficina20210video")
-;; Info: (find-1stclassvideo-links "oficina20210")
-;; Play: (find-oficina20210video "0:00")
-(defun find-oficina20210video (&optional time &rest rest)
-  "Play one of the first-class videos of eev starting at TIME.
-For more info on this particular video, run:
-  (find-1stclassvideo-links \"oficina20210\")"
-  (interactive)
-  (find-1stclassvideo-video "oficina20210" time))
-
-;; «find-oficina2021avideo»  (to ".find-oficina2021avideo")
-;; Info: (find-1stclassvideo-links "oficina2021a")
-;; Play: (find-oficina2021avideo "0:00")
-(defun find-oficina2021avideo (&optional time &rest rest)
-  "Play one of the first-class videos of eev starting at TIME.
-For more info on this particular video, run:
-  (find-1stclassvideo-links \"oficina2021a\")"
-  (interactive)
-  (find-1stclassvideo-video "oficina2021a" time))
-
-;; «find-oficina2021bvideo»  (to ".find-oficina2021bvideo")
-;; Info: (find-1stclassvideo-links "oficina2021b")
-;; Play: (find-oficina2021bvideo "0:00")
-(defun find-oficina2021bvideo (&optional time &rest rest)
-  "Play one of the first-class videos of eev starting at TIME.
-For more info on this particular video, run:
-  (find-1stclassvideo-links \"oficina2021b\")"
-  (interactive)
-  (find-1stclassvideo-video "oficina2021b" time))
-
-;; «find-2021ssrvideo»  (to ".find-2021ssrvideo")
-;; Info: (find-1stclassvideo-links "2021ssr")
-;; Play: (find-2021ssrvideo "0:00")
-(defun find-2021ssrvideo (&optional time &rest rest)
-  "Play one of the first-class videos of eev starting at TIME.
-For more info on this particular video, run:
-  (find-1stclassvideo-links \"2021ssr\")"
-  (interactive)
-  (find-1stclassvideo-video "2021ssr" time))
-
-;; «find-2021workshop1video»  (to ".find-2021workshop1video")
-;; Info: (find-1stclassvideo-links "2021workshop1")
-;; Play: (find-2021workshop1video "0:00")
-(defun find-2021workshop1video (&optional time &rest rest)
-  "Play one of the first-class videos of eev starting at TIME.
-For more info on this particular video, run:
-  (find-1stclassvideo-links \"2021workshop1\")"
-  (interactive)
-  (find-1stclassvideo-video "2021workshop1" time))
-
-;; «find-2021workshop2video»  (to ".find-2021workshop2video")
-;; Info: (find-1stclassvideo-links "2021workshop2")
-;; Play: (find-2021workshop2video "0:00")
-(defun find-2021workshop2video (&optional time &rest rest)
-  "Play one of the first-class videos of eev starting at TIME.
-For more info on this particular video, run:
-  (find-1stclassvideo-links \"2021workshop2\")"
-  (interactive)
-  (find-1stclassvideo-video "2021workshop2" time))
-
-;; «find-2021workshop3video»  (to ".find-2021workshop3video")
-;; Info: (find-1stclassvideo-links "2021workshop3")
-;; Play: (find-2021workshop3video "0:00")
-(defun find-2021workshop3video (&optional time &rest rest)
-  "Play one of the first-class videos of eev starting at TIME.
-For more info on this particular video, run:
-  (find-1stclassvideo-links \"2021workshop3\")"
-  (interactive)
-  (find-1stclassvideo-video "2021workshop3" time))
-
-;; «find-2021workshop4video»  (to ".find-2021workshop4video")
-;; Info: (find-1stclassvideo-links "2021workshop4")
-;; Play: (find-2021workshop4video "0:00")
-(defun find-2021workshop4video (&optional time &rest rest)
-  "Play one of the first-class videos of eev starting at TIME.
-For more info on this particular video, run:
-  (find-1stclassvideo-links \"2021workshop4\")"
-  (interactive)
-  (find-1stclassvideo-video "2021workshop4" time))
-
-;; «find-2021workshop5video»  (to ".find-2021workshop5video")
-;; Info: (find-1stclassvideo-links "2021workshop5")
-;; Play: (find-2021workshop5video "0:00")
-(defun find-2021workshop5video (&optional time &rest rest)
-  "Play one of the first-class videos of eev starting at TIME.
-For more info on this particular video, run:
-  (find-1stclassvideo-links \"2021workshop5\")"
-  (interactive)
-  (find-1stclassvideo-video "2021workshop5" time))
-
-;; «find-2021workshop6video»  (to ".find-2021workshop6video")
-;; Info: (find-1stclassvideo-links "2021workshop6")
-;; Play: (find-2021workshop6video "0:00")
-(defun find-2021workshop6video (&optional time &rest rest)
-  "Play one of the first-class videos of eev starting at TIME.
-For more info on this particular video, run:
-  (find-1stclassvideo-links \"2021workshop6\")"
-  (interactive)
-  (find-1stclassvideo-video "2021workshop6" time))
-
-;; «find-2021orgfornonusersvideo»  (to ".find-2021orgfornonusersvideo")
-;; Info: (find-1stclassvideo-links "2021orgfornonusers")
-;; Play: (find-2021orgfornonusersvideo "0:00")
-(defun find-2021orgfornonusersvideo (&optional time &rest rest)
-  "Play one of the first-class videos of eev starting at TIME.
-For more info on this particular video, run:
-  (find-1stclassvideo-links \"2021orgfornonusers\")"
-  (interactive)
-  (find-1stclassvideo-video "2021orgfornonusers" time))
-
-;; «find-2021ffllvideo»  (to ".find-2021ffllvideo")
-;; Info: (find-1stclassvideo-links "2021ffll")
-;; Play: (find-2021ffllvideo "0:00")
-(defun find-2021ffllvideo (&optional time &rest rest)
-  "Play one of the first-class videos of eev starting at TIME.
-For more info on this particular video, run:
-  (find-1stclassvideo-links \"2021ffll\")"
-  (interactive)
-  (find-1stclassvideo-video "2021ffll" time))
-
-;; «find-2022eevmake0video»  (to ".find-2022eevmake0video")
-;; Info: (find-1stclassvideo-links "2022eevmake0")
-;; Play: (find-2022eevmake0video "0:00")
-(defun find-2022eevmake0video (&optional time &rest rest)
-  "Play one of the first-class videos of eev starting at TIME.
-For more info on this particular video, run:
-  (find-1stclassvideo-links \"2022eevmake0\")"
-  (interactive)
-  (find-1stclassvideo-video "2022eevmake0" time))
-
-;; «find-2022findeevanggvideo»  (to ".find-2022findeevanggvideo")
-;; Info: (find-1stclassvideo-links "2022findeevangg")
-;; Play: (find-2022findeevanggvideo "0:00")
-(defun find-2022findeevanggvideo (&optional time &rest rest)
-  "Play one of the first-class videos of eev starting at TIME.
-For more info on this particular video, run:
-  (find-1stclassvideo-links \"2022findeevangg\")"
-  (interactive)
-  (find-1stclassvideo-video "2022findeevangg" time))
-
-;; «find-2022findelispintrovideo»  (to ".find-2022findelispintrovideo")
-;; Info: (find-1stclassvideo-links "2022findelispintro")
-;; Play: (find-2022findelispintrovideo "0:00")
-(defun find-2022findelispintrovideo (&optional time &rest rest)
-  "Play one of the first-class videos of eev starting at TIME.
-For more info on this particular video, run:
-  (find-1stclassvideo-links \"2022findelispintro\")"
-  (interactive)
-  (find-1stclassvideo-video "2022findelispintro" time))
-
-;; «find-2022pict2eluavideo»  (to ".find-2022pict2eluavideo")
-;; Info: (find-1stclassvideo-links "2022pict2elua")
-;; Play: (find-2022pict2eluavideo "0:00")
-(defun find-2022pict2eluavideo (&optional time &rest rest)
-  "Play one of the first-class videos of eev starting at TIME.
-For more info on this particular video, run:
-  (find-1stclassvideo-links \"2022pict2elua\")"
-  (interactive)
-  (find-1stclassvideo-video "2022pict2elua" time))
-
-;; «find-2022eevwconfigpt1video»  (to ".find-2022eevwconfigpt1video")
-;; Info: (find-1stclassvideo-links "2022eevwconfigpt1")
-;; Play: (find-2022eevwconfigpt1video "0:00")
-(defun find-2022eevwconfigpt1video (&optional time &rest rest)
-  "Play one of the first-class videos of eev starting at TIME.
-For more info on this particular video, run:
-  (find-1stclassvideo-links \"2022eevwconfigpt1\")"
-  (interactive)
-  (find-1stclassvideo-video "2022eevwconfigpt1" time))
-
-;; «find-2022eevwconfigpt2video»  (to ".find-2022eevwconfigpt2video")
-;; Info: (find-1stclassvideo-links "2022eevwconfigpt2")
-;; Play: (find-2022eevwconfigpt2video "0:00")
-(defun find-2022eevwconfigpt2video (&optional time &rest rest)
-  "Play one of the first-class videos of eev starting at TIME.
-For more info on this particular video, run:
-  (find-1stclassvideo-links \"2022eevwconfigpt2\")"
-  (interactive)
-  (find-1stclassvideo-video "2022eevwconfigpt2" time))
-
-;; «find-2022eevwconfigvideo»  (to ".find-2022eevwconfigvideo")
-;; Info: (find-1stclassvideo-links "2022eevwconfig")
-;; Play: (find-2022eevwconfigvideo "0:00")
-(defun find-2022eevwconfigvideo (&optional time &rest rest)
-  "Play one of the first-class videos of eev starting at TIME.
-For more info on this particular video, run:
-  (find-1stclassvideo-links \"2022eevwconfig\")"
-  (interactive)
-  (find-1stclassvideo-video "2022eevwconfig" time))
-
-;; «find-2022yttranscriptvideo»  (to ".find-2022yttranscriptvideo")
-;; Info: (find-1stclassvideo-links "2022yttranscript")
-;; Play: (find-2022yttranscriptvideo "0:00")
-(defun find-2022yttranscriptvideo (&optional time &rest rest)
-  "Play one of the first-class videos of eev starting at TIME.
-For more info on this particular video, run:
-  (find-1stclassvideo-links \"2022yttranscript\")"
-  (interactive)
-  (find-1stclassvideo-video "2022yttranscript" time))
-
-;; «find-2022tikzvideo»  (to ".find-2022tikzvideo")
-;; Info: (find-1stclassvideo-links "2022tikz")
-;; Play: (find-2022tikzvideo "0:00")
-(defun find-2022tikzvideo (&optional time &rest rest)
-  "Play one of the first-class videos of eev starting at TIME.
-For more info on this particular video, run:
-  (find-1stclassvideo-links \"2022tikz\")"
-  (interactive)
-  (find-1stclassvideo-video "2022tikz" time))
-
-;; «find-eev2022klavideo»  (to ".find-eev2022klavideo")
-;; Info: (find-1stclassvideo-links "eev2022kla")
-;; Play: (find-eev2022klavideo "0:00")
-(defun find-eev2022klavideo (&optional time &rest rest)
-  "Play one of the first-class videos of eev starting at TIME.
-For more info on this particular video, run:
-  (find-1stclassvideo-links \"eev2022kla\")"
-  (interactive)
-  (find-1stclassvideo-video "eev2022kla" time))
-
-;; «find-eev2022pyvideo»  (to ".find-eev2022pyvideo")
-;; Info: (find-1stclassvideo-links "eev2022py")
-;; Play: (find-eev2022pyvideo "0:00")
-(defun find-eev2022pyvideo (&optional time &rest rest)
-  "Play one of the first-class videos of eev starting at TIME.
-For more info on this particular video, run:
-  (find-1stclassvideo-links \"eev2022py\")"
-  (interactive)
-  (find-1stclassvideo-video "eev2022py" time))
-
-;; «find-eev2023replsvideo»  (to ".find-eev2023replsvideo")
-;; Info: (find-1stclassvideo-links "eev2023repls")
-;; Play: (find-eev2023replsvideo "0:00")
-(defun find-eev2023replsvideo (&optional time &rest rest)
-  "Play one of the first-class videos of eev starting at TIME.
-For more info on this particular video, run:
-  (find-1stclassvideo-links \"eev2023repls\")"
-  (interactive)
-  (find-1stclassvideo-video "eev2023repls" time))
-
-;; «find-eev2023replsbvideo»  (to ".find-eev2023replsbvideo")
-;; Info: (find-1stclassvideo-links "eev2023replsb")
-;; Play: (find-eev2023replsbvideo "0:00")
-(defun find-eev2023replsbvideo (&optional time &rest rest)
-  "Play one of the first-class videos of eev starting at TIME.
-For more info on this particular video, run:
-  (find-1stclassvideo-links \"eev2023replsb\")"
-  (interactive)
-  (find-1stclassvideo-video "eev2023replsb" time))
-
-;; «find-2024gitvideo»  (to ".find-2024gitvideo")
-;; Info: (find-1stclassvideo-links "2024git")
-;; Play: (find-2024gitvideo "0:00")
-(defun find-2024gitvideo (&optional time &rest rest)
-  "Play one of the first-class videos of eev starting at TIME.
-For more info on this particular video, run:
-  (find-1stclassvideo-links \"2024git\")"
-  (interactive)
-  (find-1stclassvideo-video "2024git" time))
-
-;; «find-2024luasovideo»  (to ".find-2024luasovideo")
-;; Info: (find-1stclassvideo-links "2024luaso")
-;; Play: (find-2024luasovideo "0:00")
-(defun find-2024luasovideo (&optional time &rest rest)
-  "Play one of the first-class videos of eev starting at TIME.
-For more info on this particular video, run:
-  (find-1stclassvideo-links \"2024luaso\")"
-  (interactive)
-  (find-1stclassvideo-video "2024luaso" time))
-
-
-
-
 ;;;  __  __                  _        __       
 ;;; |  \/  | ___  _ __ ___  (_)_ __  / _| ___  
 ;;; | |\/| |/ _ \| '__/ _ \ | | '_ \| |_ / _ \ 
@@ -1293,8 +869,6 @@ For more info on this particular video, run:
 
 
 
-
-
 ;;;                _                                   _     _            
 ;;;   ___ ___   __| | ___        ___  _____   ____   _(_) __| | ___  ___  
 ;;;  / __/ _ \ / _` |/ _ \_____ / _ \/ _ \ \ / /\ \ / / |/ _` |/ _ \/ _ \ 
@@ -1405,58 +979,52 @@ For more info on this particular video, run:
 
 
 
-;;;                _            _           _         
-;;;   ___ ___   __| | ___      | |___ _   _| |__  ___ 
-;;;  / __/ _ \ / _` |/ _ \_____| / __| | | | '_ \/ __|
-;;; | (_| (_) | (_| |  __/_____| \__ \ |_| | |_) \__ \
-;;;  \___\___/ \__,_|\___|     |_|___/\__,_|_.__/|___/
-;;;                                                   
-;; «code-lsubs»  (to ".code-lsubs")
-;; Tests: (find-eppp (ee-all-cs-with-subs))
-;;        (find-code-lsubs "eev2023repls")
-;;        (find-code-all-lsubs '("eev2019" "eevnav"))
-;;        (find-code-all-lsubs)
+;;;      _       __                 
+;;;   __| | ___ / _|_   _ _ __  ___ 
+;;;  / _` |/ _ \ |_| | | | '_ \/ __|
+;;; | (_| |  __/  _| |_| | | | \__ \
+;;;  \__,_|\___|_|  \__,_|_| |_|___/
+;;;                                 
+;; «first-class-videos»  (to ".first-class-videos")
+;; «video-tutorials»     (to ".video-tutorials")
 ;;
-(defun ee-all-cs-with-subs ()
-  (cl-loop for entry in ee-1stclassvideos-info
-           if (ee-1stclassvideos-field (car entry) :subs)
-          collect (car entry)))
-
-;; Skels: (find-code-xxx-links "lsubs" "c" "")
-;;        (find-code-xxx-links "all-lsubs" "cs" "")
-;;    
-(defun      code-lsubs (c)
-  (eval (ee-read      (ee-code-lsubs c))))
-(defun find-code-lsubs (c)
-  (find-estring-elisp (ee-code-lsubs c)))
-(defun   ee-code-lsubs (c)
-  (ee-template0 "\
-;; (find-code-lsubs \"{c}\")
-;;      (code-lsubs \"{c}\")
+;; This section contains one `defun' for each of one of the
+;; first-class videos. See:
 ;;
-;; Tests: (find-{c}hsubs)
-;;        (find-{c}lsubs)
-;;        (find-{c}lsubs \"00:00\")
-;;        (find-1stclassvideo-links \"{c}\")
+;;   (find-video-links-intro "9. First-class videos")
+;;   (find-1stclassvideos)
 ;;
-(defun find-{c}lsubs (&rest pos-spec-list)
-  (apply 'find-1stclassvideolsubs \"{c}\" pos-spec-list))
-(defun find-{c}hsubs (&rest pos-spec-list)
-  (apply 'find-1stclassvideohsubs \"{c}\" pos-spec-list))
-"))
+;; If we defined them with `code-eevvideo' they wouldn't have
+;; docstrings and `find-efunction' wouldn't be able to find their
+;; definitions. Try:
+;;
+;;   (find-efunctiondescr 'find-eev2019video)
+;;   (find-efunction      'find-eev2019video)
+
+
+
+
+
+
+;;;  ____  _                                    
+;;; / ___|| |_ _ __ __ _ _ __   __ _  ___       
+;;; \___ \| __| '__/ _` | '_ \ / _` |/ _ \      
+;;;  ___) | |_| | | (_| | | | | (_| |  __/_ _ _ 
+;;; |____/ \__|_|  \__,_|_| |_|\__, |\___(_|_|_)
+;;;                            |___/            
+;;
+;; «strange-functions»  (to ".strange-functions")
+;; The `(code-1stclassvideos)' below defines lots of "strange
+;; functions" with names like `find-{c}video', `find-{c}hsubs', and
+;; `find-{c}lsubs'. The concept of "strange function" is explained
+;; here:
+;;   (find-strange-functions-intro)
+
+;; See: (find-eev "eev-tlinks.el" "code-1stclassvideos")
+;; (find-code-1stclassvideos)
+        (code-1stclassvideos)
+
 
-(defun      code-all-lsubs (&optional cs)
-  (eval (ee-read      (ee-code-all-lsubs cs))))
-(defun find-code-all-lsubs (&optional cs)
-  (find-estring-elisp (ee-code-all-lsubs cs)))
-(defun   ee-code-all-lsubs (&optional cs)
-  (mapconcat 'ee-code-lsubs (or cs (ee-all-cs-with-subs)) "\n\n"))
-
-;; «code-all-lsubs»  (to ".code-all-lsubs")
-;; This defines lots of functions with names like `find-<c>lsubs' and
-;; `find-<c>hsubs'.
-;; Try: (find-code-all-lsubs)
-             (code-all-lsubs)
 
 
 


Reply via email to