Warning: this is an htmlized version!
The original is here, and the conversion rules are here. |
-- This file: -- http://anggtwu.net/SUBTITLES/emacsconf2020.lua.html -- http://anggtwu.net/SUBTITLES/emacsconf2020.lua -- (find-angg "SUBTITLES/emacsconf2020.lua") -- Author: Eduardo Ochs <eduardoochs@gmail.com> -- -- (defun l () (interactive) (find-angg "SUBTITLES/emacsconf2020.lua")) -- (defun b () (interactive) (find-TH "emacsconf2020")) -- (defun p () (interactive) (find-TH "emacsconf2020")) -- (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 "eev2020") -- Old: (find-editeevsubtitles-links-1 "eev2020") -- (find-efunction 'find-editeevsubtitles-links-1) -- Yttr: (find-yttranscript-links "eev2020" "hOAqBc42Gg8") -- Info: (find-1stclassvideo-links "eev2020") -- Play: (find-eev2020video "0:00") -- -- 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 "emacsconf2020.lua" sts = Subtitles.fromsexps(subs_bigstr):addtime("47:08") -- sts.lang = "pt-BR" = sts outfname = "$S/http/anggtwu.net/eev-videos/emacsconf2020.vtt" outfname = "/tmp/emacsconf2020.vtt" out = sts:vtt().."\n\n" ee_writefile(outfname, out) -- (find-fline "/tmp/emacsconf2020.vtt") ** Test the .vtt ** (find-eev2020video "0:00") ** Select /tmp/ or ee-eevvideosdir ** (find-eevvideosfile "") ** (find-eevvideosfile "" "emacsconf2020.mp4") ** (find-eevvideossh0 "cp -v emacsconf2020.mp4 /tmp/") ** (code-video "eev2020video" "/tmp/emacsconf2020.mp4") ** (code-video "eev2020video" "$S/http/anggtwu.net/eev-videos/emacsconf2020.mp4") ** (find-eev2020video "0:00") ** Upload the emacsconf2020.vtt ** to http://anggtwu.net/eev-videos/ * (eepitch-shell) * (eepitch-kill) * (eepitch-shell) cd /tmp/ Scp-np emacsconf2020.vtt $TWUP/eev-videos/ Scp-np emacsconf2020.vtt $TWUS/eev-videos/ ** Upload the subtitles to youtube ** http://www.youtube.com/watch?v=hOAqBc42Gg8 ** Check that the "psne subtitles" thing works ** (find-1stclassvideo-links "eev2020") --]] subs_bigstr = [==[ % (find-eev2020video "00:00" "Hi! My name is Eduardo Ochs.") % (find-eev2020video "00:02" "I'm this person here,") % (find-eev2020video "00:03" "and the title of this talk is:") % (find-eev2020video "00:06" "\"On why most of the best features") % (find-eev2020video "00:09" "in eev look like 5-minute hacks\".") % (find-eev2020video "00:11" "And this is a presentation at the") % (find-eev2020video "00:13" "EmacsConf 20202,") % (find-eev2020video "00:15" "happening in november 28 and 29.") % (find-eev2020video "00:18" "2020.") 1.1. `M-e' and `M-k' % (find-eev2020video "00:23" "So this is part one of the presentation,") % (find-eev2020video "00:25" "and here I'm going to explain some") % (find-eev2020video "00:27" "ideas that are prerequisites for") % (find-eev2020video "00:29" "understanding the rest of the") % (find-eev2020video "00:31" "presentation.") % (find-eev2020video "00:32" "The three main keys of eev are `M-e',") % (find-eev2020video "00:35" "`M-k' and `M-j', and I'm going to start by") % (find-eev2020video "00:37" "explaining `M-e' and `M-k'.") % (find-eev2020video "00:42" "`M-e' is used to follow a hyperlink, and") % (find-eev2020video "00:44" "technically it is") % (find-eev2020video "00:46" "essentially just a `C-e' to move to the") % (find-eev2020video "00:49" "end of the line and then a `C-x C-e'") % (find-eev2020video "00:51" "to execute the sexp before point") % (find-eev2020video "00:53" "at the end of the line...") % (find-eev2020video "00:58" "and the thing is that Emacs comes with") % (find-eev2020video "01:00" "many functions that can be used as sexp") % (find-eev2020video "01:03" "hyperlinks.") % (find-eev2020video "01:05" "We can consider that they \"point\" to") % (find-eev2020video "01:06" "somewhere. I'm going to refer to that as") % (find-eev2020video "01:09" "the \"target\" of the hyperlink, and if we") % (find-eev2020video "01:11" "execute these sexp hyperlinks we") % (find-eev2020video "01:12" "\"go to\" that target.") % (find-eev2020video "01:15" "For example, this one") % (find-eev2020video "01:17" "is a hyperlink that points to a buffer") % (find-eev2020video "01:20" "with the man page for cat,") % (find-eev2020video "01:22" "and usually, but not always, after") % (find-eev2020video "01:25" "following the hyperlink") % (find-eev2020video "01:26" "we can go back by just killing the") % (find-eev2020video "01:28" "current buffer...") % (find-eev2020video "01:29" "that the hyperlink created -") % (find-eev2020video "01:32" "the \"target\" of the hyperlink.") % (find-eev2020video "01:34" "But this example here is badly") % (find-eev2020video "01:36" "behaved.") % (find-eev2020video "01:38" "If we execute it it creates a new frame,") % (find-eev2020video "01:41" "and to go back to the previous situation") % (find-eev2020video "01:43" "we have to either") % (find-eev2020video "01:44" "click here or type `C-x 5 0'.") % (find-eev2020video "01:54" "So, here are some examples of sexp") % (find-eev2020video "01:57" "hyperlinks using standard Emacs functions.") % (find-eev2020video "02:00" "This third one is badly behaved in a") % (find-eev2020video "02:03" "different way.") % (find-eev2020video "02:04" "If we executed it the target is created") % (find-eev2020video "02:08" "in the same window") % (find-eev2020video "02:09" "as we are now, but it also shows a lot of") % (find-eev2020video "02:13" "garbage here in the echo area, so") % (find-eev2020video "02:16" "the current frame becomes a bit") % (find-eev2020video "02:20" "messy...") % (find-eev2020video "02:23" "and, well, one of the first things that I") % (find-eev2020video "02:26" "did when I was creating eev") % (find-eev2020video "02:28" "many many years ago was that I created") % (find-eev2020video "02:30" "variants") % (find-eev2020video "02:31" "of all these functions that were better") % (find-eev2020video "02:34" "behaved...") % (find-eev2020video "02:36" "and they were better behaved in two") % (find-eev2020video "02:38" "senses: the obvious one") % (find-eev2020video "02:40" "was that they all created the target") % (find-eev2020video "02:43" "in the same window as before, so I could") % (find-eev2020video "02:45" "go back by just typing `M-k',") % (find-eev2020video "02:48" "which essentially just killed this") % (find-eev2020video "02:51" "buffer...") % (find-eev2020video "02:52" "But I also implemented") % (find-eev2020video "02:55" "something extra, that are the") % (find-eev2020video "02:56" "\"pos-spec-lists\"... for example,") % (find-eev2020video "02:58" "these extra arguments here") % (find-eev2020video "03:00" "are a pos-spec-list,") % (find-eev2020video "03:03" "and these extra arguments specify") % (find-eev2020video "03:06" "a position in the target buffer.") % (find-eev2020video "03:09" "And in this example this pos-spec-list") % (find-eev2020video "03:13" "means: starting from the") % (find-eev2020video "03:16" "beginning of the buffer,") % (find-eev2020video "03:18" "search for the first occurrence of this") % (find-eev2020video "03:20" "string, \"C-x C-e\", after that -") % (find-eev2020video "03:22" "after the beginning of the buffer -") % (find-eev2020video "03:24" "and then search for the first occurrence") % (find-eev2020video "03:26" "of this string, \"eval-last-sexp\",") % (find-eev2020video "03:29" "after that.") 1.2. Hyperlinks that don't create new buffers % (find-eev2020video "03:33" "Eev also defines some hyperlinks that do") % (find-eev2020video "03:36" "not create new buffers.") % (find-eev2020video "03:38" "Here is the first example: if I execute") % (find-eev2020video "03:41" "this one... this one is a hyperlink to the") % (find-eev2020video "03:45" "result of running this shell command,") % (find-eev2020video "03:47" "\"date\"...") % (find-eev2020video "03:50" "but instead of showing the result in a") % (find-eev2020video "03:52" "new buffer the result is shown here...") % (find-eev2020video "03:54" "so if execute this hyperlink the result") % (find-eev2020video "03:58" "of \"date\"... the output of \"date\" is") % (find-eev2020video "04:01" "shown in the echo area, and if I execute") % (find-eev2020video "04:04" "it again") % (find-eev2020video "04:07" "it shows the result again, and the result") % (find-eev2020video "04:09" "changes every second.") % (find-eev2020video "04:11" "So this is a variant of `find-sh'...") % (find-eev2020video "04:18" "`find-sh0' is the variant that") % (find-eev2020video "04:21" "just shows the output in the echo area,") % (find-eev2020video "04:24" "and `find-sh' shows the output in") % (find-eev2020video "04:28" "a new buffer.") % (find-eev2020video "04:31" "And here is an example of a hyperlink") % (find-eev2020video "04:35" "that calls an external program.") % (find-eev2020video "04:37" "If I execute this it") % (find-eev2020video "04:41" "calls Google Chrome to open a") % (find-eev2020video "04:43" "certain URL.") % (find-eev2020video "04:46" "Here it is. Let's go back to Emacs...") % (find-eev2020video "04:51" "if execute this hyperlink here") % (find-eev2020video "04:55" "it invokes my favorite PDF viewer, which") % (find-eev2020video "04:58" "is xpdf... it makes xpdf") % (find-eev2020video "05:02" "open this PDF in this page...") % (find-eev2020video "05:07" "and these other arguments are ignored.") % (find-eev2020video "05:10" "Let me show how it works.") % (find-eev2020video "05:15" "Here it is. This is an excerpt from a") % (find-eev2020video "05:19" "book... so page 3 in the PDF corresponds") % (find-eev2020video "05:22" "to page 113 in the book... and") % (find-eev2020video "05:26" "this variant here of the hyperlink above...") % (find-eev2020video "05:29" "it opens the PDF in a different way.") % (find-eev2020video "05:31" "It runs a program called pdftotext on") % (find-eev2020video "05:34" "this PDF here,") % (find-eev2020video "05:36" "and Emacs takes the output of running") % (find-eev2020video "05:39" "pdftotext on this PDF here,") % (find-eev2020video "05:42" "and displays it in a buffer... and now this") % (find-eev2020video "05:46" "pos-spec-list is interpreted in a different") % (find-eev2020video "05:49" "way: this thing is interpreted as a") % (find-eev2020video "05:51" "number of a page... Emacs goes to page 3") % (find-eev2020video "05:53" "by counting formfeeds in the") % (find-eev2020video "05:56" "converted version of the PDF,") % (find-eev2020video "06:00" "and then it searches for this string") % (find-eev2020video "06:02" "and this string.") % (find-eev2020video "06:04" "So let's execute this to see what") % (find-eev2020video "06:06" "happens... here it is. It opened") % (find-eev2020video "06:08" "the same page as before...") % (find-eev2020video "06:14" "it starts with \"Lecture I\", so") % (find-eev2020video "06:18" "the other hyperlink searched for this") % (find-eev2020video "06:20" "string and for this string here.") % (find-eev2020video "06:25" "And this thing here is a hyperlink to") % (find-eev2020video "06:28" "a video.") % (find-eev2020video "06:29" "When I executed it it is going to open") % (find-eev2020video "06:32" "this video here, at this timestamp.") % (find-eev2020video "06:36" "Let's see... one, two, three...") % (find-eev2020video "06:39" "ONE, TWO, THREE! THAT'S THE WAY TO DO IT!") % (find-eev2020video "06:49" "And also some hyperlinks that I") % (find-eev2020video "06:52" "defined... hm,") % (find-eev2020video "06:53" "they don't work like usual hyperlinks,") % (find-eev2020video "06:56" "they work more like browser buttons,") % (find-eev2020video "07:01" "these buttons that appear in web pages...") % (find-eev2020video "07:06" "In the sense that these buttons usually") % (find-eev2020video "07:09" "don't open a new page, they usually") % (find-eev2020video "07:11" "just do something to change the current") % (find-eev2020video "07:13" "page. If I execute this,") % (find-eev2020video "07:16" "the action of this function, `eek' is to...") % (find-eev2020video "07:22" "it interprets this string as a series of") % (find-eev2020video "07:24" "keys, and it acts as if the user had typed") % (find-eev2020video "07:26" "all these keys, so...") % (find-eev2020video "07:30" "if I executed it I get a \"HELLO!\"") % (find-eev2020video "07:33" "in the next line, and if I execute it") % (find-eev2020video "07:34" "again I get another \"HELLO!\"") % (find-eev2020video "07:36" "another \"HELLO!\", another \"HELLO!\", etc...") % (find-eev2020video "07:39" "Let me undo this mess.") % (find-eev2020video "07:44" "And here is another kind of button,") % (find-eev2020video "07:47" "that defines a new function. If I execute") % (find-eev2020video "07:51" "this sexp here, `(o)'...") % (find-eev2020video "07:54" "at this moment the `o' is not defined,") % (find-eev2020video "07:55" "and if I execute this Emacs is going to") % (find-eev2020video "07:57" "show me a message saying") % (find-eev2020video "08:00" "\"Symbol's function cell is not defined\",") % (find-eev2020video "08:03" "something like this...") % (find-eev2020video "08:05" "but if I execute the `defun',") % (find-eev2020video "08:09" "the action of this function `o' here") % (find-eev2020video "08:12" "is to run this, which opens a certain") % (find-eev2020video "08:16" "directory...") % (find-eev2020video "08:18" "let me go back. And here is another") % (find-eev2020video "08:21" "button that defines") % (find-eev2020video "08:23" "several functions at the same time.") % (find-eev2020video "08:25" "If I execute this...") % (find-eev2020video "08:32" "note that the result of executing") % (find-eev2020video "08:35" "this expression, (code-c-d ...),") % (find-eev2020video "08:36" "is the name of one of the functions that") % (find-eev2020video "08:38" "it defined,") % (find-eev2020video "08:40" "that is this one here, and let me explain") % (find-eev2020video "08:43" "these examples. One of the functions") % (find-eev2020video "08:46" "that this thing here defined") % (find-eev2020video "08:48" "is called `find-orggitfile', where") % (find-eev2020video "08:51" "this \"orggit\" in the middle of its name") % (find-eev2020video "08:54" "is exactly this first argument") % (find-eev2020video "08:56" "to `code-c-d'...") % (find-eev2020video "08:59" "and the action of running") % (find-eev2020video "09:02" "`find-orggitfile' on a string like this") % (find-eev2020video "09:04" "is that `find-orggitfile' takes this string") % (find-eev2020video "09:06" "and prepends this string to it...") % (find-eev2020video "09:13" "this one here, which is the second") % (find-eev2020video "09:15" "argument to `code-c-d'...") % (find-eev2020video "09:17" "and then it executes `find-fline'") % (find-eev2020video "09:21" "on the result, which is this one...") % (find-eev2020video "09:25" "and `find-fline' is my variant of") % (find-eev2020video "09:28" "`find-file' that supports pos-spec-lists.") % (find-eev2020video "09:32" "And this function here, that I'm") % (find-eev2020video "09:36" "referring to as a \"button\", it also") % (find-eev2020video "09:39" "defines a function called") % (find-eev2020video "09:41" "`find-orggitnode' here, where the \"orggit\"") % (find-eev2020video "09:44" "is the same string as here,") % (find-eev2020video "09:46" "and this function opens a node") % (find-eev2020video "09:50" "of an info manual. This sexp here") % (find-eev2020video "09:54" "opens this node in the Org manual...") % (find-eev2020video "10:00" "it is equivalent to this sexp here...") % (find-eev2020video "10:03" "so in the passage from this line to this") % (find-eev2020video "10:06" "line we prepended to the node name") % (find-eev2020video "10:08" "the name of the manual - here...") % (find-eev2020video "10:12" "and `find-node' is my variant of this") % (find-eev2020video "10:15" "standard Emacs function here, `info',") % (find-eev2020video "10:17" "but `find-node' also supports") % (find-eev2020video "10:20" "pos-spec-lists.") 1.3. Shorter hyperlinks to PDFs and videos % (find-eev2020video "10:23" "Eev also defines some functions that") % (find-eev2020video "10:26" "define shorter hyperlinks to PDFs and") % (find-eev2020video "10:28" "videos.") % (find-eev2020video "10:30" "Remember that this thing here is a") % (find-eev2020video "10:32" "shorter hyperlink to a") % (find-eev2020video "10:34" "to a file, and this thing here is a") % (find-eev2020video "10:37" "shorter hyperlink to a node in an") % (find-eev2020video "10:39" "Emacs manual... in an info manual.") % (find-eev2020video "10:43" "If we run this thing here - this") % (find-eev2020video "10:46" "`code-pdf-page'") % (find-eev2020video "10:47" "this acts like a button that defines a") % (find-eev2020video "10:50" "certain function,") % (find-eev2020video "10:52" "and this other sexp here") % (find-eev2020video "10:56" "defines another function. The first") % (find-eev2020video "10:58" "one defines the function") % (find-eev2020video "11:00" "`find-fongspivakpage', and") % (find-eev2020video "11:03" "the second one defines the function") % (find-eev2020video "11:05" "`find-fongspivaktext'. When we run") % (find-eev2020video "11:09" "`find-fongspivaktext' it opens") % (find-eev2020video "11:13" "this pdf here... the name is") % (find-eev2020video "11:17" "quite long...") % (find-eev2020video "11:20" "this example opens this pdf at page 8") % (find-eev2020video "11:23" "and searches for the string \"Contents\".") % (find-eev2020video "11:26" "Oops, sorry, in this case") % (find-eev2020video "11:28" "it just ignores this string") % (find-eev2020video "11:31" "here, it only considers") % (find-eev2020video "11:33" "the number of the page. Let's try.") % (find-eev2020video "11:37" "Aaaah!") % (find-eev2020video "11:42" "Here it is. The contents of a book") % (find-eev2020video "11:45" "that is freely available...") % (find-eev2020video "11:48" "here is another page of the book...") % (find-eev2020video "11:51" "and if we execute this hyperlink here,") % (find-eev2020video "11:55" "`find-fongspivaktext', it converts the") % (find-eev2020video "11:58" "PDF to text and it searches") % (find-eev2020video "12:00" "for the page 8 in it, and then") % (find-eev2020video "12:03" "for the string... this") % (find-eev2020video "12:05" "string here in page 8.") % (find-eev2020video "12:08" "It takes a few seconds...") % (find-eev2020video "12:12" "here it is. So this is the") % (find-eev2020video "12:16" "ascii version of this \"Contents\" page") % (find-eev2020video "12:20" "here. Note that this block here") % (find-eev2020video "12:25" "is a kind of an index to that book...") % (find-eev2020video "12:28" "I have the full index somewhere, but") % (find-eev2020video "12:31" "it's very long, so I just copied a few") % (find-eev2020video "12:33" "lines here...") % (find-eev2020video "12:34" "so this is a link to the") % (find-eev2020video "12:38" "Section 1, oops, Chapter 1...") % (find-eev2020video "12:41" "this is the section 1.1,") % (find-eev2020video "12:45" "section 1.1.1, and so on...") % (find-eev2020video "12:48" "and here is a link to the index,") % (find-eev2020video "12:54" "And here is a part of my index") % (find-eev2020video "12:58" "of positions in the video that we just") % (find-eev2020video "13:02" "saw that i think that are especially") % (find-eev2020video "13:05" "relevant.") % (find-eev2020video "13:07" "So this") % (find-eev2020video "13:10" "hyperlink is a kind of a button that") % (find-eev2020video "13:12" "defines this function here,") % (find-eev2020video "13:14" "`find-punchandjudyvideo'... let's try.") % (find-eev2020video "13:27" "And we can also use this for video") % (find-eev2020video "13:31" "tutorials. For example,") % (find-eev2020video "13:33" "this is a very good tutorial on magit.") % (find-eev2020video "13:37" "if we execute this") % (find-eev2020video "13:40" "then these functions are going to be") % (find-eev2020video "13:42" "defined, and these functions open") % (find-eev2020video "13:44" "this tutorial on magit, and") % (find-eev2020video "13:48" "these are some of the positions in the") % (find-eev2020video "13:50" "tutorial that I found especially") % (find-eev2020video "13:51" "relevant. This is a very dense") % (find-eev2020video "13:53" "tutorial, I had to take notes of") % (find-eev2020video "13:55" "everything,") % (find-eev2020video "13:56" "and I had to watch everything") % (find-eev2020video "13:58" "several times...") % (find-eev2020video "14:00" "and for example, this is a link to the") % (find-eev2020video "14:03" "position in the tutorial that explains") % (find-eev2020video "14:06" "how in Spacemacs magit") % (find-eev2020video "14:12" "interprets `SPC g s' as `magit-status'.") % (find-eev2020video "14:17" "let's see...") % (find-eev2020video "14:25" "and here are some examples that I") % (find-eev2020video "14:28" "took from somewhere else... the video") % (find-eev2020video "14:32" "tutorials from") % (find-eev2020video "14:34" "Ralph Koenig about Org mode.") 1.4. How the functions that define shorter hyperlinks are implemented % (find-eev2020video "14:43" "Now let me show how the functions that") % (find-eev2020video "14:45" "define these shorter hyperlinks are") % (find-eev2020video "14:47" "implemented.") % (find-eev2020video "14:48" "The standard way in Emacs to define") % (find-eev2020video "14:51" "functions that define") % (find-eev2020video "14:52" "other functions would be with macros.") % (find-eev2020video "14:55" "Let's see an example. This is a standard") % (find-eev2020video "14:58" "function that") % (find-eev2020video "14:59" "defines new functions...") % (find-eev2020video "15:02" "and if we execute it") % (find-eev2020video "15:06" "its result is the last function that it") % (find-eev2020video "15:09" "defined, which is `ee-glyph',") % (find-eev2020video "15:10" "which is here...") % (find-eev2020video "15:13" "it's implemented as a macro, we can") % (find-eev2020video "15:16" "look at the result of `macro-expand',") % (find-eev2020video "15:19" "which is going to show us the result") % (find-eev2020video "15:21" "of the expansion of this...") % (find-eev2020video "15:25" "instead of expanding and executing it") % (find-eev2020video "15:28" "expands and shows us the result.") % (find-eev2020video "15:33" "Here - the result is a bit messy,") % (find-eev2020video "15:36" "it is too big for") % (find-eev2020video "15:37" "humans to understand, but we can run") % (find-eev2020video "15:40" "this other sexp here, that takes that") % (find-eev2020video "15:44" "result and pretty-prints it.") % (find-eev2020video "15:47" "So this is the pretty-printed version of") % (find-eev2020video "15:50" "this macro here.") % (find-eev2020video "15:54" "We can see that it defines") % (find-eev2020video "15:57" "several functions here...") % (find-eev2020video "16:01" "For example, this one...") % (find-eev2020video "16:06" "and this, just as a curiosity, is a link") % (find-eev2020video "16:09" "to the definition of `cl-defstruct'...") % (find-eev2020video "16:13" "and note that the code is huge...") % (find-eev2020video "16:16" "well, it's very well commented,") % (find-eev2020video "16:19" "but it has lots of special cases,") % (find-eev2020video "16:23" "it supports lots of constructions...") % (find-eev2020video "16:26" "and so it's huge and it's very difficult") % (find-eev2020video "16:27" "to understand. I mean,") % (find-eev2020video "16:30" "I found it very difficult to understand.") % (find-eev2020video "16:33" "And here's a link to the documentation") % (find-eev2020video "16:35" "of `cl-defstruct'...") % (find-eev2020video "16:37" "here in the manual for `cl',") % (find-eev2020video "16:42" "which is a kind of support for some") % (find-eev2020video "16:46" "features of Common Lisp in Emacs.") % (find-eev2020video "16:50" "So let's compare this standard way of") % (find-eev2020video "16:53" "defining") % (find-eev2020video "16:54" "functions that define new functions,") % (find-eev2020video "16:56" "which is with macros...") % (find-eev2020video "16:58" "with this. I'm going to use a slogan") % (find-eev2020video "17:01" "repeatedly - the slogan is") % (find-eev2020video "17:04" "\"I am a very bad programmer\".") % (find-eev2020video "17:06" "I'm a very bad programmer, so when i was") % (find-eev2020video "17:08" "trying to create functions that would") % (find-eev2020video "17:10" "define new functions") % (find-eev2020video "17:12" "I found it easier to generate") % (find-eev2020video "17:14" "Lisp code as text") % (find-eev2020video "17:16" "and then run `read' and `eval' in it.") % (find-eev2020video "17:20" "The `code-c-d' that we saw in the") % (find-eev2020video "17:23" "previous section...") % (find-eev2020video "17:24" "we can see the the code that it produces") % (find-eev2020video "17:28" "by making a copy of this line and") % (find-eev2020video "17:31" "prepending this string here, \"find-\",") % (find-eev2020video "17:33" "to the name of the function...") % (find-eev2020video "17:34" "so instead of running `code-c-d' we run") % (find-eev2020video "17:36" "`find-code-c-d',") % (find-eev2020video "17:38" "and it creates a new temporary buffer") % (find-eev2020video "17:41" "with the code that") % (find-eev2020video "17:44" "`code-c-d' would execute.") % (find-eev2020video "17:47" "So it's a series of `defun's and a few") % (find-eev2020video "17:50" "`setq's... and this thing is implemented") % (find-eev2020video "17:55" "mostly as a template. The low-level...") % (find-eev2020video "17:59" "there's an inner function called") % (find-eev2020video "18:04" "`ee-code-c-d-base' that receives just") % (find-eev2020video "18:06" "these two arguments, and it essentially") % (find-eev2020video "18:09" "just runs the function `ee-template0'") % (find-eev2020video "18:10" "on this string here, and") % (find-eev2020video "18:14" "the things between curly braces are") % (find-eev2020video "18:16" "substituted by the values") % (find-eev2020video "18:18" "of these arguments - here.") % (find-eev2020video "18:23" "There's one part of the tutorial - here -") % (find-eev2020video "18:25" "that explains all these things,") % (find-eev2020video "18:28" "except for the rationale for some") % (find-eev2020video "18:31" "design decisions...") % (find-eev2020video "18:32" "and those design decisions are one of") % (find-eev2020video "18:35" "the many motivations for this talk,") % (find-eev2020video "18:37" "but I'm only going to explain these") % (find-eev2020video "18:39" "things in detail at the end -") % (find-eev2020video "18:42" "which is kind of soon. =)") 1.5. `M-j' % (find-eev2020video "18:48" "In the beginning I said that the three") % (find-eev2020video "18:50" "main keys of eev") % (find-eev2020video "18:51" "are `M-e', `M-k' and `M-j'...") % (find-eev2020video "18:56" "let's see now what `M-j' does.") % (find-eev2020video "19:00" "But I need to start with some") % (find-eev2020video "19:01" "motivation.") % (find-eev2020video "19:03" "The motivation is that we can define") % (find-eev2020video "19:05" "commands with very short names, and") % (find-eev2020video "19:07" "actually I became kind of addicted to") % (find-eev2020video "19:09" "that...") % (find-eev2020video "19:10" "this is an example of `defun' that") % (find-eev2020video "19:13" "defines a command with a very short name.") % (find-eev2020video "19:15" "Its name is just one letter, `e',") % (find-eev2020video "19:18" "and I can invoke it with `M-x e'.") % (find-eev2020video "19:21" "If I type `M-x e' now") % (find-eev2020video "19:24" "it opens a LaTeX file that I'm") % (find-eev2020video "19:27" "working on,") % (find-eev2020video "19:32" "and I create most of my LaTeX files") % (find-eev2020video "19:35" "using template-based functions, like") % (find-eev2020video "19:39" "the implementation of `code-c-d' above...") % (find-eev2020video "19:43" "and these template-based functions create") % (find-eev2020video "19:46" "files with the extension .tex") % (find-eev2020video "19:49" "that start with a series of `defun's") % (find-eev2020video "19:51" "in comments. For example...") % (find-eev2020video "19:53" "Let's look at this example here. If I") % (find-eev2020video "19:56" "execute `find-latex-links' with this") % (find-eev2020video "19:58" "argument, it's going to do several") % (find-eev2020video "20:02" "things for creating a file called") % (find-eev2020video "20:03" "\"/tmp/foo.tex\"...") % (find-eev2020video "20:08" "and the header of that file is going to") % (find-eev2020video "20:11" "be this, which starts with three `defun's") % (find-eev2020video "20:16" "with functions with very short") % (find-eev2020video "20:19" "names in comments.") % (find-eev2020video "20:21" "Let's compare with the situation here...") % (find-eev2020video "20:27" "in my file \"2020favorite-conventions.tex\"") % (find-eev2020video "20:32" "I have this header here, in which I") % (find-eev2020video "20:34" "define six functions with very short") % (find-eev2020video "20:37" "names...") % (find-eev2020video "20:39" "and in this case here, that is even") % (find-eev2020video "20:41" "explained in the tutorial...") % (find-eev2020video "20:43" "we have mnemonics for these short names here:") % (find-eev2020video "20:48" "`c' is \"compile\", `d' is \"display\",") % (find-eev2020video "20:51" "I mean, display the PDF...") % (find-eev2020video "20:54" "and `e' is \"edit\", in the sense of:") % (find-eev2020video "20:57" "make Emacs visit that file.") 1.5.2. `M-j' itself % (find-eev2020video "21:02" "Okay, now I can explain what is `M-j'") % (find-eev2020video "21:05" "itself. We just saw command with") % (find-eev2020video "21:07" "very short _names_, and the idea") % (find-eev2020video "21:09" "behind `M-j' is that we") % (find-eev2020video "21:12" "can define commands with very short") % (find-eev2020video "21:14" "_numbers_.") % (find-eev2020video "21:16" "Let me explain this.") % (find-eev2020video "21:19" "The short explanation for what `M-j' does") % (find-eev2020video "21:22" "is that it jumps to certain") % (find-eev2020video "21:25" "predefined places...") % (find-eev2020video "21:26" "in particular a `M-j' without a numeric") % (find-eev2020video "21:29" "argument takes us to a buffer with") % (find-eev2020video "21:31" "the basic help and the list of") % (find-eev2020video "21:34" "the current eejump targets...") % (find-eev2020video "21:37" "and this is something that is a bit") % (find-eev2020video "21:39" "simpler to understand:") % (find-eev2020video "21:41" "if we type `M-5 M-j' then `M-j' runs") % (find-eev2020video "21:44" "this sexp here, (find-eev-quick-intro),") % (find-eev2020video "21:47" "that is associated to") % (find-eev2020video "21:51" "the argument 5... I say that the target") % (find-eev2020video "21:55" "for the argument 5 is this one.") % (find-eev2020video "21:59" "And if the argument is 2 then the") % (find-eev2020video "22:01" "target associated to the 2 is this") % (find-eev2020video "22:03" "sexp here, that opens...") % (find-eev2020video "22:07" "well, this one opens the main tutorial of") % (find-eev2020video "22:09" "eev, and this one opens another tutorial.") % (find-eev2020video "22:13" "This is a link to one of the tutorials") % (find-eev2020video "22:15" "of eev, to the part that explains `M-j'...") % (find-eev2020video "22:20" "I've copied the the main part of the") % (find-eev2020video "22:22" "text here.") % (find-eev2020video "22:24" "The header - the header that `M-j' shows;") % (find-eev2020video "22:28" "let me show it very quickly...") % (find-eev2020video "22:31" "here is the header and here is the rest -") % (find-eev2020video "22:36" "the header is very beginner friendly, and") % (find-eev2020video "22:39" "if you're a beginner who only knows how to") % (find-eev2020video "22:40" "`M-e' to execute and `M-k' to go back,") % (find-eev2020video "22:48" "then you can, and should, use that header...") % (find-eev2020video "22:52" "I mean this header here -") % (find-eev2020video "22:56" "as your main starting point, and every") % (find-eev2020video "22:59" "time that you feel lost") % (find-eev2020video "23:00" "you can type `M-j' and to go back to") % (find-eev2020video "23:03" "that header...") % (find-eev2020video "23:04" "and you can use its links to navigate to") % (find-eev2020video "23:07" "the documentation for Emacs and eev.") % (find-eev2020video "23:09" "Let me explain that.") % (find-eev2020video "23:11" "This header here has several elisp") % (find-eev2020video "23:14" "hyperlinks...") % (find-eev2020video "23:15" "one here, one here,") % (find-eev2020video "23:19" "one here, one here, and so on...") % (find-eev2020video "23:22" "these ones are links to the \"intro\"s,") % (find-eev2020video "23:25" "which are the tutorials...") % (find-eev2020video "23:29" "(find-eev-quick-intro) is the main") % (find-eev2020video "23:30" "tutorial, and (find-eev-keys-intro)") % (find-eev2020video "23:32" "is a kind of tutorial that is") % (find-eev2020video "23:35" "an index of the main keys...") % (find-eev2020video "23:40" "and after that we have an explanation of") % (find-eev2020video "23:42" "what some numeric prefixes do...") % (find-eev2020video "23:45" "so if we type `M-1 M-j' the effect of that") % (find-eev2020video "23:48" "is exactly the same as executing this,") % (find-eev2020video "23:52" "and we can execute this with `M-e' also.") % (find-eev2020video "24:00" "`M-2 M-j' runs this sexp,") % (find-eev2020video "24:03" "I can also execute it with `M-e'...") % (find-eev2020video "24:06" "here it is, it's this intro, this") % (find-eev2020video "24:14" "sandboxed tutorial... and") % (find-eev2020video "24:18" "here is another sandboxed tutorial.") % (find-eev2020video "24:24" "Let me go back... and then the") % (find-eev2020video "24:27" "documentation says that that header -") % (find-eev2020video "24:30" "the header that is beginner-friendly -") % (find-eev2020video "24:31" "is followed by a section that is very") % (find-eev2020video "24:33" "beginner UN-friendly,") % (find-eev2020video "24:35" "that contains a series of `defun's like") % (find-eev2020video "24:37" "these ones, here...") % (find-eev2020video "24:40" "the last line of the header is this") % (find-eev2020video "24:43" "comment here, and then we have") % (find-eev2020video "24:45" "several `defun's like this.") % (find-eev2020video "24:48" "Let me explain how these things work.") % (find-eev2020video "24:51" "Technically, what happens when we type") % (find-eev2020video "24:53" "`M-j' without any arguments is that it") % (find-eev2020video "24:57" "runs `eejump' with the argument nil,") % (find-eev2020video "25:00" "and then this runs `find-eejumps'.") % (find-eev2020video "25:04" "When I run `M-j' with a numeric") % (find-eev2020video "25:06" "argument, for example") % (find-eev2020video "25:08" "with argument 5, it runs (eejump 5),") % (find-eev2020video "25:11" "and (eejump 5) concatenates this 5") % (find-eev2020video "25:17" "to make a name of a function - this") % (find-eev2020video "25:20" "function here...") % (find-eev2020video "25:21" "and it executes this function,") % (find-eev2020video "25:24" "`eejump-5'... and (eejump-5)") % (find-eev2020video "25:31" "executes (find-eev-quick-intro).") % (find-eev2020video "25:35" "If I execute just `M-j'") % (find-eev2020video "25:39" "this section that shows the current") % (find-eev2020video "25:41" "eejump targets") % (find-eev2020video "25:43" "has a line for eejump-5, this is") % (find-eev2020video "25:47" "exactly the thing that I was explaining") % (find-eev2020video "25:52" "before. So we can use `M-j' to navigate") % (find-eev2020video "25:54" "the tutorials, and we can copy") % (find-eev2020video "25:59" "links to the tutorials to our notes...") % (find-eev2020video "26:07" "oh, sorry this has some typos...") % (find-eev2020video "26:11" "for example, if I execute this") % (find-eev2020video "26:14" "I go to a section of this tutorial here") % (find-eev2020video "26:18" "that explains the main keys of eev,") % (find-eev2020video "26:20" "and these things are hyperlinks... I can") % (find-eev2020video "26:24" "mark a hyperlink like this, it is just") % (find-eev2020video "26:26" "plain text, and I can copy it to my notes...") % (find-eev2020video "26:27" "and the idea is that every time") % (find-eev2020video "26:31" "that I find something that is") % (find-eev2020video "26:33" "interesting I can create a hyperlink to") % (find-eev2020video "26:35" "it, and i can put these links in my notes,") % (find-eev2020video "26:38" "so I can navigate back") % (find-eev2020video "26:40" "to all the interesting positions") % (find-eev2020video "26:42" "very quickly.") 1.5.3. `M-J' (meta-uppercase-J) % (find-eev2020video "26:48" "Ok, next feature; if we type") % (find-eev2020video "26:51" "`M-J' (meta-uppercase-j), then...") % (find-eev2020video "26:58" "this is a function that transforms the") % (find-eev2020video "27:00" "current line in a certain way.") % (find-eev2020video "27:03" "Let me give an example. Let me isolate") % (find-eev2020video "27:06" "this, and let me duplicate") % (find-eev2020video "27:07" "this line to make clear what happens.") % (find-eev2020video "27:11" "If I type `M-J' here") % (find-eev2020video "27:14" "this line here becomes a `defun' for") % (find-eev2020video "27:16" "`ee-jump6', and the target of this") % (find-eev2020video "27:20" "eejump is exactly this sexp here.") % (find-eev2020video "27:24" "Let me undo this mess.") % (find-eev2020video "27:28" "And if the first word in the line is not") % (find-eev2020video "27:31" "a number - for example, here...") % (find-eev2020video "27:32" "let me do the same thing,") % (find-eev2020video "27:36" "duplicate the line and type `M-J'...") % (find-eev2020video "27:41" "then `M-J' converts that to a defun") % (find-eev2020video "27:44" "that defines a function with a very") % (find-eev2020video "27:46" "short name,") % (find-eev2020video "27:49" "and this function with a very short name") % (find-eev2020video "27:52" "opens this file here, in the directory") % (find-eev2020video "27:56" "with the copy of the the git repository") % (find-eev2020video "27:59" "for Org mode.") % (find-eev2020video "28:01" "Let me undo the mess again.") 1.5.4. `M-uppercaseletter' % (find-eev2020video "28:14" "`M-J' is a particular case") % (find-eev2020video "28:17" "of something that I use a lot in eev.") % (find-eev2020video "28:21" "Eev has lots of key sequences") % (find-eev2020video "28:28" "that are like meta-uppercaseletter, and") % (find-eev2020video "28:33" "almost all of them operate on the") % (find-eev2020video "28:35" "current line, and transform the current") % (find-eev2020video "28:37" "line in a certain way.") % (find-eev2020video "28:38" "For example, this is a file name,") % (find-eev2020video "28:42" "and if I type `M-F' here") % (find-eev2020video "28:45" "it becomes a link to that file...") % (find-eev2020video "28:48" "this is the name of a manpage,") % (find-eev2020video "28:50" "and if I type `M-M' here") % (find-eev2020video "28:53" "it converts that to a link to a manpage,") % (find-eev2020video "28:55" "and this is a shell command,") % (find-eev2020video "28:58" "and if i type `M-S' here") % (find-eev2020video "29:01" "it converts that to a link to a") % (find-eev2020video "29:04" "to `find-sh'...") % (find-eev2020video "29:08" "and until a few years ago these") % (find-eev2020video "29:11" "functions with meta-uppercaseletter") % (find-eev2020video "29:12" "were half of my main ways") % (find-eev2020video "29:16" "of creating sexps") % (find-eev2020video "29:18" "with few key strokes. In the beginning, of") % (find-eev2020video "29:21" "course, I had to create my") % (find-eev2020video "29:22" "sexp hyperlinks by typing each character,") % (find-eev2020video "29:25" "but after some time I decided that") % (find-eev2020video "29:28" "i needed something more efficient.") % (find-eev2020video "29:31" "So this is the end of Part 1 of the") % (find-eev2020video "29:34" "presentation.") 2. A tale of two `describe-key's % (find-eev2020video "29:38" "So, this is Part 2 of the presentation,") % (find-eev2020video "29:40" "and the main theme here") % (find-eev2020video "29:41" "is the standard `describe-key'") % (find-eev2020video "29:44" "function that comes with Emacs,") % (find-eev2020video "29:46" "and my variant of it. The thing is that") % (find-eev2020video "29:49" "the standard `describe-key' in Emacs") % (find-eev2020video "29:50" "is user friendly but it is") % (find-eev2020video "29:53" "hacker-unfriendly... well, I felt so,") % (find-eev2020video "29:55" "and when I tried to complement it by") % (find-eev2020video "29:58" "writing a hacker-friendly version of it") % (find-eev2020video "30:00" "that produced the sexp hyperlinks that I") % (find-eev2020video "30:03" "needed I got something that I found really") % (find-eev2020video "30:05" "lovely, and") % (find-eev2020video "30:07" "several of the main designs decisions") % (find-eev2020video "30:09" "of eev can be seen there...") % (find-eev2020video "30:12" "but when I showed my variants to other") % (find-eev2020video "30:14" "people they hated it -") % (find-eev2020video "30:15" "they felt that it was totally against") % (find-eev2020video "30:17" "their notions of") % (find-eev2020video "30:19" "user-friendliness.") % (find-eev2020video "30:23" "Ok, so let's see the standard") % (find-eev2020video "30:25" "`describe-key'. If I run") % (find-eev2020video "30:26" "this hyperlink here I get") % (find-eev2020video "30:30" "the result of running `describe-key'") % (find-eev2020video "30:32" "on the key <down>...") % (find-eev2020video "30:34" "and this is a big buffer with some") % (find-eev2020video "30:36" "things in italics,") % (find-eev2020video "30:38" "and some hyperlinks - here. These") % (find-eev2020video "30:41" "hyperlinks are standard, in the sense that") % (find-eev2020video "30:43" "their targets are not visible and they are") % (find-eev2020video "30:46" "implemented using buttons in Emacs Lisp.") % (find-eev2020video "30:47" "This section of the Emacs manual describes") % (find-eev2020video "30:51" "how buttons work,") % (find-eev2020video "30:56" "and the the source code is") % (find-eev2020video "31:00" "quite difficult... I mean, when I was") % (find-eev2020video "31:03" "starting to try to decipher this,") % (find-eev2020video "31:06" "when I was a beginner using Emacs 19.34") % (find-eev2020video "31:07" "I felt that this `describe-key' was") % (find-eev2020video "31:12" "very difficult to understand,") % (find-eev2020video "31:15" "and I felt that the the people who wrote it") % (find-eev2020video "31:20" "were sacrificing too much of the") % (find-eev2020video "31:23" "hacker-friendliness that I was expecting") % (find-eev2020video "31:26" "from it to make it beginner-friendly.") % (find-eev2020video "31:31" "Let me explain what are the the problems") % (find-eev2020video "31:33" "with the standard `describe-key'.") % (find-eev2020video "31:35" "If we think that hyperlinks") % (find-eev2020video "31:37" "are things like this,") % (find-eev2020video "31:38" "with the TARGET and the TEXT, then in the") % (find-eev2020video "31:41" "button-hyperlinks of `describe-key'") % (find-eev2020video "31:43" "these three bad things happen. First;") % (find-eev2020video "31:47" "it is hard to extract the target from") % (find-eev2020video "31:49" "the hyperlink. Second: it is hard to") % (find-eev2020video "31:51" "recreate Lisp code that would go to that") % (find-eev2020video "31:55" "target, and third: it is hard to copy the") % (find-eev2020video "31:57" "full hyperlink, including the target,") % (find-eev2020video "31:59" "to other buffers -") % (find-eev2020video "32:01" "I already knew how to copy the text.") % (find-eev2020video "32:04" "When I was trying to decipher what") % (find-eev2020video "32:07" "`describe-key' was doing") % (find-eev2020video "32:09" "I created lots of hyperlinks like this") % (find-eev2020video "32:11" "to inspect the text properties and") % (find-eev2020video "32:14" "things like that...") % (find-eev2020video "32:16" "for example, in the description of the") % (find-eev2020video "32:18" "key <down>, here...") % (find-eev2020video "32:20" "we have a button that points to") % (find-eev2020video "32:23" "simple.el...") % (find-eev2020video "32:26" "the text of that button is \"simple.el\",") % (find-eev2020video "32:29" "this hyperlink goes to the middle of this") % (find-eev2020video "32:33" "button-hyperlink here,") % (find-eev2020video "32:35" "this hyperlink here goes to the middle") % (find-eev2020video "32:39" "of this button-hyperlink and then inspects") % (find-eev2020video "32:43" "its text properties, and then goes to") % (find-eev2020video "32:47" "this section here of the description...") % (find-eev2020video "32:51" "so this is a high-level description of") % (find-eev2020video "32:53" "the text properties... I mean,") % (find-eev2020video "32:56" "the text properties that make it") % (find-eev2020video "32:58" "a button... and this is a") % (find-eev2020video "32:59" "lower-level description of these text") % (find-eev2020video "33:02" "properties.") % (find-eev2020video "33:04" "And the button whose text") % (find-eev2020video "33:12" "is \"forward line\", this one,") % (find-eev2020video "33:14" "is slightly different...") % (find-eev2020video "33:16" "this hyperlink here goes to the middle") % (find-eev2020video "33:19" "of that button,") % (find-eev2020video "33:21" "and this hyperlink goes to the middle") % (find-eev2020video "33:24" "of that button, inspects its") % (find-eev2020video "33:25" "text properties, and goes to") % (find-eev2020video "33:28" "the section of this help,") % (find-eev2020video "33:32" "uh, buffer, here that describe the the") % (find-eev2020video "33:35" "button and the lower-level view") % (find-eev2020video "33:37" "of the text properties.") % (find-eev2020video "33:41" "So, I started with things like these to") % (find-eev2020video "33:45" "understand what these buttons were doing,") % (find-eev2020video "33:48" "and I was able to figure out how these") % (find-eev2020video "33:50" "things are implemented, and `describe-key',") % (find-eev2020video "33:52" "and similar help functions in Emacs...") % (find-eev2020video "33:55" "and I discovered that one of the main") % (find-eev2020video "33:57" "lower-level functions that Emacs used") % (find-eev2020video "34:00" "for this is a function called") % (find-eev2020video "34:02" "`find-function-noselect'...") % (find-eev2020video "34:05" "if I run `find-function-noselect' on") % (find-eev2020video "34:08" "'next-line, it returns a pair...") % (find-eev2020video "34:14" "a cons made of a buffer and a position.") % (find-eev2020video "34:18" "So I created functions that would") % (find-eev2020video "34:21" "follow this, that would open that buffer") % (find-eev2020video "34:25" "in that position, and then this is a") % (find-eev2020video "34:28" "pos-spec-list...") % (find-eev2020video "34:29" "so we could go to these positions and") % (find-eev2020video "34:31" "then search for this string, and another") % (find-eev2020video "34:33" "string, and another string, and so on...") % (find-eev2020video "34:36" "so this goes to the definition of") % (find-eev2020video "34:40" "`function-efunction' and then to a") % (find-eev2020video "34:44" "string after it, and I use these things to") % (find-eev2020video "34:47" "implement my own functions") % (find-eev2020video "34:49" " that pointed to the same targets as the") % (find-eev2020video "34:52" "button hyperlinks of `describe-key'...") % (find-eev2020video "34:59" "Again, let me show the comparison...") % (find-eev2020video "35:02" "this is the standard `describe-key' here,") % (find-eev2020video "35:07" "and this is my variant...") % (find-eev2020video "35:10" "it creates a buffer with elisp hyperlinks") % (find-eev2020video "35:14" "about this key.") % (find-eev2020video "35:17" "We get this, so each one of these") % (find-eev2020video "35:20" "functions is either a blank line") % (find-eev2020video "35:22" "or an elisp hyperlink...") % (find-eev2020video "35:28" "here is a slight variant of the function") % (find-eev2020video "35:32" "`find-ekey-links' above. In this variant") % (find-eev2020video "35:35" "the argument is a string that has to be") % (find-eev2020video "35:38" "processed by `read-kbd-macro' to convert it") % (find-eev2020video "35:40" "to the lower-level format...") % (find-eev2020video "35:45" "and note that these functions here that") % (find-eev2020video "35:48" "I wrote...") % (find-eev2020video "35:49" "they display temporary buffers with no") % (find-eev2020video "35:51" "help at all.") % (find-eev2020video "35:53" "To be honest there's a link to a") % (find-eev2020video "35:57" "tutorial here, but") % (find-eev2020video "35:58" "this is a recent addition, so let's ignore") % (find-eev2020video "36:01" "this...") % (find-eev2020video "36:03" "they display temporary buffers") % (find-eev2020video "36:06" "with no help at all, just lots of") % (find-eev2020video "36:08" "hyperlinks,") % (find-eev2020video "36:09" "and these hyperlinks can be... they are") % (find-eev2020video "36:11" "very hacker friendly, in the sense that") % (find-eev2020video "36:13" "they can be followed with") % (find-eev2020video "36:15" "`M-e', they can be copied to other") % (find-eev2020video "36:17" "buffers, because they are plain text,") % (find-eev2020video "36:19" "because they are just sexps...") % (find-eev2020video "36:23" "and they can be inspected, in the sense") % (find-eev2020video "36:26" "that... for example, here") % (find-eev2020video "36:32" "we have a hyperlink to a function that") % (find-eev2020video "36:35" "it may be difficult to figure out what") % (find-eev2020video "36:37" "this function does...") % (find-eev2020video "36:39" "but we can go to that position and then") % (find-eev2020video "36:42" "type `C-h f' to see the") % (find-eev2020video "36:45" "description of this function...") % (find-eev2020video "36:48" "and here is a hyperlink that does that") % (find-eev2020video "36:56" "in my syntax, say.") % (find-eev2020video "37:00" "And these lists of hyperlinks were") % (find-eev2020video "37:02" "generated by this code here,") % (find-eev2020video "37:04" "that just uses backquote to generate") % (find-eev2020video "37:11" "lists of sexps.") % (find-eev2020video "37:14" "And I felt that this function here,") % (find-eev2020video "37:18" "that just generated this list") % (find-eev2020video "37:20" "was very easy to understand and to") % (find-eev2020video "37:22" "modify, so this was hacker-friendly") % (find-eev2020video "37:24" "in the way that I wanted.") % (find-eev2020video "37:28" "And so I started using this...") % (find-eev2020video "37:31" "and this idea of using buffers with") % (find-eev2020video "37:34" "sexp hyperlinks and no help violated") % (find-eev2020video "37:36" "all the notions of user-friendliness") % (find-eev2020video "37:38" "that I knew, so I was") % (find-eev2020video "37:40" "exploring something new at that time.") % (find-eev2020video "37:42" "And this is the end of Part 2.") 3. Killer features % (find-eev2020video "37:46" "Part 3 of this presentation is") % (find-eev2020video "37:49" "about the killer features of eev, or:") % (find-eev2020video "37:52" "Why everybody should use eev, or at least") % (find-eev2020video "37:54" "have eev installed, even if they think") % (find-eev2020video "37:57" "that eev is too weird.") % (find-eev2020video "37:59" "So: this is a very quick listing.") 3.1. Elisp hyperlinks % (find-eev2020video "38:01" "3.1. Eev has elisp hyperlinks, which are") % (find-eev2020video "38:03" "super nice;") 3.2. Lots of tutorials! % (find-eev2020video "38:04" "3.2. It comes with lots of tutorials.") % (find-eev2020video "38:06" "The main one, here, explains all the") % (find-eev2020video "38:07" "main features...") % (find-eev2020video "38:10" "there's also a tutorial that is") % (find-eev2020video "38:14" "an index of") % (find-eev2020video "38:15" "all the other tutorials, here...") % (find-eev2020video "38:18" "many, many, many tutorials.") % (find-eev2020video "38:20" "If we forget everything we can") % (find-eev2020video "38:22" "just type `M-j', and remember that") % (find-eev2020video "38:24" "this this part here is") % (find-eev2020video "38:27" "beginner-friendly and the rest is") % (find-eev2020video "38:29" "beginner-unfriendly;") % (find-eev2020video "38:32" "there's a tutorial on Emacs Lisp, here...") % (find-eev2020video "38:38" "it mainly explains how to understand") % (find-eev2020video "38:41" "elisp code, which is much easier than...") % (find-eev2020video "38:44" "it's much easier to understand elisp code") % (find-eev2020video "38:47" "then to understand how to program elisp,") % (find-eev2020video "38:49" "and most people are only going to need") % (find-eev2020video "38:51" "this.") 3.3. Easy to install, and non-invasive % (find-eev2020video "38:53" "3.3. Eev is very easy to install.") % (find-eev2020video "38:55" "It's in ELPA, so we just need to do") % (find-eev2020video "38:58" "this thing here, and it's very") % (find-eev2020video "39:00" "non-invasive...") % (find-eev2020video "39:03" "several years ago it was a very invasive") % (find-eev2020video "39:06" "package, but then I changed everything.") % (find-eev2020video "39:08" "Now if we toggle eev-mode on and off") % (find-eev2020video "39:13" "what's going to happen is just that the") % (find-eev2020video "39:16" "eev key map becomes activated or") % (find-eev2020video "39:20" "deactivated, and when we") % (find-eev2020video "39:23" "(require 'eev-load) the only things that") % (find-eev2020video "39:28" "happen globally are these things here:") % (find-eev2020video "39:32" "several functions and variables become") % (find-eev2020video "39:34" "defined - all of them have") % (find-eev2020video "39:36" "standard prefixes, except for one;") % (find-eev2020video "39:39" "three characters are changed in the") % (find-eev2020video "39:43" "standard display table to make them") % (find-eev2020video "39:45" "appear as colored glyphs:") % (find-eev2020video "39:47" "the red star and") % (find-eev2020video "39:49" "tha open double angle brackets and") % (find-eev2020video "39:53" "the closed double angle brackets;") % (find-eev2020video "39:58" "and two environment variables are set.") % (find-eev2020video "40:01" "and this is a trivial technicality...") % (find-eev2020video "40:04" "we just run a `defadvice'") % (find-eev2020video "40:07" "around one function that is used by man.") % (find-eev2020video "40:10" "Just this.") 3.4. High discoverability factor % (find-eev2020video "40:12" "3.4. Also, eev has a") % (find-eev2020video "40:15" "very high discoverability factor, and") 3.5. A way to create "hyperlinks to here" % (find-eev2020video "40:18" "3.5. there's a very easy") % (find-eev2020video "40:21" "way to create a hyperlink to \"here\".") % (find-eev2020video "40:25" "I do not have time to show this now,") % (find-eev2020video "40:27" "but for example, if I'm") % (find-eev2020video "40:29" "here in a tutorial and I think that this") % (find-eev2020video "40:34" "section is something interesting, and i") % (find-eev2020video "40:36" "want to create a hyperlink to it") % (find-eev2020video "40:39" "i just have to type a certain key") % (find-eev2020video "40:41" "sequence - `M-h M-h' - here...") % (find-eev2020video "40:43" "and here I got a hyperlink that I can") % (find-eev2020video "40:46" "copy to my notes, and this hyperlink goes") % (find-eev2020video "40:50" "to that section.") 3.6. Hyperlinks to specific points in PDF documents and video files % (find-eev2020video "40:58" "3.6. We have hyperlinks that point to") % (find-eev2020video "41:00" "specific positions in") % (find-eev2020video "41:02" "PDF documents and in video files... here,") % (find-eev2020video "41:05" "this one opens a PDF and displays it,") % (find-eev2020video "41:09" "this one opens a PDF") % (find-eev2020video "41:10" "and converts it to text,") % (find-eev2020video "41:13" "and this one opens a video in a") % (find-eev2020video "41:16" "certain position.") 3.7. A way to control shell-like programs ("eepitch") % (find-eev2020video "41:18" "And we also have a way to control") % (find-eev2020video "41:20" "shell-like programs.") % (find-eev2020video "41:22" "In my presentation of the last year I") % (find-eev2020video "41:25" "spent one third of the presentation") % (find-eev2020video "41:27" "explaining this, and") % (find-eev2020video "41:28" "i think that I gave a very good") % (find-eev2020video "41:30" "demonstration there...") % (find-eev2020video "41:31" "the demonstration is here:") % (find-eev2020video "41:35" "we can go to the web page, and go to") % (find-eev2020video "41:38" "this section of the web page,") % (find-eev2020video "41:41" "and start by this point...") % (find-eev2020video "41:47" "and here we have an explanation,") % (find-eev2020video "41:51" "and so on, whatever...") 3.8. Elisp tutorial % (find-eev2020video "41:55" "3.8. and i've already mentioned this") % (find-eev2020video "41:58" "before... eev comes with a very nice") % (find-eev2020video "41:59" "elisp tutorial.") % (find-eev2020video "42:02" "So that's it, this is the end of part 3.") 4. A tale of several "The User"s % (find-eev2020video "42:05" "So this is the last part of my") % (find-eev2020video "42:07" "presentation, and it's about the title") % (find-eev2020video "42:09" "of the presentation...") % (find-eev2020video "42:11" "I called the presentation \"Why") % (find-eev2020video "42:13" "most of the best features in eev look") % (find-eev2020video "42:16" "like 5-minute hacks\". I've already") % (find-eev2020video "42:20" "run out of time, so I have to skip this") % (find-eev2020video "42:23" "first part here, in which i describe how I") % (find-eev2020video "42:28" "was exposed to several different notions") % (find-eev2020video "42:31" "of user friendliness...") % (find-eev2020video "42:33" "and how the one that really blew my mind") % (find-eev2020video "42:35" "was the one in") % (find-eev2020video "42:37" "a certain Forth environment...") % (find-eev2020video "42:41" "and let me make the long story") % (find-eev2020video "42:44" "very, very short.") % (find-eev2020video "42:46" "In all this process I switched from") % (find-eev2020video "42:49" "the belief that the \"User\" was always") % (find-eev2020video "42:51" "someone else, someone external, and that") % (find-eev2020video "42:53" "I always had to write my programs for") % (find-eev2020video "42:57" "this external \"User\"... I switched") % (find-eev2020video "43:00" "from that to the belief that _I_ am") % (find-eev2020video "43:02" "the \"User\",") % (find-eev2020video "43:03" "and I can play with the interfaces that") % (find-eev2020video "43:05" "I want, I can write programs that") % (find-eev2020video "43:10" "only I am going to understand, I can") % (find-eev2020video "43:12" "experiment with hundreds of interfaces") % (find-eev2020video "43:14" "and then select the best ones,") % (find-eev2020video "43:16" "and document them, and then share them") % (find-eev2020video "43:18" "with other people") % (find-eev2020video "43:20" "who are also experimenting with") % (find-eev2020video "43:23" "interfaces in their own ways...") % (find-eev2020video "43:26" "and so eev has lots of things that are") % (find-eev2020video "43:30" "user-friendly in these unusual ways that") % (find-eev2020video "43:32" "I've explained before...") % (find-eev2020video "43:34" "and if we disconsider that this") % (find-eev2020video "43:37" "notion of user-friendliness is valid,") % (find-eev2020video "43:40" "then these things that eev") % (find-eev2020video "43:44" "implement they are user-friendly and") % (find-eev2020video "43:46" "hacker-friendly at the same time.") % (find-eev2020video "43:48" "And let me show one example. This is one") % (find-eev2020video "43:51" "that really took me one only five") % (find-eev2020video "43:54" "minutes to implement.") % (find-eev2020video "43:56" "At one point, a few months ago,") % (find-eev2020video "43:59" "I discovered") % (find-eev2020video "44:00" "that Sacha Chua's weekly posts about") % (find-eev2020video "44:04" "Emacs News were also") % (find-eev2020video "44:07" "being posted to a mailing list that is") % (find-eev2020video "44:09" "stored at") % (find-eev2020video "44:11" "lists.gnu.org, and it's called") % (find-eev2020video "44:14" "emacs-tangents...") % (find-eev2020video "44:16" "and I found a way to create") % (find-eev2020video "44:19" "the links to to the posts in both places,") % (find-eev2020video "44:25" "but I had to use a template for that...") % (find-eev2020video "44:28" "so what we are seeing here now") % (find-eev2020video "44:30" "is a template with the default") % (find-eev2020video "44:32" "values - so this means that we have not") % (find-eev2020video "44:36" "set the year correctly, we have not set") % (find-eev2020video "44:39" "the month correctly,") % (find-eev2020video "44:40" "or the day correctly, but if we run this") % (find-eev2020video "44:44" "sexp here...") % (find-eev2020video "44:46" "let me do something else before...") % (find-eev2020video "44:50" "if we run this sexp here") % (find-eev2020video "44:55" "we change some of these entries") % (find-eev2020video "45:00" "in the template, and we get these links") % (find-eev2020video "45:04" "here... they all work.") % (find-eev2020video "45:06" "For example, this one opens") % (find-eev2020video "45:09" "the blog post in Sacha Chua's site,") % (find-eev2020video "45:12" "and this one") % (find-eev2020video "45:16" "opens it in the mailing list...") % (find-eev2020video "45:21" "and sometimes I want the Org source of") % (find-eev2020video "45:23" "that, and the easiest way to get the") % (find-eev2020video "45:25" "Org source is to") % (find-eev2020video "45:27" "look at this link here, that has an") % (find-eev2020video "45:30" "attachment...") % (find-eev2020video "45:31" "and if I take this") % (find-eev2020video "45:35" "link here, and I take this") % (find-eev2020video "45:38" "stem that points to the attachment,") % (find-eev2020video "45:42" "and I put it here, and I generate this") % (find-eev2020video "45:44" "page again") % (find-eev2020video "45:45" "with all this data, then I get") % (find-eev2020video "45:49" "a script - here -") % (find-eev2020video "45:50" "that downloads... let me switch to a") % (find-eev2020video "45:53" "smaller font -") % (find-eev2020video "45:54" "it downloads this attachment,") % (find-eev2020video "45:58" "and it renames that attachment to") % (find-eev2020video "46:00" "something-emacs-news.org.") % (find-eev2020video "46:13" "Here - the file is already here,") % (find-eev2020video "46:16" "already with the right name, so I can") % (find-eev2020video "46:19" "open it with just this hyperlink...") % (find-eev2020video "46:20" "let me go to the big font again -") % (find-eev2020video "46:25" "and now i have the Org source for that") % (find-eev2020video "46:28" "hyperlink...") % (find-eev2020video "46:29" "sorry, for that blog post,") % (find-eev2020video "46:33" "and so this one-line thing here") % (find-eev2020video "46:37" "is, in a sense, a hyperlink to") % (find-eev2020video "46:42" "this blog post in all its formats...") % (find-eev2020video "46:45" "if I execute this I get links to") % (find-eev2020video "46:48" "to all the places where it is posted,") % (find-eev2020video "46:52" "and I get a script to") % (find-eev2020video "46:54" "download a local copy of the") % (find-eev2020video "46:56" "Org source of it... and that's it.") % (find-eev2020video "47:00" "Well, I'm already out of time, so let me") % (find-eev2020video "47:03" "finish here.") % (find-eev2020video "47:04" "Thanks! Bye! =)") ]==] unrevised_bigstr = [==[ (find-eev2020video "00:00" "") (find-eev2020video "32:16" " ") ]==] -- Local Variables: -- mode: lua -- coding: utf-8-unix -- End: