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: