branch: externals/eev commit ad58a3e39e7d37fdfeb1c54bfe95770ee8924ec9 Author: Eduardo Ochs <eduardoo...@gmail.com> Commit: Eduardo Ochs <eduardoo...@gmail.com>
Use `find-psne-eevvideo-links' to download videos and subtitles. --- ChangeLog | 25 ++++++++++++ VERSION | 4 +- eev-blinks.el | 6 +-- eev-intro.el | 50 +++++++++++++++++------- eev-tlinks.el | 114 +++++++++++++++++++++++++++++++++++++++++++++++++++--- eev-videolinks.el | 63 +++++++++++++++++++----------- eev-wconfig.el | 63 ++++++++++++++++++++++++++---- 7 files changed, 273 insertions(+), 52 deletions(-) diff --git a/ChangeLog b/ChangeLog index 9f5d40e77e..81fa065462 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,28 @@ +2022-05-11 Eduardo Ochs <eduardoo...@gmail.com> + + * eev-intro.el (find-video-links-intro): rewrote the section "5.1. + Subtitles". + + * eev-tlinks.el (find-psne-eevvideo-links) + (ee-psne-eevvideo-core, find-psne-1stclassvideo-links): new + functions. + (ee-1stclassvideos-dlsubs): use `find-psne-1stclassvideo-links' + and `find-psne-eevvideo-links' instead of + `find-wgeteevsubtitles-links'. + (find-wgeteevsubtitles-links): marked as obsolete. + + * eev-videolinks.el (ee-1stclassvideos-localmp4) + (ee-1stclassvideos-mp4found): new functions. + +2022-05-09 Eduardo Ochs <eduardoo...@gmail.com> + + * eev-videolinks.el (ee-eevlocal-body): rewritten. + +2022-05-07 Eduardo Ochs <eduardoo...@gmail.com> + + * eev-blinks.el (find-etpat): use `find-dbsw-call' instead of + `find-wottb-call'. + 2022-05-05 Eduardo Ochs <eduardoo...@gmail.com> * eev-videolinks.el (find-2022eevwconfigpt1video) diff --git a/VERSION b/VERSION index 2306878839..f656a5b8eb 100644 --- a/VERSION +++ b/VERSION @@ -1,2 +1,2 @@ -Fri May 6 01:14:21 GMT 2022 -Thu May 5 22:14:21 -03 2022 +Wed May 11 05:05:32 GMT 2022 +Wed May 11 02:05:32 -03 2022 diff --git a/eev-blinks.el b/eev-blinks.el index 87635dbe27..11b0d2535f 100644 --- a/eev-blinks.el +++ b/eev-blinks.el @@ -21,7 +21,7 @@ ;; ;; Author: Eduardo Ochs <eduardoo...@gmail.com> ;; Maintainer: Eduardo Ochs <eduardoo...@gmail.com> -;; Version: 20220502 +;; Version: 20220507 ;; Keywords: e-scripts ;; ;; Latest version: <http://angg.twu.net/eev-current/eev-blinks.el> @@ -484,8 +484,8 @@ See `find-etpat0' and `find-etpat00' for lower-level tools for inspecting text proprties." (interactive) (setq pos (or pos (point))) - (apply 'find-wottb-call '(describe-text-properties pos) - "*Help*" pos-spec-list)) + (apply 'find-dbsw-call '(describe-text-properties pos) + pos-spec-list)) (defun find-etpat0 (&rest pos-spec-list) "Hyperlink to a pretty version of the result of (text-properties-at (point))." diff --git a/eev-intro.el b/eev-intro.el index a9ccc29bb8..36772afcef 100644 --- a/eev-intro.el +++ b/eev-intro.el @@ -11518,33 +11518,57 @@ The local copy will be played with Mpv, with: 5.1. Subtitles -------------- -Some video have subtitles. If you run this sexp +Some video have subtitles. The low-level way to download a video +and its subtitles is with sexps like these ones - try them: - (find-wgeteevsubtitles-links \"2022-pict2e-lua\" \".vtt\") + (find-psne-eevvideo-links \"NAMEOFTHEVIDEO\" \"\") + (find-psne-eevvideo-links \"NAMEOFTHEVIDEO\" \".srt\") + (find-psne-eevvideo-links \"NAMEOFTHEVIDEO\" \".srt .vtt\") -it will create a temporary buffer with this eepitch block: +The third sexp generates a temporary buffer whose core is this +eepitch block: (eepitch-shell2) (eepitch-kill) (eepitch-shell2) mkdir -p $S/http/angg.twu.net/eev-videos/ cd $S/http/angg.twu.net/eev-videos/ - wget -nc http://angg.twu.net/eev-videos/2022-pict2e-lua.mp4 - wget -N http://angg.twu.net/eev-videos/2022-pict2e-lua.vtt + wget -nc http://angg.twu.net/eev-videos/NAMEOFTHEVIDEO.mp4 + wget -N http://angg.twu.net/eev-videos/NAMEOFTHEVIDEO.srt + wget -N http://angg.twu.net/eev-videos/NAMEOFTHEVIDEO.vtt The \"-nc\" says to wget that if the .mp4 (the video) is already -downloaded then it shouldn't try to download it again; the \"-N\" says -to wget that if the version of the .vtt (the subtitles) at -angg.twu.net is newer than the local copy then wget should download -the newer version, and replace the local copy with the newer version. - -When a video has subtitles its `find-1stclassvideo-links' page -contains a section titled \"Download subtitles:\". Compare: +downloaded then it (the wget) shouldn't try to download it again; +the \"-N\" says to wget that if the version of the file at +angg.twu.net is newer than the local copy then wget should +download the newer version, and replace the local copy with the +newer version. The argument \".srt .vtt\" is a list of the +extensions of the subtitles. + +The higher-level ways to play first-class videos (see section 9) +call `find-psne-eevvideo-links' when they try to play a local +copy of the video and they see that it hasn't been downloaded +yet. This involves looking up information about the video in +`ee-1stclassvideos-info'. Try: + + (find-eev \"eev-videolinks.el\" \"eev2021\") + (find-eev \"eev-videolinks.el\" \"eevnav\") + +You will see that a few of the videos have a \":subs\" field +indicating that they have subtitles, but most videos don't. + +The support for subtitles is recent, and is still a bit +primitive. The temporary buffer generated by +`find-1stclassvideo-links' contains a few extra lines when a +video has subtitles - compare: (find-1stclassvideo-links \"2022pict2elua\") (find-1stclassvideo-links \"2021workshop6\") -The video \"2022pict2elua\" has subtitles, and \"2021workshop6\" doesn't. +The video \"2022pict2elua\" has subtitles, and \"2021workshop6\" +doesn't. + +(TODO: rewrite the rest of this section) When both the .mp4 and .vtt files are present mpv plays the local copy with subtitles. Try: diff --git a/eev-tlinks.el b/eev-tlinks.el index 16ddf5e7b4..12fed27d50 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: 20220501 +;; Version: 20220511 ;; Keywords: e-scripts ;; ;; Latest version: <http://angg.twu.net/eev-current/eev-tlinks.el> @@ -82,8 +82,12 @@ ;; «.find-eev-update-links» (to "find-eev-update-links") ;; «.find-youtubedl-links» (to "find-youtubedl-links") ;; «.ee-youtubedl-command» (to "ee-youtubedl-command") +;; ;; «.find-psne-links» (to "find-psne-links") ;; «.ee-find-psne-echo-options» (to "ee-find-psne-echo-options") +;; «.find-psne-eevvideo-links» (to "find-psne-eevvideo-links") +;; «.find-psne-1stclassvideo-links» (to "find-psne-1stclassvideo-links") +;; ;; «.find-git-links» (to "find-git-links") ;; «.find-fossil-links» (to "find-fossil-links") ;; «.find-apt-get-source-links» (to "find-apt-get-source-links") @@ -1274,6 +1278,101 @@ echo {e} '{url}' >> ~/.psne.log +;;; _ _ +;;; _ __ ___ _ __ ___ ___ _____ ____ _(_) __| | ___ ___ +;;; | '_ \/ __| '_ \ / _ \_____ / _ \/ _ \ \ / /\ \ / / |/ _` |/ _ \/ _ \ +;;; | |_) \__ \ | | | __/_____| __/ __/\ V / \ V /| | (_| | __/ (_) | +;;; | .__/|___/_| |_|\___| \___|\___| \_/ \_/ |_|\__,_|\___|\___/ +;;; |_| +;; +;; «find-psne-eevvideo-links» (to ".find-psne-eevvideo-links") +;; Skel: (find-find-links-links-new "psne-eevvideo" "stem exts" "") +;; Test: (find-psne-eevvideo-links "NAMEOFTHEVIDEO" ".srt .vtt") +;; See: (find-video-links-intro "5.1. Subtitles") +;; +;; NOTE: `find-psne-eevvideo-links', `ee-psne-eevvideo-core', and +;; `find-psne-1stclassvideo-links' were written in 2022may11 and +;; will probably replace some of the older functions for +;; downloading videos from http://angg.twu.net/ soon - the older +;; functions didn't have support for subtitles, and these +;; functions do. +;; +(defun find-psne-eevvideo-links (&optional stem exts &rest pos-spec-list) +"Visit a temporary buffer containing a script for downloading a video." + (interactive) + (setq stem (or stem "{stem}")) + (setq exts (or exts "{exts}")) + (apply + 'find-elinks + `((find-psne-eevvideo-links ,stem ,exts ,@pos-spec-list) + ;; Convention: the first sexp always regenerates the buffer. + (find-efunction 'find-psne-eevvideo-links) + "" + ,(ee-psne-eevvideo-core stem exts) + ,(ee-template0 "\ +") + ) + pos-spec-list)) + +;; Tests: +;; (find-estring (ee-psne-eevvideo-core "NAMEOFTHEVIDEO" ".vtt .srt")) +;; (find-estring (ee-psne-eevvideo-core "NAMEOFTHEVIDEO" "")) +;; (defun ee-find-psne-echo-options () "-N") +;; (defun ee-find-psne-echo-options () "") +;; +(defun ee-psne-eevvideo-core (stem exts) + "An internal function used by `find-psne-eevvideo-links'." + (let* ((dir "$S/http/angg.twu.net/eev-videos/") + (url- (concat "http://angg.twu.net/eev-videos/" stem)) + (eo (format "%-3s" (ee-find-psne-echo-options))) + (wf (lambda (ext) (format "wget -N %s%s\n" url- ext))) + (ef (lambda (ext) (format "echo %s %s%s >> ~/.psne.log\n" eo url- ext))) + (wgets (mapconcat wf (split-string exts))) + (echos (mapconcat ef (cons ".mp4" (split-string exts)))) + ) + (ee-template0 "\ +# (find-psne-intro \"1. Local copies of files from the internet\") +# (find-video-links-intro \"5. Local copies\") +# (find-video-links-intro \"5.1. Subtitles\") + + (sh-mode) + (eepitch-shell2) + (eepitch-kill) + (eepitch-shell2) +mkdir -p {dir} +cd {dir} +wget -nc {url-}.mp4 +{wgets}\ +{echos}\ + +# (find-fline \"{dir}\" \"{stem}.mp4\") +# (find-video \"{dir}{stem}.mp4\") +"))) + +;; «find-psne-1stclassvideo-links» (to ".find-psne-1stclassvideo-links") +;; Skel: (find-find-links-links-new "psne-1stclassvideo" "c" "stem subexts") +;; Test: (find-psne-1stclassvideo-links "eev2021") +;; (find-psne-1stclassvideo-links "2021workshop6") +;; +(defun find-psne-1stclassvideo-links (&optional c &rest pos-spec-list) +"Visit a temporary buffer containing hyperlinks for psne-1stclassvideo." + (interactive) + (setq c (or c "{c}")) + (let* ((stem (ee-1stclassvideos-mp4stem c)) + (subexts (or (ee-1stclassvideos-field c :subs) ""))) + (apply + 'find-elinks + `((find-psne-1stclassvideo-links ,c ,@pos-spec-list) + ;; Convention: the first sexp always regenerates the buffer. + (find-efunction 'find-psne-1stclassvideo-links) + "" + ,(ee-psne-eevvideo-core stem subexts) + ) + pos-spec-list))) + + + + @@ -1640,7 +1739,8 @@ netcat -l -p {tgtport} ;; «ee-psne-if-needed» (to ".ee-psne-if-needed") ;; Tests: -;; (ee-psne-if-needed "http://www.gnu.org/software/emacs/emacs-paper.html") +;; (ee-psne-if-needed "https://www.lua.org/index.html") +;; (find-estring (ee-psne-if-needed "https://www.lua.org/index.html")) ;; (find-estring (ee-psne-if-needed "http://www.foo.org/bar.html")) ;; (find-estring (ee-psne-download "http://www.foo.org/bar.html")) ;; (find-estring (ee-psne-download0 "http://www.foo.org/bar.html")) @@ -1920,6 +2020,9 @@ and: (find-video-links-intro \\\"7. `find-eev-video'\\\") ;; (find-wgetnode "Download Options" "-N" "--timestamping") ;; (find-wgetnode "Time-Stamping") ;; +;; NOTE: this function was superseded by +;; `find-psne-1stclassvideo-links' and will be deleted soon! +;; (defun find-wgeteevsubtitles-links (&optional stem exts &rest pos-spec-list) "Visit a temporary buffer containing a script for downloading subtitles. The script downloads an eev video and it subtitles. For example, @@ -1967,7 +2070,7 @@ wget -nc {url-}.mp4 {wgets}\ "))) - +;; 2022may10: @@ -3067,8 +3170,9 @@ For more info on this particular video, run: (let ((mp4stem (ee-1stclassvideos-mp4stem c))) (ee-template0 "\ ;; -;; Download subtitles: -;; (find-wgeteevsubtitles-links \"{mp4stem}\" \"{exts}\") +;; Download or update subtitles: +;; (find-psne-1stclassvideo-links \"{c}\") +;; (find-psne-eevvideo-links \"{mp4stem}\" \"{exts}\") ") )))) diff --git a/eev-videolinks.el b/eev-videolinks.el index a6e8baf0f9..bd85413a23 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: 20220505 +;; Version: 20220511 ;; Keywords: e-scripts ;; ;; Latest version: <http://angg.twu.net/eev-current/eev-videolinks.el> @@ -195,20 +195,26 @@ ;; (find-estring (ee-eevlocal-body "emacsconf2020" "0123456789a" nil)) ;; (find-estring (ee-eevlocal-body "emacsconf2020" "0123456789a" "1:23")) ;; (find-estring (ee-eevlocal-body "emacsconf1234" "0123456789a" "1:23")) +;; (find-estring (ee-eevlocal-youtube-comment "0123456789a" nil)) +;; (find-estring (ee-eevlocal-youtube-comment "0123456789a" "")) +;; (find-estring (ee-eevlocal-youtube-comment "0123456789a" "1:23")) +;; (find-estring (ee-psne-url-comment "http://www.foo.org/bar.html")) +;; (find-estring (ee-eevlocal-psne "emacsconf1234" nil)) +;; (find-estring (ee-eevlocal-psne "emacsconf2020" nil)) +;; (find-estring (ee-eevlocal-psne "emacsconf2020" "1:23")) (defun ee-eevlocal-body (stem hash time) "An internal function used by `find-eevlocal-links'." - (let ((url (format "http://angg.twu.net/eev-videos/%s.mp4" stem))) - (concat (ee-eevlocal-youtube-comment hash time) - "\n" (ee-psne-url-comment url) - "\n\n" (ee-eevlocal-psne stem time) - ))) + (let* ((url (format "http://angg.twu.net/eev-videos/%s.mp4" stem)) + (youtube-comment (ee-eevlocal-youtube-comment hash time)) + (psne-comment (ee-psne-url-comment url)) + (psne (ee-eevlocal-psne stem time))) + (ee-template0 "\ +{youtube-comment} +{psne-comment} +{psne}\ +"))) -;; Tests: -;; (find-estring (ee-eevlocal-youtube-comment "0123456789a" nil)) -;; (find-estring (ee-eevlocal-youtube-comment "0123456789a" "")) -;; (find-estring (ee-eevlocal-youtube-comment "0123456789a" "1:23")) -;; (defun ee-eevlocal-youtube-comment (hash time) "An internal function used by `find-eevlocal-links'." (let* ((youtubeurl (ee-find-youtube-url hash time)) @@ -221,9 +227,11 @@ "))) ;; Tests: -;; (find-estring (ee-eevlocal-psne "emacsconf1234" nil)) ;; (find-estring (ee-eevlocal-psne "emacsconf2020" nil)) ;; (find-estring (ee-eevlocal-psne "emacsconf2020" "1:23")) +;; (find-estring (ee-eevlocal-psne "emacsconf2345" nil)) +;; (find-estring (ee-psne-if-needed "https://www.lua.org/index.html")) +;; (find-estring (ee-psne-if-needed "http://foo/bar")) ;; (find-estring (ee-eevlocal-findmpvvideo "emacsconf2020" nil)) ;; (find-estring (ee-eevlocal-findmpvvideo "emacsconf2020" "{foo}")) ;; (find-estring (ee-eevlocal-findmpvvideo "emacsconf2020" "1:23")) @@ -249,6 +257,7 @@ + ;;; ____ _ _ ;;; / ___| ___| | ___ ___| |_ ;;; \___ \ / _ \ |/ _ \/ __| __| @@ -945,16 +954,18 @@ For more info on this particular video, run: ;; «ee-1stclassvideos-field» (to ".ee-1stclassvideos-field") ;; -;; (find-eppp ee-1stclassvideos-info) -;; (assoc "eev2021" ee-1stclassvideos-info) -;; (cdr (assoc "eev2021" ee-1stclassvideos-info)) -;; (plist-get (cdr (assoc "eev2021" ee-1stclassvideos-info)) :page) -;; (plist-get (cdr (assoc "foo" ee-1stclassvideos-info)) :page) -;; (ee-1stclassvideos-field "eev2021" :page) -;; (ee-1stclassvideos-field "eev2021" :mp4) -;; (ee-1stclassvideos-field "eev2021" :yt) -;; (ee-1stclassvideos-mp4stem "eev2021") -;; (ee-1stclassvideos-hash "eev2021") +;; (find-eppp ee-1stclassvideos-info) +;; (assoc "eev2021" ee-1stclassvideos-info) +;; (cdr (assoc "eev2021" ee-1stclassvideos-info)) +;; (plist-get (cdr (assoc "eev2021" ee-1stclassvideos-info)) :page) +;; (plist-get (cdr (assoc "foo" ee-1stclassvideos-info)) :page) +;; (ee-1stclassvideos-field "eev2021" :page) +;; (ee-1stclassvideos-field "eev2021" :mp4) +;; (ee-1stclassvideos-field "eev2021" :yt) +;; (ee-1stclassvideos-mp4stem "eev2021") +;; (ee-1stclassvideos-localmp4 "eev2021") +;; (ee-1stclassvideos-mp4found "eev2021") +;; (ee-1stclassvideos-hash "eev2021") ;; (find-eev "eev-videolinks.el" "more-info") ;; (defun ee-1stclassvideos-field (c &optional field) @@ -968,6 +979,14 @@ For more info on this particular video, run: (let ((yt (ee-1stclassvideos-field c :yt))) (replace-regexp-in-string "^.*=\\([^=]*\\)$" "\\1" yt))) +(defun ee-1stclassvideos-localmp4 (c) + (ee-shorten-file-name + (ee-url-to-fname + (ee-1stclassvideos-field c :mp4)))) + +(defun ee-1stclassvideos-mp4found (c) + (ee-psne-downloaded-p + (ee-1stclassvideos-field c :mp4))) diff --git a/eev-wconfig.el b/eev-wconfig.el index 240cf4cebc..a705ad93c4 100644 --- a/eev-wconfig.el +++ b/eev-wconfig.el @@ -147,8 +147,12 @@ ;; «.find-wconfig-shell-links» (to "find-wconfig-shell-links") ;; «.find-wconfig-lua-links» (to "find-wconfig-lua-links") ;; «.find-wconfig-mpv-links» (to "find-wconfig-mpv-links") +;; ;; «.find-wconfig-magic-links» (to "find-wconfig-magic-links") ;; «.ee-wconfig-run-magic» (to "ee-wconfig-run-magic") +;; +;; «.find-wconfig-exercises-links» (to "find-wconfig-exercises-links") +;; ;; «.find-wconfig-undo-links» (to "find-wconfig-undo-links") @@ -211,7 +215,6 @@ ;; «find-wconfig-browser-links» (to ".find-wconfig-browser-links") ;; Skel: (find-find-links-links-new "wconfig-browser" "" "") ;; Test: (find-wconfig-browser-links) -;; (defun edt () (interactive) (eval-defun nil) (find-wconfig-browser-links)) ;; (defun find-wconfig-browser-links (&rest pos-spec-list) "Visit a temporary buffer containing a script for configuring the browser." @@ -294,7 +297,6 @@ ;; «find-wconfig-wget-links» (to ".find-wconfig-wget-links") ;; Skel: (find-find-links-links-new "wconfig-wget" "" "") ;; Test: (find-wconfig-wget-links) -;; (defun edt () (interactive) (eval-defun nil) (find-wconfig-wget-links)) ;; (defun find-wconfig-wget-links (&rest pos-spec-list) "Visit a temporary buffer containing a script for configuring wget on Windows." @@ -462,7 +464,6 @@ cd ~/eev-wconfig/ ;; «find-wconfig-shell-links» (to ".find-wconfig-shell-links") ;; Skel: (find-find-links-links-new "wconfig-shell" "" "") ;; Test: (find-wconfig-shell-links) -;; (defun edt () (interactive) (eval-defun nil) (find-wconfig-shell-links)) ;; (defun find-wconfig-shell-links (&rest pos-spec-list) "Visit a temporary buffer containing a script for configuring eshell on Windows." @@ -524,6 +525,17 @@ wget --version (defun eepitch-shell2 () (interactive) (eepitch-eshell2)) (defun eepitch-shell3 () (interactive) (eepitch-eshell3)) +;; Test: check that the two eepitch +;; blocks below both run Eshell. + + (eepitch-eshell) + (eepitch-kill) + (eepitch-eshell) + + (eepitch-shell) + (eepitch-kill) + (eepitch-shell) + ;; 3. Configure the `echo' of eshell @@ -574,7 +586,6 @@ wget --version ;; «find-wconfig-lua-links» (to ".find-wconfig-lua-links") ;; Skel: (find-find-links-links-new "wconfig-lua" "" "") ;; Test: (find-wconfig-lua-links) -;; (defun edt () (interactive) (eval-defun nil) (find-wconfig-lua-links)) ;; (defun find-wconfig-lua-links (&rest pos-spec-list) "Visit a temporary buffer containing hyperlinks for wconfig-lua." @@ -662,7 +673,6 @@ for k,v in pairs(_G) do print(k) end ;; «find-wconfig-mpv-links» (to ".find-wconfig-mpv-links") ;; Skel: (find-find-links-links-new "wconfig-mpv" "" "") ;; Test: (find-wconfig-mpv-links) -;; (defun edt () (interactive) (eval-defun nil) (find-wconfig-mpv-links)) ;; (defun find-wconfig-mpv-links (&rest pos-spec-list) "Visit a temporary buffer containing hyperlinks for wconfig-mpv." @@ -734,7 +744,6 @@ for k,v in pairs(_G) do print(k) end ;; «find-wconfig-magic-links» (to ".find-wconfig-magic-links") ;; Skel: (find-find-links-links-new "wconfig-magic" "" "") ;; Test: (find-wconfig-magic-links) -;; (defun edt () (interactive) (eval-defun nil) (find-wconfig-magic-links)) ;; (defun find-wconfig-magic-links (&rest pos-spec-list) "Visit a temporary buffer containing hyperlinks for wconfig-magic." @@ -797,6 +806,7 @@ for k,v in pairs(_G) do print(k) end ;; See: (find-wconfig-magic-links) ;; (find-wconfig-magic-links 2 \"1. Configure chrome and mpv\") +;; (find-wconfig-magic-links 2 \"2. Things that you need to run once\") ;; (find-wconfig-magic-links 2 \"3. Magic\") ;; (find-eev \"eev-load.el\" \"autoloads\") ;; (find-eev \"eev-wconfig.el\" \"intro\") @@ -851,6 +861,45 @@ See the variable `ee-wconfig-magic-code'." +;;; _____ _ +;;; | ____|_ _____ _ __ ___(_)___ ___ ___ +;;; | _| \ \/ / _ \ '__/ __| / __|/ _ \/ __| +;;; | |___ > < __/ | | (__| \__ \ __/\__ \ +;;; |_____/_/\_\___|_| \___|_|___/\___||___/ +;;; +;; «find-wconfig-exercises-links» (to ".find-wconfig-exercises-links") +;; Skel: (find-find-links-links-new "wconfig-exercises" "" "") +;; Test: (find-wconfig-exercises-links) +;; +(defun find-wconfig-exercises-links (&rest pos-spec-list) +"Visit a temporary buffer containing hyperlinks for wconfig-exercises." + (interactive) + (let ((ee-buffer-name (or ee-buffer-name "*(find-wconfig-exercises-links)*"))) + (apply + 'find-elinks-elisp + `((find-wconfig-exercises-links ,@pos-spec-list) + ;; Convention: the first sexp always regenerates the buffer. + (find-wconfig-links) + (find-efunction 'find-wconfig-exercises-links) + "" + ,(ee-template0 "\ +;; 1. Understand `code-c-d' +;; ======================== + +;; 2. Download the .zip + +;; 3. Understand `M-h M-e' +;; ======================= + +;; Exercise: learn Org! +;; See: http://angg.twu.net/eev-wconfig.el#learn-org + +") + ) + pos-spec-list))) + + + ;;; _ _ _ ;;; | | | |_ __ __| | ___ @@ -861,7 +910,6 @@ See the variable `ee-wconfig-magic-code'." ;; «find-wconfig-undo-links» (to ".find-wconfig-undo-links") ;; Skel: (find-find-links-links-new "wconfig-undo" "" "") ;; Test: (find-wconfig-undo-links) -;; (defun edt () (interactive) (eval-defun nil) (find-wconfig-undo-links)) ;; (defun find-wconfig-undo-links (&rest pos-spec-list) "Visit a temporary buffer containing hyperlinks for wconfig-undo." @@ -919,6 +967,7 @@ See the variable `ee-wconfig-magic-code'." + (provide 'eev-wconfig)