Warning: this is an htmlized version!
The original is here, and the conversion rules are here. |
-- This file: -- http://anggtwu.net/SUBTITLES/2020-some-template-based.lua.html -- http://anggtwu.net/SUBTITLES/2020-some-template-based.lua -- (find-angg "SUBTITLES/2020-some-template-based.lua") -- Author: Eduardo Ochs <eduardoochs@gmail.com> -- -- (defun l () (interactive) (find-angg "SUBTITLES/2020-some-template-based.lua")) -- (defun b () (interactive) (find-TH "2020-some-template-based")) -- (defun p () (interactive) (find-TH "2020-some-template-based")) -- (defun R () (interactive) (ee-recompile-SUBTITLES-0)) -- (defun r () (interactive) (ee-recompile-SUBTITLES-3)) -- (defun r () (interactive) (ee-recompile-SUBTITLES-1)) -- (define-key eev-mode-map (kbd "M-r") 'r) -- -- Skel: (find-subs-links "eevtempl") -- Old: (find-editeevsubtitles-links-1 "eevtempl") -- (find-efunction 'find-editeevsubtitles-links-1) -- Yttr: (find-yttranscript-links "eevtempl" "91-9YfRPsuk") -- Info: (find-1stclassvideo-links "eevtempl") -- Play: (find-eevtemplvideo "0:00") -- -- Title: Some template-based functions of eev that are not five-minute hacks -- MP4: http://anggtwu.net/eev-videos/2020-some-template-based.mp4 -- YT: http://www.youtube.com/watch?v=91-9YfRPsuk -- Page: http://anggtwu.net/2020-some-template-based.html -- Comment: -- Date: 2020dec24 -- Length: 33:11 -- -- I use the code below to generate the subtitles in .vtt. -- ee_dofile "~/LUA/Subtitles.lua" -- (find-angg "LUA/Subtitles.lua") --[[ -- (find-angg "LUA/Subtitles.lua") ** Run the .lua and tell it to ** write the .vtt - by default in /tmp/ * * (eepitch-lua51) * (eepitch-kill) * (eepitch-lua51) dofile "2020-some-template-based.lua" sts = Subtitles.fromsexps(subs_bigstr):addtime("33:11") -- sts.lang = "pt-BR" = sts outfname = "$S/http/anggtwu.net/eev-videos/2020-some-template-based.vtt" outfname = "/tmp/2020-some-template-based.vtt" out = sts:vtt().."\n\n" ee_writefile(outfname, out) -- (find-fline "/tmp/2020-some-template-based.vtt") ** Test the .vtt ** (find-eevtemplvideo "0:00") ** Select /tmp/ or ee-eevvideosdir ** (find-eevvideosfile "") ** (find-eevvideosfile "" "2020-some-template-based.mp4") ** (find-eevvideossh0 "cp -v 2020-some-template-based.mp4 /tmp/") ** (code-video "eevtemplvideo" "/tmp/2020-some-template-based.mp4") ** (code-video "eevtemplvideo" "$S/http/anggtwu.net/eev-videos/2020-some-template-based.mp4") ** (find-eevtemplvideo "0:00") ** Upload the 2020-some-template-based.vtt ** to http://anggtwu.net/eev-videos/ * (eepitch-shell) * (eepitch-kill) * (eepitch-shell) cd /tmp/ Scp-np 2020-some-template-based.vtt $TWUP/eev-videos/ Scp-np 2020-some-template-based.vtt $TWUS/eev-videos/ ** Upload the subtitles to youtube ** http://www.youtube.com/watch?v=91-9YfRPsuk ** Check that the "psne subtitles" thing works ** (find-1stclassvideo-links "eevtempl") --]] subs_bigstr = [==[ % (find-eevtemplvideo "00:00" "Hi! My name is Eduardo Ochs, and this is a") % (find-eevtemplvideo "00:03" "quite technical talk about eev, so I'm") % (find-eevtemplvideo "00:05" "going to suppose that everyone knows") % (find-eevtemplvideo "00:07" "what is the Emacs and what is eev.") % (find-eevtemplvideo "00:10" "The title of this talk is:") % (find-eevtemplvideo "00:13" "\"Some template-based functions of eev") % (find-eevtemplvideo "00:15" "that are not 5-minute hacks\"") % (find-eevtemplvideo "00:17" "and the reason for this title is that") % (find-eevtemplvideo "00:20" "when I gave a presentation at the") % (find-eevtemplvideo "00:22" "EmacsConf 2020 I give this title to it:") % (find-eevtemplvideo "00:25" "\"On why most of the best features in eev") % (find-eevtemplvideo "00:30" "look like 5-minute hacks\",") % (find-eevtemplvideo "00:34" "and the last section of that") % (find-eevtemplvideo "00:36" "presentation was about one specific") % (find-eevtemplvideo "00:38" "feature that I really implemented in") % (find-eevtemplvideo "00:40" "just five minutes.") % (find-eevtemplvideo "00:42" "We can play the video here by") % (find-eevtemplvideo "00:45" "executing this link here...") % (find-eevtemplvideo "00:51" "oops, sorry, here: Part 4...") % (find-eevtemplvideo "00:56" "and I explained a certain notion of") % (find-eevtemplvideo "00:59" "user-friendliness, and then i explained") % (find-eevtemplvideo "01:00" "the function called") % (find-eevtemplvideo "01:02" "`find-emacs-tangents-links'") % (find-eevtemplvideo "01:03" "in this part here...") % (find-eevtemplvideo "01:12" "but let's see it in a more technical way.") % (find-eevtemplvideo "01:15" "if we execute (find-emacs-tangents-links)") % (find-eevtemplvideo "01:19" "we get a buffer like this, in which this") % (find-eevtemplvideo "01:22" "part here is generated by a template,") % (find-eevtemplvideo "01:24" "and if I change these things here") % (find-eevtemplvideo "01:28" "by something else, for example by YEAR") % (find-eevtemplvideo "01:31" "in uppercase letters, and I run this line") % (find-eevtemplvideo "01:33" "again, then the all the buffer is going") % (find-eevtemplvideo "01:37" "to be generated again with these values") % (find-eevtemplvideo "01:39" "for the the things in curly braces, so") % (find-eevtemplvideo "01:43" "if I execute this I get this...") % (find-eevtemplvideo "01:45" "taaa - this became YEAR.") % (find-eevtemplvideo "01:50" "The implementation of this is very") % (find-eevtemplvideo "01:52" "simple, it is just a function, here...") % (find-eevtemplvideo "01:55" "with the template here...") % (find-eevtemplvideo "01:57" "and the interesting thing is that...") % (find-eevtemplvideo "02:00" "the thing that allowed me to write this") % (find-eevtemplvideo "02:02" "thing in just five minutes is that") % (find-eevtemplvideo "02:05" "I have a function that generates") % (find-eevtemplvideo "02:07" "skeletons for functions like this.") % (find-eevtemplvideo "02:08" "If I run this hyperlink here -") % (find-eevtemplvideo "02:13" "and note that in the code of") % (find-eevtemplvideo "02:16" "`find-emacs-tangents-links',") % (find-eevtemplvideo "02:18" "in these comments here, I have a link") % (find-eevtemplvideo "02:20" "to this skeleton...") % (find-eevtemplvideo "02:24" "if I run this skeleton here") % (find-eevtemplvideo "02:27" "I get a buffer that has") % (find-eevtemplvideo "02:31" "this header, this `defun' here,") % (find-eevtemplvideo "02:35" "the optional arguments, and then this") % (find-eevtemplvideo "02:39" "field here, that is blank... in this field") % (find-eevtemplvideo "02:42" "is a list of of temporary variables that") % (find-eevtemplvideo "02:45" "I set in a `let*'.") % (find-eevtemplvideo "02:47" "For example, let me change this to FOO") % (find-eevtemplvideo "02:50" "and BAR in uppercase letters.") % (find-eevtemplvideo "02:52" "If I execute this again I get") % (find-eevtemplvideo "02:56" "this other skeleton here, in which now I") % (find-eevtemplvideo "02:59" "this `let*' here, that sets FOO and") % (find-eevtemplvideo "03:02" "BAR to default values,") % (find-eevtemplvideo "03:04" "and then the indentation changes a bit.") % (find-eevtemplvideo "03:07" "If I delete these things and I generate") % (find-eevtemplvideo "03:11" "the buffer again...") % (find-eevtemplvideo "03:12" "look at this part here, the `let*' is") % (find-eevtemplvideo "03:15" "going to disappear, and this thing is") % (find-eevtemplvideo "03:16" "going to to move a bit to the left,") % (find-eevtemplvideo "03:18" "and one of these parentheses") % (find-eevtemplvideo "03:20" "is going to disappear.") % (find-eevtemplvideo "03:23" "That's it.") % (find-eevtemplvideo "03:25" "So, to write this function") % (find-eevtemplvideo "03:28" "`find-emacs-tangents-links'") % (find-eevtemplvideo "03:30" "I essentially started with a skeleton") % (find-eevtemplvideo "03:33" "like this,") % (find-eevtemplvideo "03:34" "I had a draft of this thing that I put") % (find-eevtemplvideo "03:38" "in the template,") % (find-eevtemplvideo "03:39" "and I just moved this thing to the") % (find-eevtemplvideo "03:41" "template and") % (find-eevtemplvideo "03:43" "put backslashes in the right places, so") % (find-eevtemplvideo "03:46" "that this thing is") % (find-eevtemplvideo "03:47" "going to be just a big string, because...") % (find-eevtemplvideo "03:51" "no, let's look at the source code.") % (find-eevtemplvideo "03:56" "If I don't have a backslash here then") % (find-eevtemplvideo "03:59" "this thing becomes a big mess and") % (find-eevtemplvideo "04:01" "some things that should be strings") % (find-eevtemplvideo "04:04" "are not going to be strings, and, well,") % (find-eevtemplvideo "04:06" "whatever...") % (find-eevtemplvideo "04:10" "So, this is how I wrote this function and") % (find-eevtemplvideo "04:13" "most of my template-based") % (find-eevtemplvideo "04:15" "hyperlink functions.") % (find-eevtemplvideo "04:20" "This one is called") % (find-eevtemplvideo "04:22" "`find-find-links-links-new' because it is") % (find-eevtemplvideo "04:24" "a successor of a previous version that") % (find-eevtemplvideo "04:27" "was called just `find-find-links-links',") % (find-eevtemplvideo "04:31" "that was my function that produced the") % (find-eevtemplvideo "04:34" "buffer that would create a skeleton for a") % (find-eevtemplvideo "04:38" "function called `find-something-links'") % (find-eevtemplvideo "04:46" "but this one was a bit messy, and") % (find-eevtemplvideo "04:48" "the new one is quite clean.") % (find-eevtemplvideo "04:50" "So I like it very much and I hate the") % (find-eevtemplvideo "04:52" "old one, but I still have the code") % (find-eevtemplvideo "04:54" "of it somewhere, and I think that I") % (find-eevtemplvideo "04:55" "still have some") % (find-eevtemplvideo "04:58" "functions that depend on it.") % (find-eevtemplvideo "05:01" "Now let's see one function that uses a") % (find-eevtemplvideo "05:06" "template...") % (find-eevtemplvideo "05:07" "its code is quite short, but I") % (find-eevtemplvideo "05:10" "that that's a very interesting idea.") % (find-eevtemplvideo "05:15" "In one of the sections of one of the") % (find-eevtemplvideo "05:18" "tutorials of eev...") % (find-eevtemplvideo "05:20" "the one that has number eight here in") % (find-eevtemplvideo "05:22" "the index of the tutorials;") % (find-eevtemplvideo "05:24" "it is called find-psne-intro, and") % (find-eevtemplvideo "05:28" "psne is a contraction of something") % (find-eevtemplvideo "05:32" "that was already a contraction...") % (find-eevtemplvideo "05:34" "this is explained there, but it's not") % (find-eevtemplvideo "05:36" "important now...") % (find-eevtemplvideo "05:39" "and the thing is that psne") % (find-eevtemplvideo "05:44" "is a way to download local copies of") % (find-eevtemplvideo "05:47" "files from the internet...") % (find-eevtemplvideo "05:49" "and it has this example here, where") % (find-eevtemplvideo "05:53" "if we execute these...") % (find-eevtemplvideo "05:56" "let me change to a smaller font...") % (find-eevtemplvideo "05:57" "if we execute this thing here we create") % (find-eevtemplvideo "05:59" "a temporary buffer, here,") % (find-eevtemplvideo "06:01" "that runs a shell, and we set the") % (find-eevtemplvideo "06:04" "target of eepitch to") % (find-eevtemplvideo "06:06" "this shell here... and now in the") % (find-eevtemplvideo "06:10" "lines that do not start with a") % (find-eevtemplvideo "06:12" "red star...") % (find-eevtemplvideo "06:14" "if I type an f8 here then that line is") % (find-eevtemplvideo "06:16" "going to be sent to the target buffer") % (find-eevtemplvideo "06:18" "as if the user was typing that line...") % (find-eevtemplvideo "06:22" "and in this case, these four lines...") % (find-eevtemplvideo "06:26" "they create a directory corresponding to") % (find-eevtemplvideo "06:30" "to the remote location of this") % (find-eevtemplvideo "06:33" "URL here,") % (find-eevtemplvideo "06:38" "it changes - it \"cd\"s to that directory -") % (find-eevtemplvideo "06:41" "and it \"wget\"s that file...") % (find-eevtemplvideo "06:45" "and it also saves the URL") % (find-eevtemplvideo "06:48" "to a certain log file.") % (find-eevtemplvideo "06:51" "So this is the general idea") % (find-eevtemplvideo "06:54" "And then this tutorial explains how i") % (Find-eevtemplvideo "06:56" "use something") % (find-eevtemplvideo "06:58" "similar to this, but much more") % (find-eevtemplvideo "07:00" "complicated to download local copies of") % (find-eevtemplvideo "07:02" "files from the internet.") % (find-eevtemplvideo "07:06" "Let me switch to a bigger font again...") % (find-eevtemplvideo "07:10" "and the new way is by just using") % (find-eevtemplvideo "07:15" "`M-x brep'... and the \"br\"") % (find-eevtemplvideo "07:19" "in the beginning is the prefix that") % (find-eevtemplvideo "07:21" "indicates that we're going to do a") % (find-eevtemplvideo "07:23" "variant of `browse-url', and this \"ep\"") % (find-eevtemplvideo "07:27" "means that we are going to run") % (find-eevtemplvideo "07:31" "a version in Emacs of something that") % (find-eevtemplvideo "07:34" "I used to call \"psne\" 20 years ago.") % (find-eevtemplvideo "07:36" "If we run this hyperlink here") % (find-eevtemplvideo "07:40" "we get a temporary") % (find-eevtemplvideo "07:43" "buffer like this...") % (find-eevtemplvideo "07:45" "so it has some variants of how to") % (find-eevtemplvideo "07:48" "download this,") % (find-eevtemplvideo "07:50" "in which this thing here is changed...") % (find-eevtemplvideo "07:54" "and we have code to download a") % (find-eevtemplvideo "07:56" "local copy of this URL here...") % (find-eevtemplvideo "07:58" "and we have these links here") % (find-eevtemplvideo "08:01" "that will let us check the local copy.") % (find-eevtemplvideo "08:04" "so we get this -") % (find-eevtemplvideo "08:09" "the contents don't matter to us now...") % (find-eevtemplvideo "08:12" "and my favorite way of running this") % (find-eevtemplvideo "08:16" "is by typing `M-x brep',") % (find-eevtemplvideo "08:24" "which calls `find-psne-links'") % (find-eevtemplvideo "08:27" "on this URL here.") % (find-eevtemplvideo "08:31" "So it's a variant of `browse-url'") % (find-eevtemplvideo "08:35" "in which instead of browsing the url we") % (find-eevtemplvideo "08:38" "are generating a temporary buffer with it,") % (find-eevtemplvideo "08:41" "and this temporary buffer") % (find-eevtemplvideo "08:43" "allows us to,") % (find-eevtemplvideo "08:44" "to change the URL if we need to...") % (find-eevtemplvideo "08:48" "let me confirm here - and then we get this") % (find-eevtemplvideo "08:52" "this buffer here, and usually I just go") % (find-eevtemplvideo "08:56" "to this block, and I execute this") % (find-eevtemplvideo "08:58" "without even thinking.") % (find-eevtemplvideo "09:08" "So, the rest of this tutorial explains") % (find-eevtemplvideo "09:10" "the details, but let me go back...") % (find-eevtemplvideo "09:15" "The third template-based function") % (find-eevtemplvideo "09:19" "that I want to show is the function that") % (find-eevtemplvideo "09:21" "defines this `brep', because...") % (find-eevtemplvideo "09:25" "well, let me show this in practice.") % (find-eevtemplvideo "09:29" "The `brep' is defined") % (find-eevtemplvideo "09:32" "by this sexp here,") % (find-eevtemplvideo "09:36" "that uses a template... and this is a") % (find-eevtemplvideo "09:39" "variant of `code-c-d' that defines") % (find-eevtemplvideo "09:42" "this function... it generates a") % (find-eevtemplvideo "09:46" "lot of elisp code as text, and then it") % (find-eevtemplvideo "09:49" "`read's and `eval's it,") % (find-eevtemplvideo "09:51" "and it generates in this case") % (find-eevtemplvideo "09:54" "just one function that is") % (find-eevtemplvideo "09:56" "based on this function here,") % (find-eevtemplvideo "09:57" "`find-psne-links', that operates on urls,") % (find-eevtemplvideo "10:02" "and it defines this function here, `brep'.") % (find-eevtemplvideo "10:05" "And the nice thing is that we can") % (find-eevtemplvideo "10:06" "just add this prefix here, \"find-\",") % (find-eevtemplvideo "10:10" "to the line above, to check the code") % (find-eevtemplvideo "10:13" "that this thing generates...") % (find-eevtemplvideo "10:15" "So instead of executing this") % (find-eevtemplvideo "10:17" "code we are going to just generate") % (find-eevtemplvideo "10:18" "the code and show it as Emacs Lisp,") % (find-eevtemplvideo "10:22" "which means: with nice colors...") % (find-eevtemplvideo "10:26" "So this is the definition of `brep', and") % (find-eevtemplvideo "10:29" "the docstring of it is just \"Apply") % (find-eevtemplvideo "10:33" "`find-psne-links' on URL\",") % (find-eevtemplvideo "10:36" "and it runs blah blah blah, the details") % (find-eevtemplvideo "10:38" "don't matter...") % (find-eevtemplvideo "10:40" "and the general idea behind this") % (find-eevtemplvideo "10:43" "`code-something' functions and their") % (find-eevtemplvideo "10:46" "variants that start with `find-'") % (find-eevtemplvideo "10:48" "is explained in my presentation in") % (find-eevtemplvideo "10:51" "the EmacsConf 2020, in this position") % (find-eevtemplvideo "10:55" "here... let me just show it...") % (find-eevtemplvideo "10:59" "...that we saw in the") % (find-eevtemplvideo "11:02" "previous section...") % (find-eevtemplvideo "11:04" "we can see the the code that it produces") % (find-eevtemplvideo "11:07" "by making a copy of this line and") % (find-eevtemplvideo "11:10" "prepending this string here to the name") % (find-eevtemplvideo "11:13" "of the function, so instead of running") % (find-eevtemplvideo "11:15" "`code-c-d' we run `find-code-c-d',") % (find-eevtemplvideo "11:17" "and it creates a new temporary buffer") % (find-eevtemplvideo "11:20" "with the code that `code-c-d' would") % (find-eevtemplvideo "11:23" "execute...") % (find-eevtemplvideo "11:25" "ok, let me go back.") % (find-eevtemplvideo "11:28" "This is explained in the... even in the") % (find-eevtemplvideo "11:31" "main tutorial, because `code-c-d'") % (find-eevtemplvideo "11:33" "is very important and the variants of") % (find-eevtemplvideo "11:35" "`code-c-d' are very are, so there's a") % (find-eevtemplvideo "11:37" "section called \"Shorter hyperlinks\"") % (find-eevtemplvideo "11:41" "here, a subsection that is just about") % (find-eevtemplvideo "11:46" "`code-c-d'...") % (find-eevtemplvideo "11:49" "and this explanation here -") % (find-eevtemplvideo "11:53" "very brief but it sort of works -") % (find-eevtemplvideo "11:57" "of how `code-c-d' works... it produces") % (find-eevtemplvideo "11:59" "a big string using a template...") % (find-eevtemplvideo "12:01" "and an explanation of this idea of") % (find-eevtemplvideo "12:04" "prepending a \"find-\" to the `code-c-d'") % (find-eevtemplvideo "12:08" "to understand the code that the thing") % (find-eevtemplvideo "12:10" "generates...") % (find-eevtemplvideo "12:12" "And several of my functions that") % (find-eevtemplvideo "12:16" "are related to `code-c-d' accept extra") % (find-eevtemplvideo "12:19" "arguments,") % (find-eevtemplvideo "12:20" "and this tutorial has even a section") % (find-eevtemplvideo "12:22" "about these extra arguments,") % (find-eevtemplvideo "12:24" "using `code-c-d', that is the main") % (find-eevtemplvideo "12:26" "function that users are going to") % (find-eevtemplvideo "12:28" "to use... and it has some examples.") % (find-eevtemplvideo "12:33" "If we run just this") % (find-eevtemplvideo "12:36" "we generate this code here,") % (find-eevtemplvideo "12:40" "that starts with comments, and then it") % (find-eevtemplvideo "12:43" "has several definitions here: it defines") % (find-eevtemplvideo "12:45" "a variable,") % (find-eevtemplvideo "12:46" "and it defines several functions...") % (find-eevtemplvideo "12:49" "one of the reasons for using text") % (find-eevtemplvideo "12:51" "instead of using macros,") % (find-eevtemplvideo "12:53" "by the way, is that by generating") % (find-eevtemplvideo "12:55" "text I can add comments,") % (find-eevtemplvideo "12:57" "and these comments here have even") % (find-eevtemplvideo "12:59" "elisp hyperlinks to the documentation.") % (find-eevtemplvideo "13:04" "Ok, so this is the code generated by") % (find-eevtemplvideo "13:07" "just `find-code-c-d' without extra") % (find-eevtemplvideo "13:10" "arguments...") % (find-eevtemplvideo "13:12" "and we if we add an extra argument here") % (find-eevtemplvideo "13:18" "the output becomes a little bigger...") % (find-eevtemplvideo "13:22" "this section appears, and this section") % (find-eevtemplvideo "13:24" "defines a function that opens a node") % (find-eevtemplvideo "13:30" "in a certain info manual...") % (find-eevtemplvideo "13:34" "and then this thing explains a bit of") % (find-eevtemplvideo "13:36" "the innards, and a bit of the other") % (find-eevtemplvideo "13:38" "extra arguments that we can use...") % (find-eevtemplvideo "13:43" "So this was a very quick") % (find-eevtemplvideo "13:46" "introduction to this `code-c-d'") % (find-eevtemplvideo "13:48" "and its related functions...") % (find-eevtemplvideo "13:53" "and again: when I defined `brep'") % (find-eevtemplvideo "13:56" "I used one of these `code-something'") % (find-eevtemplvideo "13:59" "functions, `code-brurl', and we can") % (find-eevtemplvideo "14:01" "inspect its code by running") % (find-eevtemplvideo "14:04" "this `find-code-brurl'.") % (find-eevtemplvideo "14:06" "So: (code-brurl 'find-psne-links ...)") % (find-eevtemplvideo "14:13" "executes this thing here.") % (find-eevtemplvideo "14:21" "Ok, next section:") % (find-eevtemplvideo "14:23" "4. `find-esetkey-links'.") % (find-eevtemplvideo "14:26" "Sometimes... one of the things that") % (find-eevtemplvideo "14:28" "beginners often want to do") % (find-eevtemplvideo "14:30" "is to define new key bindings,") % (find-eevtemplvideo "14:35" "and I realized that I could use") % (find-eevtemplvideo "14:39" "the ideas of eev to provide a") % (find-eevtemplvideo "14:43" "different way of doing that.") % (find-eevtemplvideo "14:46" "If we just run (find-esetkey-links) -") % (find-eevtemplvideo "14:50" "or with `M-x' or with this sexp here, -") % (find-eevtemplvideo "14:57" "sorry, if we run with `M-x' we get") % (find-eevtemplvideo "15:01" "a prompt here that tells us to to give a") % (find-eevtemplvideo "15:05" "key and then a command... let me try") % (find-eevtemplvideo "15:09" "M-f5") % (find-eevtemplvideo "15:12" "and then the command is going to be") % (find-eevtemplvideo "15:16" "`next-line'. We get a buffer here that") % (find-eevtemplvideo "15:21" "has a big header with lots of help...") % (find-eevtemplvideo "15:27" "for example, this line here") % (find-eevtemplvideo "15:30" "shows the section of Emacs manual") % (find-eevtemplvideo "15:34" "that explains how to change key bindings") % (find-eevtemplvideo "15:37" "interactively...") % (find-eevtemplvideo "15:39" "it's not trivial to to save these key") % (find-eevtemplvideo "15:42" "bindings to your .emacs after defining") % (find-eevtemplvideo "15:46" "them interactively...") % (find-eevtemplvideo "15:50" "and these links go to the documentation") % (find-eevtemplvideo "15:52" "of these functions here...") % (find-eevtemplvideo "15:55" "and this has some calls to these") % (find-eevtemplvideo "15:56" "functions that") % (find-eevtemplvideo "15:59" "it seems that the Emacs suggests") % (find-eevtemplvideo "16:02" "people to use interactively...") % (find-eevtemplvideo "16:05" "but here we generate sexps") % (find-eevtemplvideo "16:09" "for them, both for setting the key") % (find-eevtemplvideo "16:13" "and for unsetting the key, and we can") % (find-eevtemplvideo "16:15" "save these the settings in our notes,") % (find-eevtemplvideo "16:20" "or even in our ~/.emacs file.") % (find-eevtemplvideo "16:23" "For example, I have these keybindings") % (find-eevtemplvideo "16:29" "here. I use the super key for several") % (find-eevtemplvideo "16:33" "toggles... here in my keyboard the") % (find-eevtemplvideo "16:36" "super key is the Windows key.") % (find-eevtemplvideo "16:39" "So if i use super-t I toggle the") % (find-eevtemplvideo "16:43" "`tool-bar-mode', which is this thing here...") % (find-eevtemplvideo "16:46" "so let's do that several times...") % (find-eevtemplvideo "16:50" "if I use super-m I toggle the") % (find-eevtemplvideo "16:56" "`menu-bar-mode'... I can have both at the") % (find-eevtemplvideo "16:59" "same time, I can toggle them") % (find-eevtemplvideo "17:00" "very quickly, whatever... but I usually") % (find-eevtemplvideo "17:04" "don't like them.") % (find-eevtemplvideo "17:06" "and I realized that one thing that") % (find-eevtemplvideo "17:08" "I do very often especially when I'm") % (find-eevtemplvideo "17:11" "recording videos with a big font is") % (find-eevtemplvideo "17:13" "that I toggle line wrap...") % (find-eevtemplvideo "17:16" "and I have a function, that i've defined") % (find-eevtemplvideo "17:18" "ages ago, that is called just `wrap'...") % (find-eevtemplvideo "17:20" "I used to call it with just `M-x wrap'.") % (find-eevtemplvideo "17:27" "Its definition is here. It's in my") % (find-eevtemplvideo "17:30" "~/.emacs, that is a total mess...") % (find-eevtemplvideo "17:35" "and I realized that I could use") % (find-eevtemplvideo "17:39" "this `define-key' here to define") % (find-eevtemplvideo "17:44" "super-w to wrap, and in this case here,") % (find-eevtemplvideo "17:49" "for reasons that I'm not going to") % (find-eevtemplvideo "17:51" "explain now, instead of setting this in") % (find-eevtemplvideo "17:53" "the global keymap I'm setting this") % (find-eevtemplvideo "17:55" "in the eev keymap... and if I go") % (find-eevtemplvideo "17:59" "here there's even a link to describe") % (find-eevtemplvideo "18:02" "what are the current") % (find-eevtemplvideo "18:04" "bindings in the eev keymap...") % (find-eevtemplvideo "18:07" "so we get them here,") % (find-eevtemplvideo "18:11" "and we get the `wrap' here.") % (find-eevtemplvideo "18:18" "So... in the emacs-devel mailing list") % (find-eevtemplvideo "18:21" "people are always discussing how to") % (find-eevtemplvideo "18:23" "make these things more user-friendly") % (find-eevtemplvideo "18:25" "without ever using Lisp, because") % (find-eevtemplvideo "18:29" "\"USERS SHOULD NOT BE FORCED") % (find-eevtemplvideo "18:31" "TO SEE LISP\", and I'm taking") % (find-eevtemplvideo "18:33" "exactly the opposite - I'm") % (find-eevtemplvideo "18:35" "doing everything with the Lisp") % (find-eevtemplvideo "18:38" "very evident, with no hidden text,") % (find-eevtemplvideo "18:40" "and whatevers...") % (find-eevtemplvideo "18:42" "and this is an experiment to see") % (find-eevtemplvideo "18:46" "if users like this thing... this is") % (find-eevtemplvideo "18:49" "very recent, I haven't") % (find-eevtemplvideo "18:51" "tested this in") % (find-eevtemplvideo "18:54" "guinea pig users yet, so I didn't get") % (find-eevtemplvideo "18:58" "any feedback yet...") % (find-eevtemplvideo "18:59" "but i think that this can be a good way") % (find-eevtemplvideo "19:01" "to teach users how to") % (find-eevtemplvideo "19:03" "to bind keys, especially because") % (find-eevtemplvideo "19:06" "if they type something wrong they can") % (find-eevtemplvideo "19:08" "see what they have") % (find-eevtemplvideo "19:10" "typed wrong, and they can see the sexps") % (find-eevtemplvideo "19:13" "that corresponds to doing that, they can") % (find-eevtemplvideo "19:15" "change the sexps, and so on...") % (find-eevtemplvideo "19:19" "Ok, this was was the fourth thing that") % (find-eevtemplvideo "19:21" "I wanted to show.") % (find-eevtemplvideo "19:23" "And the fifth thing that I want to show") % (find-eevtemplvideo "19:25" "now is how I download") % (find-eevtemplvideo "19:30" "videos from Youtube.") % (find-eevtemplvideo "19:33" "And this is really far from") % (find-eevtemplvideo "19:36" "a 5-minute hack, because this") % (find-eevtemplvideo "19:38" "one does a lot of magic.") % (find-eevtemplvideo "19:40" "And the idea, as always,") % (find-eevtemplvideo "19:44" "is that if we twist the notion of") % (find-eevtemplvideo "19:47" "\"user\" in exactly the right way") % (find-eevtemplvideo "19:49" "then user-friendly and hacker-friendly") % (find-eevtemplvideo "19:51" "become very similar to one another.") % (find-eevtemplvideo "19:54" "So this is _my_ user-friendly way to") % (find-eevtemplvideo "19:58" "download videos from Youtube that is") % (find-eevtemplvideo "20:00" "user-friendly to _me_, and maybe") % (find-eevtemplvideo "20:02" "to other people... but whatever.") % (find-eevtemplvideo "20:05" "The documentation about this") % (find-eevtemplvideo "20:08" "`find-youtubedl-links' is in this") % (find-eevtemplvideo "20:11" "section here") % (find-eevtemplvideo "20:13" "of the tutorial about how to use") % (find-eevtemplvideo "20:15" "audio and video files in eev...") % (find-eevtemplvideo "20:18" "in this section here...") % (find-eevtemplvideo "20:20" "and the idea is that") % (find-eevtemplvideo "20:22" "links to Youtube can have") % (find-eevtemplvideo "20:27" "several formats. The long format is this") % (find-eevtemplvideo "20:30" "one, but there's also a couple of") % (find-eevtemplvideo "20:32" "shorthands to this... and") % (find-eevtemplvideo "20:34" "they always contain an id") % (find-eevtemplvideo "20:39" "that is always 11 characters long.") % (find-eevtemplvideo "20:42" "It only uses certain characters,") % (find-eevtemplvideo "20:45" "and I don't remember exactly why, but") % (find-eevtemplvideo "20:49" "I decided to call it the \"hash\" instead") % (find-eevtemplvideo "20:51" "of the \"id\", so in the code i refer to") % (find-eevtemplvideo "20:54" "this thing as the \"hash\" of the") % (find-eevtemplvideo "20:56" "video everywhere.") % (find-eevtemplvideo "20:59" "And so... here the documentation says") % (find-eevtemplvideo "21:02" "how to download the video if you have") % (find-eevtemplvideo "21:07" "youtube-dl installed, and due to this") % (find-eevtemplvideo "21:09" "option here the video is going to be") % (find-eevtemplvideo "21:13" "downloaded with both its title and its") % (find-eevtemplvideo "21:19" "identifier in the local file name.") % (find-eevtemplvideo "21:25" "And my favorite way of downloading a") % (find-eevtemplvideo "21:30" "local copy is... with this function,") % (find-eevtemplvideo "21:33" "`find-youtubedl-links'...") % (find-eevtemplvideo "21:37" "it's code is here, it's not") % (find-eevtemplvideo "21:39" "very ugly, but the thing is that") % (find-eevtemplvideo "21:42" "it uses lots of internal functions") % (find-eevtemplvideo "21:46" "and variables to discover what") % (find-eevtemplvideo "21:48" "is the local file") % (find-eevtemplvideo "21:51" "corresponding to the video.") % (find-eevtemplvideo "21:55" "Let me show a demo - here. I'm going to") % (find-eevtemplvideo "21:57" "use a temporary directory for the") % (find-eevtemplvideo "22:00" "video just to not have so much clutter") % (find-eevtemplvideo "22:03" "in the screen...") % (find-eevtemplvideo "22:07" "let me switch to a smaller font again...") % (find-eevtemplvideo "22:10" "ok, let me recreate this directory.") % (find-eevtemplvideo "22:15" "By the way, i never type") % (find-eevtemplvideo "22:17" "these things by hand") % (find-eevtemplvideo "22:19" "what I do is that I just put") % (find-eevtemplvideo "22:22" "the name of the directory in a line") % (find-eevtemplvideo "22:24" "by itself,") % (find-eevtemplvideo "22:26" "and I type meta-uppercase-r.") % (find-eevtemplvideo "22:29" "And I get this.") % (find-eevtemplvideo "22:35" "But let's go back to the demo. I'm going") % (find-eevtemplvideo "22:37" "to set my favorite directories for videos") % (find-eevtemplvideo "22:39" "to this directory here, that is") % (find-eevtemplvideo "22:42" "a temporary directory that is not") % (find-eevtemplvideo "22:45" "the one that i tend to use... and") % (find-eevtemplvideo "22:48" "let me show how to download a certain") % (find-eevtemplvideo "22:50" "video.") % (find-eevtemplvideo "22:53" "So: the hash of the video is here...") % (find-eevtemplvideo "22:56" "I just have to place the coursor on the") % (find-eevtemplvideo "22:59" "hash and type `M-x find-youtubedl-links'...") % (find-eevtemplvideo "23:03" "and this function discovers") % (find-eevtemplvideo "23:07" "what is the hash around point,") % (find-eevtemplvideo "23:11" "let me type an Enter here...") % (find-eevtemplvideo "23:15" "and it produces this temporary") % (find-eevtemplvideo "23:18" "buffer here...") % (find-eevtemplvideo "23:21" "oops, sorry...") % (find-eevtemplvideo "23:26" "here we have two different functions") % (find-eevtemplvideo "23:30" "that regenerate this buffer in") % (find-eevtemplvideo "23:33" "slightly different ways...") % (find-eevtemplvideo "23:36" "and I'm going to run this script here.") % (find-eevtemplvideo "23:41" "Note that it has several variants that") % (find-eevtemplvideo "23:44" "run youtube-dl with slightly different") % (find-eevtemplvideo "23:49" "arguments... I'm going to to use the") % (find-eevtemplvideo "23:51" "default one.") % (find-eevtemplvideo "23:53" "It takes a while...") % (find-eevtemplvideo "23:58" "it downloads the video - it's quite short,") % (find-eevtemplvideo "24:00" "it's just 10 megabytes -") % (find-eevtemplvideo "24:02" "and now I have a video with that name -") % (find-eevtemplvideo "24:05" "I mean, with this hash in its name.") % (find-eevtemplvideo "24:07" "If I visit the directory where I'm") % (find-eevtemplvideo "24:10" "downloading the videos I'm going to see") % (find-eevtemplvideo "24:13" "that there's a video with this") % (find-eevtemplvideo "24:14" "string in its name, so if execute this") % (find-eevtemplvideo "24:18" "this sexp opens that directory and") % (find-eevtemplvideo "24:22" "uh searches for the first occurrence of") % (find-eevtemplvideo "24:25" "this string, which is exactly in the line") % (find-eevtemplvideo "24:28" "where my video is. It is here -") % (find-eevtemplvideo "24:33" "so my magic functions have to discover") % (find-eevtemplvideo "24:37" "the rest of this file name just") % (find-eevtemplvideo "24:40" "by this string here...") % (find-eevtemplvideo "24:50" "and if I run this sexp here,") % (find-eevtemplvideo "24:54" "that has nil in the place of the title,") % (find-eevtemplvideo "24:59" "then `find-youtubedl-links' is going to") % (find-eevtemplvideo "25:02" "try to guess the title of the video") % (find-eevtemplvideo "25:04" "from just this thing and the directory.") % (find-eevtemplvideo "25:07" "Let me try... TA-DA! It found") % (find-eevtemplvideo "25:09" "the right title, here we have a sexp") % (find-eevtemplvideo "25:16" "that concatenates the directory, the") % (find-eevtemplvideo "25:20" "title, and the hash, and the extension...") % (find-eevtemplvideo "25:23" "the magic functions also discover the") % (find-eevtemplvideo "25:25" "extension...") % (find-eevtemplvideo "25:27" "and if I change this {stem} here") % (find-eevtemplvideo "25:35" "I get short links to this video.") % (find-eevtemplvideo "25:38" "So if I execute this I get a short") % (find-eevtemplvideo "25:44" "link to this video... let's use the usual") % (find-eevtemplvideo "25:47" "trick...") % (find-eevtemplvideo "25:48" "if I run this `find-code-video'") % (find-eevtemplvideo "25:52" "here I will get the code that") % (find-eevtemplvideo "25:58" "`code-video' is going to run...") % (find-eevtemplvideo "26:01" "let me copy this to my notes...") % (find-eevtemplvideo "26:08" "these hashes look ugly. So, if I execute") % (find-eevtemplvideo "26:12" "this... note that now I have very long") % (find-eevtemplvideo "26:16" "lines, so I can type super-w, and ta-da,") % (find-eevtemplvideo "26:18" "it toggles line wrapping...") % (find-eevtemplvideo "26:25" "ok, so if I run this thing here...") % (find-eevtemplvideo "26:29" "I get a buffer that shows the") % (find-eevtemplvideo "26:31" "code that defines this function here -") % (find-eevtemplvideo "26:34" "`find-preadingvideo' - \"The problem") % (find-eevtemplvideo "26:38" "with reading (something)\".") % (find-eevtemplvideo "26:42" "If I just execute this line here it") % (find-eevtemplvideo "26:45" "defines `find-preadingvideo',") % (find-eevtemplvideo "26:49" "and if I execute this I open this...") % (find-eevtemplvideo "26:52" "\"In the rest of the significant portion") % (find-eevtemplvideo "26:54" "of the play...\"") % (find-eevtemplvideo "26:55" "in the beginning") % (find-eevtemplvideo "26:57" "but suppose that i've downloaded this") % (find-eevtemplvideo "27:00" "video because I discovered that it has a") % (find-eevtemplvideo "27:02" "sentence... a part that is very") % (find-eevtemplvideo "27:05" "important... so i took down notes of") % (find-eevtemplvideo "27:07" "where it starts and what is the sentence,") % (find-eevtemplvideo "27:11" "so I can just make a copy of this") % (find-eevtemplvideo "27:18" "that points to the right position...") % (find-eevtemplvideo "27:20" "\"...of the play where Jocasta") % (find-eevtemplvideo "27:22" "the queen has no lines, and because we're") % (find-eevtemplvideo "27:25" "reading the play - most of us now read") % (find-eevtemplvideo "27:27" "the play very few of us will have the") % (find-eevtemplvideo "27:29" "opportunity - although i urge you to take") % (find-eevtemplvideo "27:31" "it if it comes - to see the play") % (find-eevtemplvideo "27:32" "enacted... there are some movie versions,") % (find-eevtemplvideo "27:35" "and occasionally...\"") % (find-eevtemplvideo "27:37" "well, whatever.") % (find-eevtemplvideo "27:42" "These are things that I have just put") % (find-eevtemplvideo "27:45" "here because initially I thought") % (find-eevtemplvideo "27:48" "about presenting this in a") % (find-eevtemplvideo "27:50" "in a different order... so: this is how") % (find-eevtemplvideo "27:54" "I download videos from youtube,") % (find-eevtemplvideo "27:56" "in a way that is only user-friendly") % (find-eevtemplvideo "27:59" "if I define \"users\"") % (find-eevtemplvideo "28:01" "in exactly the right way, in which") % (find-eevtemplvideo "28:04" "the main user in the universe is me.") % (find-eevtemplvideo "28:11" "And the last template-based function") % (find-eevtemplvideo "28:14" "that I wanted to present is") % (find-eevtemplvideo "28:18" "`find-here-links'. This is one that") % (find-eevtemplvideo "28:21" "deserves another presentation, I'm") % (find-eevtemplvideo "28:23" "to record a video about it, but let me") % (find-eevtemplvideo "28:27" "present it very quickly. This is one") % (find-eevtemplvideo "28:30" "of the main functions of eev -") % (find-eevtemplvideo "28:32" "I use it hundreds of times a day") % (find-eevtemplvideo "28:34" "because the central idea of eev is that") % (find-eevtemplvideo "28:36" "we can keep executable logs of what") % (find-eevtemplvideo "28:42" "we do, and these executable logs") % (find-eevtemplvideo "28:44" "usually are made") % (find-eevtemplvideo "28:47" "half of hyperlinks to interesting things") % (find-eevtemplvideo "28:50" "and half of executable code, like") % (find-eevtemplvideo "28:54" "shell command, or things like that...") % (find-eevtemplvideo "29:00" "so this tutorial explained these ideas,") % (find-eevtemplvideo "29:03" "and then the technical details...") % (find-eevtemplvideo "29:08" "for example, if i run `find-here-links'") % (find-eevtemplvideo "29:15" "here... note that it is bound to") % (find-eevtemplvideo "29:20" "`M-h M-h', and...") % (find-eevtemplvideo "29:23" "when I type `M-h M-h'") % (find-eevtemplvideo "29:27" "it generates a a temporary buffer") % (find-eevtemplvideo "29:31" "with links to \"here\"...") % (find-eevtemplvideo "29:33" "here is a header with help, and here") % (find-eevtemplvideo "29:36" "is the link that I want: a link to") % (find-eevtemplvideo "29:40" "the tutorial in which i was...") % (find-eevtemplvideo "29:45" "And I want to show something that is") % (find-eevtemplvideo "29:48" "not very well documented yet,") % (find-eevtemplvideo "29:51" "that is a different way to create") % (find-eevtemplvideo "29:56" "links to video files, audio files, PDF") % (find-eevtemplvideo "29:59" "files, and so on...") % (find-eevtemplvideo "30:05" "it is explained in this section of") % (find-eevtemplvideo "30:08" "the tutorial but") % (find-eevtemplvideo "30:09" "i don't think that i've revised it") % (find-eevtemplvideo "30:13" "enough times yet, so it may not be") % (find-eevtemplvideo "30:16" "very readable...") % (find-eevtemplvideo "30:19" "and the idea is that if you type") % (find-eevtemplvideo "30:24" "`M-h M-e' then this runs") % (find-eevtemplvideo "30:31" "`find-extra-file-links', and") % (find-eevtemplvideo "30:34" "this is an experimental feature whose") % (find-eevtemplvideo "30:36" "behavior may change soon...") % (find-eevtemplvideo "30:38" "but here is how it works now.") % (find-eevtemplvideo "30:42" "Here is an example in Lisp. If we") % (find-eevtemplvideo "30:44" "execute this we get a temporary buffer") % (find-eevtemplvideo "30:46" "with several kinds of hyperlinks,") % (find-eevtemplvideo "30:50" "including `code-c-d', `code-video',") % (find-eevtemplvideo "30:53" "etc, pointing to this file here...") % (find-eevtemplvideo "30:54" "so: this block here supposes that") % (find-eevtemplvideo "31:01" "this file is a PDF file, this one") % (find-eevtemplvideo "31:03" "supposes that it is a video file,") % (find-eevtemplvideo "31:06" "and I can use this {stem} here") % (find-eevtemplvideo "31:12" "to generate functions that have this") % (find-eevtemplvideo "31:15" "string, \"MYFOO\", in their names...") % (find-eevtemplvideo "31:21" "and let me show a more realistic") % (find-eevtemplvideo "31:23" "example of how to use this,") % (find-eevtemplvideo "31:26" "which is... let's go to the directory") % (find-eevtemplvideo "31:30" "where I've downloaded this video file:") % (find-eevtemplvideo "31:32" "here. If I type `M-h M-e' here I get") % (find-eevtemplvideo "31:38" "a buffer that lets me define several") % (find-eevtemplvideo "31:45" "kinds of links to this file...") % (find-eevtemplvideo "31:50" "this file is a video file,") % (find-eevtemplvideo "31:53" "and let me use this string to identify") % (find-eevtemplvideo "31:56" "it...") % (find-eevtemplvideo "31:58" "uh =(") % (find-eevtemplvideo "32:23" "sorry, I played this as an audio,") % (find-eevtemplvideo "32:27" "and there's no very easy way to to stop") % (find-eevtemplvideo "32:34" "it...") % (find-eevtemplvideo "32:38" "so, if I run this... now I've defined") % (find-eevtemplvideo "32:42" "these short links here...") % (find-eevtemplvideo "32:47" "`find-preadvideo'... and if i") % (find-eevtemplvideo "32:50" "execute this...") % (find-eevtemplvideo "33:02" "ok, sorry for the mess! And") % (find-eevtemplvideo "33:05" "these were the things that I wanted to") % (find-eevtemplvideo "33:07" "show in this presentation, and that's it.") % (find-eevtemplvideo "33:10" "Bye! =P") ]==] unrevised_bigstr = [==[ (find-eevtemplvideo "00:00" " ") ]==] -- Local Variables: -- coding: utf-8-unix -- End: