summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorEmacsConf Organizers <orga@front0.emacsconf.org>2021-01-23 04:05:42 +0000
committerEmacsConf Organizers <orga@front0.emacsconf.org>2021-01-23 04:05:42 +0000
commit527b3acd682c2018f9a355dece546555097063f6 (patch)
tree2809453fe5169d7c39e7ab49df65097c92922dc2
parent600159d1a79203dc50cf3eace14006c9f909fd7a (diff)
parent5a8b400ad98211ce46f76bd094dffcc9c4ac8d39 (diff)
downloademacsconf-wiki-527b3acd682c2018f9a355dece546555097063f6.tar.xz
emacsconf-wiki-527b3acd682c2018f9a355dece546555097063f6.zip
Merge branch 'master' of git://git.emacsconf.org/emacsconf-wiki
-rw-r--r--2020/info/21.md2
-rw-r--r--2020/organizers-notebook.org10
-rw-r--r--2020/subtitles/emacsconf-2020--21-on-why-most-of-the-best-features-in-eev-look-like-5-minute-hacks--eduardo-ochs-autogen.vtt3301
-rw-r--r--2020/subtitles/emacsconf-2020--21-on-why-most-of-the-best-features-in-eev-look-like-5-minute-hacks--eduardo-ochs.vtt2848
4 files changed, 2854 insertions, 3307 deletions
diff --git a/2020/info/21.md b/2020/info/21.md
index 5a316368..aa5dabf7 100644
--- a/2020/info/21.md
+++ b/2020/info/21.md
@@ -1,7 +1,7 @@
# On why most of the best features in eev look like 5-minute hacks
Eduardo Ochs
-[[!template id=vid src="https://mirror.csclub.uwaterloo.ca/emacsconf/2020/emacsconf-2020--21-on-why-most-of-the-best-features-in-eev-look-like-5-minute-hacks--eduardo-ochs.webm"]]
+[[!template id=vid src="https://mirror.csclub.uwaterloo.ca/emacsconf/2020/emacsconf-2020--21-on-why-most-of-the-best-features-in-eev-look-like-5-minute-hacks--eduardo-ochs.webm" subtitles="/2020/subtitles/emacsconf-2020--21-on-why-most-of-the-best-features-in-eev-look-like-5-minute-hacks--eduardo-ochs.vtt"]]
[Download compressed .webm video (43.9M)](https://mirror.csclub.uwaterloo.ca/emacsconf/2020/smaller/emacsconf-2020--21-on-why-most-of-the-best-features-in-eev-look-like-5-minute-hacks--eduardo-ochs--vp9-q56-video-original-audio.webm)
In the last months there were several hundreds of messages in
diff --git a/2020/organizers-notebook.org b/2020/organizers-notebook.org
index 9f86f397..855c63ba 100644
--- a/2020/organizers-notebook.org
+++ b/2020/organizers-notebook.org
@@ -13,8 +13,8 @@
* Tasks
** Manually transcribe
Either subtitles (with timestamps) or a text transcript (no timestamps) is perfectly okay.
-- [ ] mplsCorwin: emacsconf-2020--03-idea-to-novel-superstructure-emacs-for-writing--questions--bala-ramadurai.webm
-- [ ] mplsCorwin: emacsconf-2020--08-building-reproducible-emacs--andrew-tropin.webm
+- [ ] sachac: emacsconf-2020--03-idea-to-novel-superstructure-emacs-for-writing--questions--bala-ramadurai.webm
+- [ ] sachac: emacsconf-2020--08-building-reproducible-emacs--andrew-tropin.webm
- [X] sachac: emacsconf-2020--10-lead-your-future-with-org--andrea.webm
Added transcript to info/10.md, seeing if YouTube can automatically
assign timing. Took about 24 minutes to transcribe 8 minute talk. If
@@ -46,9 +46,9 @@ I modified the =subed= package to work with VTT files. The modified version is a
- [X] sachac [[./info/16.md]] [[./subtitles/emacsconf-2020--16-org-roam-presentation-demonstration-and-whats-on-the-horizon--leo-vivier.vtt]]
- [X] sachac [[./info/17.md]] [[./subtitles/emacsconf-2020--17-org-mode-and-org-roam-for-scholars-and-researchers--noorah-alhasan.vtt]]
- [X] sachac [[./info/18.md]] [[./subtitles/emacsconf-2020--18-org-roam-technical-presentation--leo-vivier.vtt]]
-- [X] sachac [[./info/19.md]] [[./subtitles/emacsconf-2020--19-sharing-blogs-and-more-with-org-webring--brett-gilio-autogen.vtt]]
-- [X] sachac [[./info/20.md]] [[./subtitles/emacsconf-2020--20-omg-macros--corwin-brust-autogen.vtt]]
-- [ ] [[./subtitles/emacsconf-2020--21-on-why-most-of-the-best-features-in-eev-look-like-5-minute-hacks--eduardo-ochs-autogen.vtt]]
+- [X] sachac [[./info/19.md]] [[./subtitles/emacsconf-2020--19-sharing-blogs-and-more-with-org-webring--brett-gilio.vtt]]
+- [X] sachac [[./info/20.md]] [[./subtitles/emacsconf-2020--20-omg-macros--corwin-brust.vtt]]
+- [X] sachac [[./info/21.md]] [[./subtitles/emacsconf-2020--21-on-why-most-of-the-best-features-in-eev-look-like-5-minute-hacks--eduardo-ochs.vtt]]
- [ ] sachac [[./subtitles/emacsconf-2020--22-powering-up-special-blocks--musa-al-hassy-autogen.vtt]]
- [ ] [[./subtitles/emacsconf-2020--23-incremental-parsing-with-emacs-tree-sitter--questions--tuan-anh-nguyen-autogen.vtt]]
- [ ] [[./subtitles/emacsconf-2020--23-incremental-parsing-with-emacs-tree-sitter--tuan-anh-nguyen-autogen.vtt]]
diff --git a/2020/subtitles/emacsconf-2020--21-on-why-most-of-the-best-features-in-eev-look-like-5-minute-hacks--eduardo-ochs-autogen.vtt b/2020/subtitles/emacsconf-2020--21-on-why-most-of-the-best-features-in-eev-look-like-5-minute-hacks--eduardo-ochs-autogen.vtt
deleted file mode 100644
index e9bcd225..00000000
--- a/2020/subtitles/emacsconf-2020--21-on-why-most-of-the-best-features-in-eev-look-like-5-minute-hacks--eduardo-ochs-autogen.vtt
+++ /dev/null
@@ -1,3301 +0,0 @@
-WEBVTT
-
-00:00:00.080 --> 00:00:02.639
-hi my name is eduardo x I'm this person
-
-00:00:02.639 --> 00:00:03.439
-here
-
-00:00:03.439 --> 00:00:06.240
-and the title of this talk is on why
-
-00:00:06.240 --> 00:00:07.120
-most of
-
-00:00:07.120 --> 00:00:09.519
-most of the best features in ev look
-
-00:00:09.519 --> 00:00:11.599
-like five minute hacks
-
-00:00:11.599 --> 00:00:13.759
-and this is a presentation at the max
-
-00:00:13.759 --> 00:00:15.280
-conf 2020
-
-00:00:15.280 --> 00:00:23.199
-happening in november 22 28 and 29 2020
-
-00:00:23.199 --> 00:00:25.519
-so this is part one of the presentation
-
-00:00:25.519 --> 00:00:27.680
-and here I'm going to explain some
-
-00:00:27.680 --> 00:00:29.840
-some ideas that are prerequisites for
-
-00:00:29.840 --> 00:00:31.039
-understanding the rest of the
-
-00:00:31.039 --> 00:00:32.320
-presentation
-
-00:00:32.320 --> 00:00:35.440
-the three main keys of ev are matay meta
-
-00:00:35.440 --> 00:00:35.760
-k
-
-00:00:35.760 --> 00:00:37.920
-and mata j and I'm going to start by
-
-00:00:37.920 --> 00:00:42.079
-explaining metae and meta k
-
-00:00:42.079 --> 00:00:44.960
-metae is used to follow hyperlink and
-
-00:00:44.960 --> 00:00:46.800
-technically it is
-
-00:00:46.800 --> 00:00:49.680
-essentially just a ctrl e to move to the
-
-00:00:49.680 --> 00:00:50.879
-end of the line and then
-
-00:00:50.879 --> 00:00:54.320
-a ctrl x control e to execute this the
-
-00:00:54.320 --> 00:00:58.960
-sext before point at the end of the line
-
-00:00:58.960 --> 00:01:00.879
-and the thing is that a max comes with
-
-00:01:00.879 --> 00:01:03.120
-many functions that can be used as sex
-
-00:01:03.120 --> 00:01:05.040
-hyperlinks
-
-00:01:05.040 --> 00:01:07.040
-we can consider that they point to
-
-00:01:07.040 --> 00:01:09.040
-somewhere I'm going to refer to that as
-
-00:01:09.040 --> 00:01:09.520
-the
-
-00:01:09.520 --> 00:01:11.920
-target of the hyperlink and if we
-
-00:01:11.920 --> 00:01:12.960
-execute this
-
-00:01:12.960 --> 00:01:15.759
-sex paper links would go to that target
-
-00:01:15.759 --> 00:01:17.119
-for example this one
-
-00:01:17.119 --> 00:01:20.000
-is a hyperlink that points to a buffer
-
-00:01:20.000 --> 00:01:22.720
-with demand paid for cat
-
-00:01:22.720 --> 00:01:25.040
-and usually but not always after
-
-00:01:25.040 --> 00:01:27.040
-following the hyperlink we can go back
-
-00:01:27.040 --> 00:01:29.840
-by just skilling the the current buffer
-
-00:01:29.840 --> 00:01:30.720
-that the hyperlink
-
-00:01:30.720 --> 00:01:34.400
-created the target of the hyperlink
-
-00:01:34.400 --> 00:01:38.000
-but this example here is badly behaved
-
-00:01:38.000 --> 00:01:41.360
-if we execute it it creates a new frame
-
-00:01:41.360 --> 00:01:43.360
-and to go back to the previous situation
-
-00:01:43.360 --> 00:01:44.640
-we have to either
-
-00:01:44.640 --> 00:01:52.840
-click here or type ctrl x50
-
-00:01:52.840 --> 00:01:54.880
-uh
-
-00:01:54.880 --> 00:01:57.520
-so here are some examples of sex
-
-00:01:57.520 --> 00:02:00.640
-hyperlinks using standard max functions
-
-00:02:00.640 --> 00:02:03.600
-this third one is uh badly behaved in a
-
-00:02:03.600 --> 00:02:04.880
-different way
-
-00:02:04.880 --> 00:02:08.879
-if executed we the target is created in
-
-00:02:08.879 --> 00:02:09.840
-the same window
-
-00:02:09.840 --> 00:02:13.840
-as we are now but it also shows a lot of
-
-00:02:13.840 --> 00:02:16.000
-garbage here in the aqua area so
-
-00:02:16.000 --> 00:02:20.840
-the the current frame becomes a bit
-
-00:02:20.840 --> 00:02:23.280
-messy
-
-00:02:23.280 --> 00:02:26.160
-and well one of the first things that I
-
-00:02:26.160 --> 00:02:28.319
-did when I was creating av
-
-00:02:28.319 --> 00:02:30.720
-many many years ago was that I created
-
-00:02:30.720 --> 00:02:31.680
-variants
-
-00:02:31.680 --> 00:02:34.840
-of all these functions that were better
-
-00:02:34.840 --> 00:02:36.640
-behaved
-
-00:02:36.640 --> 00:02:38.640
-and they were better behaved in two
-
-00:02:38.640 --> 00:02:40.480
-senses the obvious one
-
-00:02:40.480 --> 00:02:43.040
-was that they they all created the
-
-00:02:43.040 --> 00:02:43.680
-target
-
-00:02:43.680 --> 00:02:45.840
-in the same window as before so I could
-
-00:02:45.840 --> 00:02:48.720
-go back by just typing meta k
-
-00:02:48.720 --> 00:02:51.040
-which is essentially just killed this
-
-00:02:51.040 --> 00:02:52.879
-buffer
-
-00:02:52.879 --> 00:02:55.200
-and well but I also implemented
-
-00:02:55.200 --> 00:02:56.480
-something extra that
-
-00:02:56.480 --> 00:02:59.040
-are the post back lists for example for
-
-00:02:59.040 --> 00:02:59.840
-example these
-
-00:02:59.840 --> 00:03:03.599
-extra arguments here are a postback list
-
-00:03:03.599 --> 00:03:06.080
-and this extra arguments specify
-
-00:03:06.080 --> 00:03:09.599
-position and the target buffer
-
-00:03:09.599 --> 00:03:13.040
-and in this example this this spot
-
-00:03:13.040 --> 00:03:16.720
-spec list means starting from the from
-
-00:03:16.720 --> 00:03:18.239
-the beginning of the buffer
-
-00:03:18.239 --> 00:03:20.560
-search for the first occurrence of this
-
-00:03:20.560 --> 00:03:22.239
-string
-
-00:03:22.239 --> 00:03:24.159
-after that after the beginning of the
-
-00:03:24.159 --> 00:03:25.519
-buffer and then
-
-00:03:25.519 --> 00:03:28.159
-search for the first occurrence of this
-
-00:03:28.159 --> 00:03:29.120
-string
-
-00:03:29.120 --> 00:03:33.760
-after that
-
-00:03:33.760 --> 00:03:36.560
-eev also defines some hyperlinks that do
-
-00:03:36.560 --> 00:03:38.799
-not create new buffers
-
-00:03:38.799 --> 00:03:41.280
-uh here is the first example if I
-
-00:03:41.280 --> 00:03:41.840
-execute
-
-00:03:41.840 --> 00:03:45.920
-this one this one is a hyperlink to the
-
-00:03:45.920 --> 00:03:46.959
-to the result
-
-00:03:46.959 --> 00:03:50.720
-of running this show comment date uh
-
-00:03:50.720 --> 00:03:52.959
-but instead of showing the result in the
-
-00:03:52.959 --> 00:03:55.040
-new buffer the result is shown
-
-00:03:55.040 --> 00:03:58.959
-here so if execute to this type link
-
-00:03:58.959 --> 00:04:01.840
-the result of date the output of data is
-
-00:04:01.840 --> 00:04:04.239
-shown in the echo area and if executed
-
-00:04:04.239 --> 00:04:07.120
-again
-
-00:04:07.120 --> 00:04:09.519
-it shows the result again and the result
-
-00:04:09.519 --> 00:04:11.519
-changes every second
-
-00:04:11.519 --> 00:04:15.200
-and if so this is a variant
-
-00:04:15.200 --> 00:04:18.720
-of fine sh
-
-00:04:18.720 --> 00:04:21.840
-uh find sh0 is the variant that
-
-00:04:21.840 --> 00:04:24.960
-just shows the output in the echo area
-
-00:04:24.960 --> 00:04:28.080
-and find sh shows the output in
-
-00:04:28.080 --> 00:04:31.759
-a new buffer
-
-00:04:31.759 --> 00:04:35.919
-and here is an example of a hyperlink
-
-00:04:35.919 --> 00:04:37.520
-that
-
-00:04:37.520 --> 00:04:40.000
-calls an external program if execute
-
-00:04:40.000 --> 00:04:41.280
-this
-
-00:04:41.280 --> 00:04:43.759
-it it calls google chrome to open a
-
-00:04:43.759 --> 00:04:46.639
-certain url
-
-00:04:46.639 --> 00:04:51.520
-here it is let's go back to mx
-
-00:04:51.520 --> 00:04:55.280
-if execute this happening here
-
-00:04:55.280 --> 00:04:58.479
-it invokes my favorite pdf viewer which
-
-00:04:58.479 --> 00:04:58.880
-is
-
-00:04:58.880 --> 00:05:02.560
-xpdf it makes xpdf
-
-00:05:02.560 --> 00:05:07.759
-open this pdf page it is pdf
-
-00:05:07.759 --> 00:05:10.880
-in this page and this other arguments
-
-00:05:10.880 --> 00:05:15.199
-are ignored let me show how it works
-
-00:05:15.199 --> 00:05:19.120
-here it is this is a an accept from a
-
-00:05:19.120 --> 00:05:20.160
-book
-
-00:05:20.160 --> 00:05:22.639
-so page 3 and the pdf corresponds to
-
-00:05:22.639 --> 00:05:23.199
-page
-
-00:05:23.199 --> 00:05:26.400
-113 in the book and
-
-00:05:26.400 --> 00:05:29.360
-this variant here of the hyperlink above
-
-00:05:29.360 --> 00:05:31.759
-it opens the pdf in a different way
-
-00:05:31.759 --> 00:05:34.560
-it runs a program called pdf to text on
-
-00:05:34.560 --> 00:05:36.479
-this pdf here
-
-00:05:36.479 --> 00:05:39.600
-and max takes the output of
-
-00:05:39.600 --> 00:05:42.880
-run epd after text on this pdf here
-
-00:05:42.880 --> 00:05:46.080
-and displays it in a buffer and now this
-
-00:05:46.080 --> 00:05:47.280
-postback list
-
-00:05:47.280 --> 00:05:50.000
-is interpreted in a different way this
-
-00:05:50.000 --> 00:05:51.280
-thing is interpreted
-
-00:05:51.280 --> 00:05:54.400
-as a as a number of a page and a max
-
-00:05:54.400 --> 00:05:54.800
-goes
-
-00:05:54.800 --> 00:05:57.520
-to page three by counting form feeds in
-
-00:05:57.520 --> 00:05:58.240
-the
-
-00:05:58.240 --> 00:06:01.440
-converted version of the pdf and then it
-
-00:06:01.440 --> 00:06:03.039
-searches for this string
-
-00:06:03.039 --> 00:06:06.319
-and in this three so let's execute this
-
-00:06:06.319 --> 00:06:08.479
-to see what happens
-
-00:06:08.479 --> 00:06:10.800
-here it is I opened the same page as
-
-00:06:10.800 --> 00:06:14.800
-before
-
-00:06:14.800 --> 00:06:18.400
-it starts with lecture one so
-
-00:06:18.400 --> 00:06:20.720
-the other hyperlink searched for this
-
-00:06:20.720 --> 00:06:25.520
-string and for this string here
-
-00:06:25.520 --> 00:06:28.160
-uh and this thing here is a hyperlink to
-
-00:06:28.160 --> 00:06:30.400
-video
-
-00:06:30.400 --> 00:06:32.720
-and when I executed it's going to open
-
-00:06:32.720 --> 00:06:34.560
-this video here
-
-00:06:34.560 --> 00:06:37.759
-at this time this time stamp let's see
-
-00:06:37.759 --> 00:06:41.199
-one two three one
-
-00:06:41.199 --> 00:06:46.840
-two three that's the way to do
-
-00:06:46.840 --> 00:06:49.440
-it
-
-00:06:49.440 --> 00:06:52.560
-and also some hyperlinks that that I
-
-00:06:52.560 --> 00:06:53.680
-defined
-
-00:06:53.680 --> 00:06:56.479
-uh they don't work like like usual
-
-00:06:56.479 --> 00:06:58.160
-hyperlinks they work more
-
-00:06:58.160 --> 00:07:01.440
-like browser buttons
-
-00:07:01.440 --> 00:07:06.240
-these buttons that appear in web pages
-
-00:07:06.240 --> 00:07:09.120
-in the sense that these buttons usually
-
-00:07:09.120 --> 00:07:11.360
-don't open a new page they usually
-
-00:07:11.360 --> 00:07:13.280
-just do something to change the current
-
-00:07:13.280 --> 00:07:14.960
-page
-
-00:07:14.960 --> 00:07:18.160
-if I execute this the action of this
-
-00:07:18.160 --> 00:07:18.880
-function
-
-00:07:18.880 --> 00:07:22.240
-eek is to uh
-
-00:07:22.240 --> 00:07:24.800
-it interprets this string as a series of
-
-00:07:24.800 --> 00:07:25.919
-keys and it
-
-00:07:25.919 --> 00:07:28.840
-acts as if the user had typed all these
-
-00:07:28.840 --> 00:07:30.319
-keys so
-
-00:07:30.319 --> 00:07:33.680
-if executed I get a hello in the next
-
-00:07:33.680 --> 00:07:34.400
-line
-
-00:07:34.400 --> 00:07:36.639
-if executed again I get another hello
-
-00:07:36.639 --> 00:07:39.440
-another hello hello hello etc etc
-
-00:07:39.440 --> 00:07:44.319
-let me undo this mess oops
-
-00:07:44.319 --> 00:07:47.840
-and here is another kind of button
-
-00:07:47.840 --> 00:07:51.440
-that defines a new function if I execute
-
-00:07:51.440 --> 00:07:54.879
-this sex here at this moment though is
-
-00:07:54.879 --> 00:07:55.759
-not defined
-
-00:07:55.759 --> 00:07:57.919
-and if I execute this mx is going to
-
-00:07:57.919 --> 00:08:00.000
-show me a message saying
-
-00:08:00.000 --> 00:08:03.599
-uh symbols function cell is not defined
-
-00:08:03.599 --> 00:08:05.840
-something like this
-
-00:08:05.840 --> 00:08:09.520
-but if I execute the defund
-
-00:08:09.520 --> 00:08:12.960
-this the action of this function o here
-
-00:08:12.960 --> 00:08:16.479
-is to run this which opens a certain
-
-00:08:16.479 --> 00:08:18.960
-directory
-
-00:08:18.960 --> 00:08:21.840
-let me go back and here is another
-
-00:08:21.840 --> 00:08:23.039
-button that defines
-
-00:08:23.039 --> 00:08:25.840
-several functions at the same time if I
-
-00:08:25.840 --> 00:08:26.479
-execute
-
-00:08:26.479 --> 00:08:32.320
-this
-
-00:08:32.320 --> 00:08:35.599
-note that the the result of executing
-
-00:08:35.599 --> 00:08:36.719
-this expression
-
-00:08:36.719 --> 00:08:38.640
-is the name of one of the functions that
-
-00:08:38.640 --> 00:08:40.080
-it defined
-
-00:08:40.080 --> 00:08:42.800
-that is this one here and let me explain
-
-00:08:42.800 --> 00:08:43.360
-the
-
-00:08:43.360 --> 00:08:46.959
-these examples uh one of the functions
-
-00:08:46.959 --> 00:08:48.800
-that this thing here defined
-
-00:08:48.800 --> 00:08:51.839
-is called find or git file where
-
-00:08:51.839 --> 00:08:54.640
-this or gate in the middle of its name
-
-00:08:54.640 --> 00:08:55.040
-is
-
-00:08:55.040 --> 00:08:59.600
-exactly this first argument to code cd
-
-00:08:59.600 --> 00:09:02.640
-and the action of running find or get
-
-00:09:02.640 --> 00:09:03.120
-file
-
-00:09:03.120 --> 00:09:06.399
-on a string like this is that
-
-00:09:06.399 --> 00:09:09.680
-find or get file takes the string
-
-00:09:09.680 --> 00:09:13.360
-and prepends this string to it
-
-00:09:13.360 --> 00:09:15.600
-this one here which is the second
-
-00:09:15.600 --> 00:09:17.920
-argument to called cd
-
-00:09:17.920 --> 00:09:21.760
-and then it executes find flying
-
-00:09:21.760 --> 00:09:25.680
-on the result which is this one
-
-00:09:25.680 --> 00:09:28.320
-and fine flying is my variant of find
-
-00:09:28.320 --> 00:09:28.800
-file
-
-00:09:28.800 --> 00:09:32.080
-that supports both spec lists
-
-00:09:32.080 --> 00:09:36.880
-and this function here that I'm
-
-00:09:36.880 --> 00:09:39.600
-referring to as a button it also defines
-
-00:09:39.600 --> 00:09:41.200
-a function called
-
-00:09:41.200 --> 00:09:44.880
-find audit node here where the or gate
-
-00:09:44.880 --> 00:09:46.080
-is the same string
-
-00:09:46.080 --> 00:09:50.320
-as here and this function opens a node
-
-00:09:50.320 --> 00:09:54.160
-of of an info manual this one
-
-00:09:54.160 --> 00:09:57.920
-this text here opens this node in the
-
-00:09:57.920 --> 00:10:00.080
-org manual
-
-00:10:00.080 --> 00:10:03.519
-it is equivalent to this text here
-
-00:10:03.519 --> 00:10:06.800
-so in the passage from this line to this
-
-00:10:06.800 --> 00:10:08.720
-line we prepended
-
-00:10:08.720 --> 00:10:11.920
-to the node name the name of the manual
-
-00:10:11.920 --> 00:10:15.040
-here and find node is my variant
-
-00:10:15.040 --> 00:10:18.160
-of this standard mx function here
-
-00:10:18.160 --> 00:10:20.399
-but find node also supports post
-
-00:10:20.399 --> 00:10:23.519
-backlists
-
-00:10:23.519 --> 00:10:26.640
-eevee also defines some functions that
-
-00:10:26.640 --> 00:10:28.640
-define shorter hyperlinks to pdfs and
-
-00:10:28.640 --> 00:10:30.800
-videos
-
-00:10:30.800 --> 00:10:32.880
-remember that this thing here is a
-
-00:10:32.880 --> 00:10:34.720
-shorter hyperlink to a
-
-00:10:34.720 --> 00:10:37.120
-to a file and this thing here is a
-
-00:10:37.120 --> 00:10:39.040
-shorter hyperlink to a node and
-
-00:10:39.040 --> 00:10:43.200
-in an mx menu in an info manual
-
-00:10:43.200 --> 00:10:46.079
-uh if we run this thing here this code
-
-00:10:46.079 --> 00:10:47.279
-pdf page
-
-00:10:47.279 --> 00:10:50.240
-this acts like a button that defines a
-
-00:10:50.240 --> 00:10:52.880
-certain function
-
-00:10:52.880 --> 00:10:56.399
-and this string this other sex
-
-00:10:56.399 --> 00:10:59.040
-here defines another function the first
-
-00:10:59.040 --> 00:11:00.240
-one defines
-
-00:11:00.240 --> 00:11:03.040
-the function find funcspivac page and
-
-00:11:03.040 --> 00:11:05.360
-the second one defines the function find
-
-00:11:05.360 --> 00:11:09.279
-from text when we run the
-
-00:11:09.279 --> 00:11:12.240
-file when we run findfoxpivotpage it
-
-00:11:12.240 --> 00:11:13.440
-opens
-
-00:11:13.440 --> 00:11:17.600
-this pdf here the name is
-
-00:11:17.600 --> 00:11:20.640
-quite long uh
-
-00:11:20.640 --> 00:11:23.839
-this example opens this pdf at page 8
-
-00:11:23.839 --> 00:11:26.079
-and searches for the string contents
-
-00:11:26.079 --> 00:11:28.000
-oops sorry in this case
-
-00:11:28.000 --> 00:11:31.279
-in this case it just ignores this string
-
-00:11:31.279 --> 00:11:33.519
-here it only considers
-
-00:11:33.519 --> 00:11:37.360
-the number of the page let's try
-
-00:11:37.360 --> 00:11:42.640
-ah we got
-
-00:11:42.640 --> 00:11:45.200
-here it is uh the contents of a book
-
-00:11:45.200 --> 00:11:46.880
-that is freely
-
-00:11:46.880 --> 00:11:50.800
-available uh here is another page of the
-
-00:11:50.800 --> 00:11:51.760
-book
-
-00:11:51.760 --> 00:11:55.040
-and if we execute the this happening
-
-00:11:55.040 --> 00:11:55.519
-here
-
-00:11:55.519 --> 00:11:58.399
-find funk's pivot text it converts the
-
-00:11:58.399 --> 00:11:59.920
-pdf to text
-
-00:11:59.920 --> 00:12:03.040
-and it searches for the page eight
-
-00:12:03.040 --> 00:12:05.040
-in it and then for the string this
-
-00:12:05.040 --> 00:12:08.079
-string here in page eight
-
-00:12:08.079 --> 00:12:12.240
-it takes a few seconds
-
-00:12:12.240 --> 00:12:16.160
-here it is so this is the
-
-00:12:16.160 --> 00:12:20.320
-ascii version of this contents page
-
-00:12:20.320 --> 00:12:25.040
-here uh note that this block here
-
-00:12:25.040 --> 00:12:28.800
-is a kind of an index to that book
-
-00:12:28.800 --> 00:12:31.680
-uh I have the full index somewhere but
-
-00:12:31.680 --> 00:12:33.600
-it's very long so I just copied a few
-
-00:12:33.600 --> 00:12:34.959
-lines here
-
-00:12:34.959 --> 00:12:38.959
-uh so this is a link to the to set
-
-00:12:38.959 --> 00:12:42.160
-section one chapter one this is the
-
-00:12:42.160 --> 00:12:45.360
-section 1.1
-
-00:12:45.360 --> 00:12:48.959
-section 1.1.1 and so on
-
-00:12:48.959 --> 00:12:54.000
-and here is a link to the index
-
-00:12:54.000 --> 00:12:58.079
-and here is a part of my index
-
-00:12:58.079 --> 00:13:02.800
-of positions in the video that we just
-
-00:13:02.800 --> 00:13:03.279
-saw
-
-00:13:03.279 --> 00:13:05.760
-that I think that are especially
-
-00:13:05.760 --> 00:13:07.360
-relevant
-
-00:13:07.360 --> 00:13:10.639
-uh so this I believe
-
-00:13:10.639 --> 00:13:12.399
-hyperlink is a kind of a button that
-
-00:13:12.399 --> 00:13:14.160
-defines this function here
-
-00:13:14.160 --> 00:13:18.839
-find punch and punch into the video
-
-00:13:18.839 --> 00:13:27.600
-uh
-
-00:13:27.600 --> 00:13:31.440
-and we can also use this for video
-
-00:13:31.440 --> 00:13:33.360
-tutorials for example
-
-00:13:33.360 --> 00:13:37.200
-this is a very good tutorial on on magic
-
-00:13:37.200 --> 00:13:40.880
-if we execute this
-
-00:13:40.880 --> 00:13:42.560
-then these functions are going to be
-
-00:13:42.560 --> 00:13:44.800
-defined and these functions open
-
-00:13:44.800 --> 00:13:48.399
-this tutorial on magic
-
-00:13:48.399 --> 00:13:50.079
-these are some of the positions in the
-
-00:13:50.079 --> 00:13:51.839
-tutorial that I found especially
-
-00:13:51.839 --> 00:13:53.920
-especially relevant this is a very dense
-
-00:13:53.920 --> 00:13:55.600
-tutorial I had to take notes of
-
-00:13:55.600 --> 00:13:56.480
-everything
-
-00:13:56.480 --> 00:13:59.040
-and I had to watch everything things
-
-00:13:59.040 --> 00:14:00.800
-several times
-
-00:14:00.800 --> 00:14:03.440
-and for example this is a link to the
-
-00:14:03.440 --> 00:14:06.480
-position in the tutorial that explains
-
-00:14:06.480 --> 00:14:09.600
-uh how in space
-
-00:14:09.600 --> 00:14:12.880
-space max magic magic
-
-00:14:12.880 --> 00:14:17.600
-interprets space gs magic status
-
-00:14:17.600 --> 00:14:20.480
-let's see beginners space gs to initiate
-
-00:14:20.480 --> 00:14:22.320
-magic's git status
-
-00:14:22.320 --> 00:14:25.600
-uh you can also do that's it
-
-00:14:25.600 --> 00:14:28.800
-and here are some examples that I
-
-00:14:28.800 --> 00:14:32.160
-took from somewhere else the video
-
-00:14:32.160 --> 00:14:34.240
-tutorials from
-
-00:14:34.240 --> 00:14:43.519
-ralph koenig about org mode
-
-00:14:43.519 --> 00:14:45.519
-now let me show how the functions that
-
-00:14:45.519 --> 00:14:47.440
-define this router hyperlinks are
-
-00:14:47.440 --> 00:14:48.720
-implemented
-
-00:14:48.720 --> 00:14:51.199
-the standard ways in max to define
-
-00:14:51.199 --> 00:14:52.480
-functions that define
-
-00:14:52.480 --> 00:14:55.760
-other functions would be with macros uh
-
-00:14:55.760 --> 00:14:58.320
-let's see an example this is a standard
-
-00:14:58.320 --> 00:14:59.040
-function that
-
-00:14:59.040 --> 00:15:01.540
-defines new functions
-
-00:15:01.540 --> 00:15:02.959
-[Music]
-
-00:15:02.959 --> 00:15:06.959
-and if we execute it one of the res
-
-00:15:06.959 --> 00:15:09.040
-its result is the last function that it
-
-00:15:09.040 --> 00:15:10.160
-defined which is
-
-00:15:10.160 --> 00:15:13.920
-e-grief which is here
-
-00:15:13.920 --> 00:15:16.959
-it's implemented as a macro we can
-
-00:15:16.959 --> 00:15:19.360
-look at the result of macro expand which
-
-00:15:19.360 --> 00:15:20.880
-is going to show
-
-00:15:20.880 --> 00:15:23.519
-show us the result of of this of the
-
-00:15:23.519 --> 00:15:25.519
-expansion of this
-
-00:15:25.519 --> 00:15:28.000
-instead of expanding and executing it
-
-00:15:28.000 --> 00:15:28.959
-just
-
-00:15:28.959 --> 00:15:33.199
-expands and shows us the result
-
-00:15:33.199 --> 00:15:36.000
-here the result is a bit messy is too
-
-00:15:36.000 --> 00:15:37.600
-big for
-
-00:15:37.600 --> 00:15:40.959
-humans to understand but we can run
-
-00:15:40.959 --> 00:15:44.240
-this or this text here that takes that
-
-00:15:44.240 --> 00:15:47.519
-that result and pretty prints it
-
-00:15:47.519 --> 00:15:50.959
-so this is the pretty printed version of
-
-00:15:50.959 --> 00:15:54.000
-uh this macro here
-
-00:15:54.000 --> 00:15:57.600
-we can see that it defines
-
-00:15:57.600 --> 00:16:01.120
-several functions here
-
-00:16:01.120 --> 00:16:06.399
-for example this one
-
-00:16:06.399 --> 00:16:09.360
-and this just as a curiosity is a link
-
-00:16:09.360 --> 00:16:09.920
-to
-
-00:16:09.920 --> 00:16:13.839
-the definition of cld struct
-
-00:16:13.839 --> 00:16:16.880
-and note that the code is huge uh
-
-00:16:16.880 --> 00:16:19.199
-well it's very well commented but it's
-
-00:16:19.199 --> 00:16:20.079
-it has
-
-00:16:20.079 --> 00:16:23.759
-lots of special cases it has uh
-
-00:16:23.759 --> 00:16:26.959
-it supports lots of constructions and so
-
-00:16:26.959 --> 00:16:27.920
-it's huge and
-
-00:16:27.920 --> 00:16:30.639
-it's very difficult to understand I mean
-
-00:16:30.639 --> 00:16:33.360
-I found it very difficult to understand
-
-00:16:33.360 --> 00:16:35.040
-and here's a link to document the
-
-00:16:35.040 --> 00:16:37.759
-documentation of cld struct
-
-00:16:37.759 --> 00:16:42.000
-here in the manual for
-
-00:16:42.000 --> 00:16:46.000
-cl which is a kind of support for some
-
-00:16:46.000 --> 00:16:50.480
-features of common lisp in the max
-
-00:16:50.480 --> 00:16:53.600
-so let's compare this standard way of
-
-00:16:53.600 --> 00:16:54.639
-defining
-
-00:16:54.639 --> 00:16:56.560
-functions that define new functions
-
-00:16:56.560 --> 00:16:58.320
-which is with macros
-
-00:16:58.320 --> 00:17:01.680
-with this I'm going to use a slogan
-
-00:17:01.680 --> 00:17:04.160
-repeatedly the slogan is I am a very bad
-
-00:17:04.160 --> 00:17:06.319
-programmer
-
-00:17:06.319 --> 00:17:08.880
-I'm a very bad programmer so when I was
-
-00:17:08.880 --> 00:17:10.640
-trying to create functions that would
-
-00:17:10.640 --> 00:17:12.240
-define new functions
-
-00:17:12.240 --> 00:17:14.480
-I found it easier to generally generate
-
-00:17:14.480 --> 00:17:16.400
-this code as text
-
-00:17:16.400 --> 00:17:20.559
-and then run read and eval in it
-
-00:17:20.559 --> 00:17:23.199
-the code cd that we saw in the previous
-
-00:17:23.199 --> 00:17:24.640
-section
-
-00:17:24.640 --> 00:17:28.079
-we can see the the code that it produces
-
-00:17:28.079 --> 00:17:29.039
-by
-
-00:17:29.039 --> 00:17:31.039
-making a copy of this line and
-
-00:17:31.039 --> 00:17:33.280
-prepending this string here to the name
-
-00:17:33.280 --> 00:17:34.480
-of the function
-
-00:17:34.480 --> 00:17:36.720
-so instead of running code cd we run
-
-00:17:36.720 --> 00:17:38.400
-find code cd
-
-00:17:38.400 --> 00:17:41.280
-and it creates a new temporary buffer
-
-00:17:41.280 --> 00:17:44.400
-with the code that
-
-00:17:44.400 --> 00:17:47.760
-code cd would execute
-
-00:17:47.760 --> 00:17:50.320
-so it's a series of the fonts and a few
-
-00:17:50.320 --> 00:17:54.080
-set cues and so on
-
-00:17:54.080 --> 00:17:57.600
-and this thing is implemented mostly as
-
-00:17:57.600 --> 00:17:59.120
-a template
-
-00:17:59.120 --> 00:18:02.160
-uh the lola the
-
-00:18:02.160 --> 00:18:04.160
-there's an inner function called ee
-
-00:18:04.160 --> 00:18:06.240
-called cd base that receives just
-
-00:18:06.240 --> 00:18:08.799
-these two arguments and it says
-
-00:18:08.799 --> 00:18:10.640
-essentially just runs the function
-
-00:18:10.640 --> 00:18:14.320
-e template zero on the string here and
-
-00:18:14.320 --> 00:18:16.480
-the things between curly braces are
-
-00:18:16.480 --> 00:18:18.559
-substituted by the values
-
-00:18:18.559 --> 00:18:23.600
-of these arguments here
-
-00:18:23.600 --> 00:18:25.919
-there's one part of the tutorial here
-
-00:18:25.919 --> 00:18:28.480
-that explains all these things
-
-00:18:28.480 --> 00:18:31.039
-uh except for the rationale for some
-
-00:18:31.039 --> 00:18:32.559
-design decisions
-
-00:18:32.559 --> 00:18:35.360
-and those design decisions are one of
-
-00:18:35.360 --> 00:18:37.280
-the many motivations for this talk but
-
-00:18:37.280 --> 00:18:37.760
-um
-
-00:18:37.760 --> 00:18:39.679
-we are I'm only going to explain these
-
-00:18:39.679 --> 00:18:42.640
-things in detail at the end
-
-00:18:42.640 --> 00:18:48.480
-which is kind of so on
-
-00:18:48.480 --> 00:18:50.320
-in the beginning I said that the three
-
-00:18:50.320 --> 00:18:51.600
-main keys of av
-
-00:18:51.600 --> 00:18:56.000
-are meta e meta k and meta j
-
-00:18:56.000 --> 00:19:00.080
-let's see now what met what meta j does
-
-00:19:00.080 --> 00:19:01.520
-uh but I need to start with some
-
-00:19:01.520 --> 00:19:04.640
-motivation uh the motivation is that we
-
-00:19:04.640 --> 00:19:06.559
-can define commands with very short
-
-00:19:06.559 --> 00:19:08.240
-names and actually I became kind of
-
-00:19:08.240 --> 00:19:10.160
-addicted to that
-
-00:19:10.160 --> 00:19:13.200
-this is an example of the fund that
-
-00:19:13.200 --> 00:19:15.600
-defines a comment with a very short name
-
-00:19:15.600 --> 00:19:18.000
-its name is just one letter e
-
-00:19:18.000 --> 00:19:21.200
-and I can invoke you invoke it with meta
-
-00:19:21.200 --> 00:19:21.520
-x
-
-00:19:21.520 --> 00:19:24.720
-e if I type meta xp
-
-00:19:24.720 --> 00:19:27.360
-now it opens a latex file that I'm
-
-00:19:27.360 --> 00:19:31.130
-working on
-
-00:19:31.130 --> 00:19:32.559
-[Music]
-
-00:19:32.559 --> 00:19:35.200
-and I create most of my latex files
-
-00:19:35.200 --> 00:19:37.120
-using
-
-00:19:37.120 --> 00:19:39.200
-template template-based functions like
-
-00:19:39.200 --> 00:19:40.559
-the the
-
-00:19:40.559 --> 00:19:43.760
-implementation of code cd above and
-
-00:19:43.760 --> 00:19:46.559
-this template-based functions create
-
-00:19:46.559 --> 00:19:49.280
-files with extension.tag
-
-00:19:49.280 --> 00:19:51.280
-that start with a series of the fonts
-
-00:19:51.280 --> 00:19:53.919
-and comments for example
-
-00:19:53.919 --> 00:19:56.240
-let's look at this example here if I
-
-00:19:56.240 --> 00:19:58.320
-execute find the attack links with this
-
-00:19:58.320 --> 00:19:59.440
-argument
-
-00:19:59.440 --> 00:20:02.159
-uh it's going it's going to do several
-
-00:20:02.159 --> 00:20:03.440
-things for creating a
-
-00:20:03.440 --> 00:20:06.880
-file called slash tmp slash forward
-
-00:20:06.880 --> 00:20:08.320
-attack
-
-00:20:08.320 --> 00:20:11.200
-and the header of that file is going to
-
-00:20:11.200 --> 00:20:12.400
-be this
-
-00:20:12.400 --> 00:20:16.080
-which starts with two and with three
-
-00:20:16.080 --> 00:20:19.280
-the fonts with functions with very short
-
-00:20:19.280 --> 00:20:21.919
-names and comments
-
-00:20:21.919 --> 00:20:27.520
-let's compare with the situation here
-
-00:20:27.520 --> 00:20:32.799
-in my file 2020 favorite conventions.tag
-
-00:20:32.799 --> 00:20:34.640
-I have this header here in which I
-
-00:20:34.640 --> 00:20:37.039
-define six functions with very short
-
-00:20:37.039 --> 00:20:39.360
-names
-
-00:20:39.360 --> 00:20:41.919
-and in this case here that is even
-
-00:20:41.919 --> 00:20:44.799
-explained in the tutorial
-
-00:20:44.799 --> 00:20:48.000
-this we have mnemonics for
-
-00:20:48.000 --> 00:20:51.520
-these short names here and c is compile
-
-00:20:51.520 --> 00:20:54.799
-d is display I mean display the pdf
-
-00:20:54.799 --> 00:20:57.760
-and e is added in the sense of make a
-
-00:20:57.760 --> 00:20:58.159
-max
-
-00:20:58.159 --> 00:21:02.320
-visit that file
-
-00:21:02.320 --> 00:21:05.039
-okay now I can explain what is meta j
-
-00:21:05.039 --> 00:21:06.480
-itself
-
-00:21:06.480 --> 00:21:08.880
-uh we just saw comments with very short
-
-00:21:08.880 --> 00:21:09.600
-names
-
-00:21:09.600 --> 00:21:12.320
-and the idea is behind meta j is that we
-
-00:21:12.320 --> 00:21:14.840
-can define comments with very short
-
-00:21:14.840 --> 00:21:16.480
-numbers
-
-00:21:16.480 --> 00:21:19.679
-let me explain this uh
-
-00:21:19.679 --> 00:21:22.559
-the short explanation for what meta j
-
-00:21:22.559 --> 00:21:23.039
-does
-
-00:21:23.039 --> 00:21:25.360
-is that it jumps to set certain
-
-00:21:25.360 --> 00:21:27.039
-predefined places
-
-00:21:27.039 --> 00:21:29.760
-in particular a meta j without a numeric
-
-00:21:29.760 --> 00:21:30.799
-argument
-
-00:21:30.799 --> 00:21:33.280
-takes us to a buffer with with the basic
-
-00:21:33.280 --> 00:21:34.080
-help
-
-00:21:34.080 --> 00:21:37.679
-and a list of the current age of targets
-
-00:21:37.679 --> 00:21:39.760
-and this is something that is a bit
-
-00:21:39.760 --> 00:21:41.520
-simpler to understand
-
-00:21:41.520 --> 00:21:44.559
-if we type meta five meta j
-
-00:21:44.559 --> 00:21:47.919
-then meta j runs this sex
-
-00:21:47.919 --> 00:21:51.120
-here that is associated to
-
-00:21:51.120 --> 00:21:55.440
-the argument five I say that the target
-
-00:21:55.440 --> 00:21:59.039
-for the argument five is this one
-
-00:21:59.039 --> 00:22:01.520
-and if the argument is true then the
-
-00:22:01.520 --> 00:22:03.760
-target associated to the to the true
-
-00:22:03.760 --> 00:22:07.039
-is this sex here that opens
-
-00:22:07.039 --> 00:22:09.600
-well this one opens the main tutorial vv
-
-00:22:09.600 --> 00:22:10.240
-and this one
-
-00:22:10.240 --> 00:22:13.679
-opens another tutorial
-
-00:22:13.679 --> 00:22:15.679
-this is a link to one of the tutorials
-
-00:22:15.679 --> 00:22:20.480
-of ev to the part that explains meta j
-
-00:22:20.480 --> 00:22:22.559
-I've copied the the main part of the
-
-00:22:22.559 --> 00:22:24.559
-text here
-
-00:22:24.559 --> 00:22:28.159
-the header the header that meta j shows
-
-00:22:28.159 --> 00:22:31.360
-let me show it very quickly here
-
-00:22:31.360 --> 00:22:33.919
-here is their header and here is their
-
-00:22:33.919 --> 00:22:36.320
-rest
-
-00:22:36.320 --> 00:22:39.039
-the header is very beginner friendly and
-
-00:22:39.039 --> 00:22:40.000
-if you're a beginner
-
-00:22:40.000 --> 00:22:42.159
-who only knows how to use meta e to
-
-00:22:42.159 --> 00:22:44.559
-execute and met
-
-00:22:44.559 --> 00:22:46.799
-this should be okay and meta k to go
-
-00:22:46.799 --> 00:22:48.240
-back
-
-00:22:48.240 --> 00:22:52.320
-then you can and should use that header
-
-00:22:52.320 --> 00:22:56.720
-I mean this header here
-
-00:22:56.720 --> 00:22:59.360
-as your main starting point and every
-
-00:22:59.360 --> 00:23:00.799
-time that you feel lost
-
-00:23:00.799 --> 00:23:03.679
-you can type meta j and to go back to
-
-00:23:03.679 --> 00:23:04.799
-that header
-
-00:23:04.799 --> 00:23:07.039
-and you can use its links to navigate to
-
-00:23:07.039 --> 00:23:08.000
-the documentation
-
-00:23:08.000 --> 00:23:11.360
-for max nav let me explain that
-
-00:23:11.360 --> 00:23:14.799
-uh this header here has several ellis
-
-00:23:14.799 --> 00:23:15.679
-hyperlinks
-
-00:23:15.679 --> 00:23:19.039
-one here one here
-
-00:23:19.039 --> 00:23:22.400
-one here one here and so on
-
-00:23:22.400 --> 00:23:25.760
-uh these ones are links to the
-
-00:23:25.760 --> 00:23:29.280
-to the intros which are the tutorials
-
-00:23:29.280 --> 00:23:30.880
-find if you quick enter in the main
-
-00:23:30.880 --> 00:23:32.480
-tutorial and find ev
-
-00:23:32.480 --> 00:23:35.760
-keys intro is a kind of tutorial that is
-
-00:23:35.760 --> 00:23:36.720
-an index of
-
-00:23:36.720 --> 00:23:40.000
-the main keys
-
-00:23:40.000 --> 00:23:42.559
-and after that we have an explanation of
-
-00:23:42.559 --> 00:23:43.279
-what some
-
-00:23:43.279 --> 00:23:46.799
-numeric prefixes do so if we type
-
-00:23:46.799 --> 00:23:50.240
-met one method j the effect of that is
-
-00:23:50.240 --> 00:23:53.200
-exactly the same as executing this and
-
-00:23:53.200 --> 00:23:54.640
-we can execute this
-
-00:23:54.640 --> 00:24:00.159
-with meta e also
-
-00:24:00.159 --> 00:24:03.679
-meta tube meta j runs this sex and
-
-00:24:03.679 --> 00:24:06.960
-I can also execute it with meta e
-
-00:24:06.960 --> 00:24:10.559
-here it is it's this uh
-
-00:24:10.559 --> 00:24:14.240
-intro this uh
-
-00:24:14.240 --> 00:24:18.400
-sandbox tutorial and
-
-00:24:18.400 --> 00:24:24.640
-here is another sandbox tutorial
-
-00:24:24.640 --> 00:24:27.039
-let me go back and then the
-
-00:24:27.039 --> 00:24:28.720
-documentation says that
-
-00:24:28.720 --> 00:24:30.880
-that header the header that is beginner
-
-00:24:30.880 --> 00:24:31.760
-friendly
-
-00:24:31.760 --> 00:24:33.679
-is followed by a section that is very
-
-00:24:33.679 --> 00:24:35.520
-beginner unfriendly
-
-00:24:35.520 --> 00:24:37.600
-that contains a series of the fonts like
-
-00:24:37.600 --> 00:24:40.400
-these ones
-
-00:24:40.400 --> 00:24:43.440
-here the last line of the header is this
-
-00:24:43.440 --> 00:24:44.640
-comment here
-
-00:24:44.640 --> 00:24:46.720
-and then we have several defense like
-
-00:24:46.720 --> 00:24:48.559
-this
-
-00:24:48.559 --> 00:24:51.440
-let me explain how these things work
-
-00:24:51.440 --> 00:24:53.840
-technically what happens when we type
-
-00:24:53.840 --> 00:24:57.360
-meta j without any arguments is that it
-
-00:24:57.360 --> 00:24:57.840
-runs
-
-00:24:57.840 --> 00:25:00.960
-eu jump with argument neil and then
-
-00:25:00.960 --> 00:25:04.640
-this runs 5 e jumps
-
-00:25:04.640 --> 00:25:06.480
-when I run meta j with a numeric
-
-00:25:06.480 --> 00:25:08.000
-argument for example
-
-00:25:08.000 --> 00:25:11.120
-with argument 5 it runs a jump
-
-00:25:11.120 --> 00:25:14.400
-5 and e jump five
-
-00:25:14.400 --> 00:25:17.679
-uh concatenates this five one
-
-00:25:17.679 --> 00:25:20.400
-to make a name of a function this
-
-00:25:20.400 --> 00:25:21.679
-function here
-
-00:25:21.679 --> 00:25:24.320
-and it executes this function e jump
-
-00:25:24.320 --> 00:25:24.720
-five
-
-00:25:24.720 --> 00:25:28.880
-you jump uh dash five
-
-00:25:28.880 --> 00:25:31.919
-and eu jump dash five is
-
-00:25:31.919 --> 00:25:35.520
-executes find ev equity intro
-
-00:25:35.520 --> 00:25:39.360
-if I execute just meta j
-
-00:25:39.360 --> 00:25:41.440
-the section that shows the current age
-
-00:25:41.440 --> 00:25:43.919
-on targets
-
-00:25:43.919 --> 00:25:47.120
-has a line for e job five this is that
-
-00:25:47.120 --> 00:25:48.159
-is exactly the
-
-00:25:48.159 --> 00:25:52.400
-thing that I was explaining before
-
-00:25:52.400 --> 00:25:54.840
-so we can use meta j to navigate the
-
-00:25:54.840 --> 00:25:59.520
-tutorials and we can copy the links
-
-00:25:59.520 --> 00:26:03.440
-sorry we can copy links to the to
-
-00:26:03.440 --> 00:26:07.919
-tutorials to our notes
-
-00:26:07.919 --> 00:26:11.840
-oh sorry this has some typos
-
-00:26:11.840 --> 00:26:14.880
-for example if I execute this
-
-00:26:14.880 --> 00:26:18.080
-I go to a section of this tutorial here
-
-00:26:18.080 --> 00:26:20.640
-that explains the main keys of ev
-
-00:26:20.640 --> 00:26:24.320
-and these things are hyperlinks I can
-
-00:26:24.320 --> 00:26:26.240
-mark a hyperlink like this it is just
-
-00:26:26.240 --> 00:26:27.440
-plain text and I
-
-00:26:27.440 --> 00:26:30.559
-can copy it to my notes and the idea is
-
-00:26:30.559 --> 00:26:31.760
-that every time
-
-00:26:31.760 --> 00:26:33.520
-every time that I find something that is
-
-00:26:33.520 --> 00:26:35.520
-interesting I can create a hyperlink to
-
-00:26:35.520 --> 00:26:36.240
-it
-
-00:26:36.240 --> 00:26:38.720
-and I can put these links in my notes so
-
-00:26:38.720 --> 00:26:40.799
-I can navigate back
-
-00:26:40.799 --> 00:26:42.960
-to all the interesting positions very
-
-00:26:42.960 --> 00:26:48.799
-quickly
-
-00:26:48.799 --> 00:26:51.760
-okay next feature if we type meta
-
-00:26:51.760 --> 00:26:54.080
-uppercase j
-
-00:26:54.080 --> 00:26:57.600
-uh then
-
-00:26:57.600 --> 00:27:00.080
-this this is a function that transforms
-
-00:27:00.080 --> 00:27:03.679
-the current line in a certain way
-
-00:27:03.679 --> 00:27:06.080
-let me give an example let me isolate
-
-00:27:06.080 --> 00:27:07.360
-this and let me create
-
-00:27:07.360 --> 00:27:09.919
-duplicate this line to to make clear
-
-00:27:09.919 --> 00:27:11.039
-what happens
-
-00:27:11.039 --> 00:27:14.240
-if I type meta uppercase j here
-
-00:27:14.240 --> 00:27:16.880
-this line here becomes the fund for a
-
-00:27:16.880 --> 00:27:17.440
-jump
-
-00:27:17.440 --> 00:27:21.200
-6 and the target of this e-jump
-
-00:27:21.200 --> 00:27:24.799
-is exactly this sex here
-
-00:27:24.799 --> 00:27:28.559
-let me undo this mess
-
-00:27:28.559 --> 00:27:31.360
-and if the first word in the line is not
-
-00:27:31.360 --> 00:27:32.840
-a number for example
-
-00:27:32.840 --> 00:27:36.240
-here let me do the same thing
-
-00:27:36.240 --> 00:27:39.039
-duplicate the line and type meta
-
-00:27:39.039 --> 00:27:41.200
-uppercase j
-
-00:27:41.200 --> 00:27:44.240
-then mat uppercase j converts that to a
-
-00:27:44.240 --> 00:27:45.600
-defund that defines
-
-00:27:45.600 --> 00:27:49.440
-a function with a very short name
-
-00:27:49.440 --> 00:27:52.720
-and this function with a very short name
-
-00:27:52.720 --> 00:27:56.720
-opens this file here in the directory
-
-00:27:56.720 --> 00:27:59.360
-with the copy of the the git repository
-
-00:27:59.360 --> 00:28:01.360
-for org mode
-
-00:28:01.360 --> 00:28:05.360
-let me undo the mass again
-
-00:28:05.360 --> 00:28:09.120
-oops
-
-00:28:09.120 --> 00:28:14.640
-that's it
-
-00:28:14.640 --> 00:28:17.760
-meta uppercase j is a
-
-00:28:17.760 --> 00:28:21.279
-particular case of of something that
-
-00:28:21.279 --> 00:28:24.559
-I use a lot in eevee I have if he has
-
-00:28:24.559 --> 00:28:25.279
-lots of
-
-00:28:25.279 --> 00:28:28.799
-comments that sorry key sequences
-
-00:28:28.799 --> 00:28:31.780
-that are like meta uppercase letter and
-
-00:28:31.780 --> 00:28:33.200
-[Music]
-
-00:28:33.200 --> 00:28:35.279
-almost all of them operate on the
-
-00:28:35.279 --> 00:28:37.279
-current line and transform the current
-
-00:28:37.279 --> 00:28:38.880
-line in certain way
-
-00:28:38.880 --> 00:28:42.000
-for example this is a file name
-
-00:28:42.000 --> 00:28:45.360
-and if I type meta uppercase f here
-
-00:28:45.360 --> 00:28:48.640
-it becomes a link to that file this is
-
-00:28:48.640 --> 00:28:50.000
-the name of a month page
-
-00:28:50.000 --> 00:28:53.600
-and if I type meta uppercase m here
-
-00:28:53.600 --> 00:28:55.760
-it converts that to the link to a month
-
-00:28:55.760 --> 00:28:58.080
-page and this is a shell command
-
-00:28:58.080 --> 00:29:01.679
-and if I type meta uppercase s here
-
-00:29:01.679 --> 00:29:04.960
-it converts that to a link to a
-
-00:29:04.960 --> 00:29:08.720
-to find fan shell
-
-00:29:08.720 --> 00:29:11.919
-and until a few years ago these
-
-00:29:11.919 --> 00:29:12.960
-functions
-
-00:29:12.960 --> 00:29:16.159
-with matter uppercase letter were half
-
-00:29:16.159 --> 00:29:18.080
-of my main ways of creating sex
-
-00:29:18.080 --> 00:29:18.880
-hyperlinks
-
-00:29:18.880 --> 00:29:21.039
-with few key strokes in the beginning of
-
-00:29:21.039 --> 00:29:22.399
-course I had to create my
-
-00:29:22.399 --> 00:29:25.600
-sex pipelines by typing each character
-
-00:29:25.600 --> 00:29:28.640
-but uh after some time and decided that
-
-00:29:28.640 --> 00:29:31.520
-I needed something more efficient
-
-00:29:31.520 --> 00:29:34.559
-so this is end of part one of the two of
-
-00:29:34.559 --> 00:29:34.960
-the
-
-00:29:34.960 --> 00:29:38.480
-presentation
-
-00:29:38.480 --> 00:29:40.640
-so this is part two of the presentation
-
-00:29:40.640 --> 00:29:41.760
-and the main theme
-
-00:29:41.760 --> 00:29:44.320
-here is the standard describe key
-
-00:29:44.320 --> 00:29:46.320
-function that comes with the max
-
-00:29:46.320 --> 00:29:49.200
-and my variant of it the thing is that
-
-00:29:49.200 --> 00:29:50.960
-the standard described key in max
-
-00:29:50.960 --> 00:29:53.120
-is user friendly but it is hacker
-
-00:29:53.120 --> 00:29:55.600
-unfriendly well I felt so
-
-00:29:55.600 --> 00:29:58.559
-and when I tried to complement it by by
-
-00:29:58.559 --> 00:30:00.799
-writing a hacker friendly version of it
-
-00:30:00.799 --> 00:30:03.120
-that produced the sex hyperlinks that I
-
-00:30:03.120 --> 00:30:03.919
-needed
-
-00:30:03.919 --> 00:30:05.440
-I got something that I found really
-
-00:30:05.440 --> 00:30:07.039
-lovely and
-
-00:30:07.039 --> 00:30:09.679
-several of the main designs design
-
-00:30:09.679 --> 00:30:12.480
-decisions of eev can be seen there
-
-00:30:12.480 --> 00:30:14.320
-but when I showed my variants to other
-
-00:30:14.320 --> 00:30:15.520
-people they hated it
-
-00:30:15.520 --> 00:30:17.760
-they felt that it was totally against
-
-00:30:17.760 --> 00:30:19.360
-their notions of
-
-00:30:19.360 --> 00:30:23.440
-user friendliness
-
-00:30:23.440 --> 00:30:25.760
-okay so let's see the standard describe
-
-00:30:25.760 --> 00:30:26.799
-key if I run
-
-00:30:26.799 --> 00:30:30.159
-this hyperlink here I get
-
-00:30:30.159 --> 00:30:32.399
-this the result of running the scribe
-
-00:30:32.399 --> 00:30:34.399
-key on the key down
-
-00:30:34.399 --> 00:30:36.399
-and this is a big buffer with some
-
-00:30:36.399 --> 00:30:38.080
-things in italics
-
-00:30:38.080 --> 00:30:41.360
-and some hyperlinks here these
-
-00:30:41.360 --> 00:30:43.120
-hyperlinks are standard in the sense
-
-00:30:43.120 --> 00:30:43.679
-that
-
-00:30:43.679 --> 00:30:46.240
-the targets are not visible and they are
-
-00:30:46.240 --> 00:30:47.760
-implemented using
-
-00:30:47.760 --> 00:30:50.799
-buttons in a max lisp this section of
-
-00:30:50.799 --> 00:30:51.200
-the
-
-00:30:51.200 --> 00:30:53.919
-mx list manual describes how buttons
-
-00:30:53.919 --> 00:30:56.799
-work
-
-00:30:56.799 --> 00:31:00.640
-and the the source code is
-
-00:31:00.640 --> 00:31:03.440
-quite difficult I mean when I was
-
-00:31:03.440 --> 00:31:04.240
-starting to
-
-00:31:04.240 --> 00:31:06.559
-to try to decipher this when I was a
-
-00:31:06.559 --> 00:31:07.600
-beginner
-
-00:31:07.600 --> 00:31:11.200
-using max 19.34 I felt that this
-
-00:31:11.200 --> 00:31:12.320
-described key was
-
-00:31:12.320 --> 00:31:15.519
-very difficult to understand uh
-
-00:31:15.519 --> 00:31:20.080
-and I felt that the the designers the
-
-00:31:20.080 --> 00:31:22.640
-the people who wrote it were sacrificing
-
-00:31:22.640 --> 00:31:23.679
-too much of the
-
-00:31:23.679 --> 00:31:26.159
-hacker friendliness that I was expecting
-
-00:31:26.159 --> 00:31:31.279
-from it to make it beginner friendly
-
-00:31:31.279 --> 00:31:33.600
-let me explain what are the the problems
-
-00:31:33.600 --> 00:31:34.799
-with the standard
-
-00:31:34.799 --> 00:31:36.559
-the describe key if we think that
-
-00:31:36.559 --> 00:31:38.640
-hyperlinks are things like this
-
-00:31:38.640 --> 00:31:41.600
-with the target and the text then in the
-
-00:31:41.600 --> 00:31:43.600
-button hyperlinks of describe key
-
-00:31:43.600 --> 00:31:47.120
-this three bad things happen first
-
-00:31:47.120 --> 00:31:49.120
-it is hard to extract the target from
-
-00:31:49.120 --> 00:31:51.200
-the hyperlink second it is hard to
-
-00:31:51.200 --> 00:31:52.000
-recreate
-
-00:31:52.000 --> 00:31:54.480
-a list of code that would go to that
-
-00:31:54.480 --> 00:31:55.440
-target
-
-00:31:55.440 --> 00:31:57.519
-and third it is hard to copy the full
-
-00:31:57.519 --> 00:31:59.840
-hyperlink including the targets to other
-
-00:31:59.840 --> 00:32:00.640
-buffers
-
-00:32:00.640 --> 00:32:04.960
-I only knew how to copy the text
-
-00:32:04.960 --> 00:32:07.279
-when I was trying to decipher what
-
-00:32:07.279 --> 00:32:09.039
-described key was doing
-
-00:32:09.039 --> 00:32:11.679
-I created lots of hyperlinks like this
-
-00:32:11.679 --> 00:32:12.159
-to
-
-00:32:12.159 --> 00:32:14.960
-inspect the text properties and things
-
-00:32:14.960 --> 00:32:16.159
-like that
-
-00:32:16.159 --> 00:32:18.480
-for example in the description of the
-
-00:32:18.480 --> 00:32:20.000
-key down
-
-00:32:20.000 --> 00:32:23.600
-here we have a button that points to
-
-00:32:23.600 --> 00:32:26.799
-simple dotel
-
-00:32:26.799 --> 00:32:29.679
-the text of that button is simple.l this
-
-00:32:29.679 --> 00:32:31.600
-hyperlinks goes to the
-
-00:32:31.600 --> 00:32:34.320
-to the middle of this button hyperlink
-
-00:32:34.320 --> 00:32:35.519
-here
-
-00:32:35.519 --> 00:32:39.120
-uh this hyperlink here
-
-00:32:39.120 --> 00:32:41.919
-goes to the middle of the button of this
-
-00:32:41.919 --> 00:32:43.279
-button hyperlink
-
-00:32:43.279 --> 00:32:46.240
-and then inspects its text properties
-
-00:32:46.240 --> 00:32:47.679
-and then goes to
-
-00:32:47.679 --> 00:32:51.679
-this section here of the description
-
-00:32:51.679 --> 00:32:53.679
-so this is a high level description of
-
-00:32:53.679 --> 00:32:56.159
-the text properties
-
-00:32:56.159 --> 00:32:58.000
-I mean the text properties that make it
-
-00:32:58.000 --> 00:33:00.000
-a button and this is a
-
-00:33:00.000 --> 00:33:02.480
-lower level description of the these
-
-00:33:02.480 --> 00:33:04.320
-text properties
-
-00:33:04.320 --> 00:33:08.000
-and the button that points to
-
-00:33:08.000 --> 00:33:11.440
-forward line sorry the the button that
-
-00:33:11.440 --> 00:33:11.919
-whose
-
-00:33:11.919 --> 00:33:14.399
-text is forward line this one is
-
-00:33:14.399 --> 00:33:16.480
-slightly different
-
-00:33:16.480 --> 00:33:19.039
-this hyperlink here goes to the middle
-
-00:33:19.039 --> 00:33:21.200
-of that button
-
-00:33:21.200 --> 00:33:24.559
-and this hyperlink goes to the mid to
-
-00:33:24.559 --> 00:33:25.760
-the middle of that button
-
-00:33:25.760 --> 00:33:28.559
-inspects its text properties and go to
-
-00:33:28.559 --> 00:33:29.360
-the section
-
-00:33:29.360 --> 00:33:32.559
-of this button of this help
-
-00:33:32.559 --> 00:33:35.760
-uh buffer here that describe the the
-
-00:33:35.760 --> 00:33:36.399
-button
-
-00:33:36.399 --> 00:33:39.120
-and the lower level view of the text
-
-00:33:39.120 --> 00:33:41.679
-properties
-
-00:33:41.679 --> 00:33:45.519
-so I started to with things like this
-
-00:33:45.519 --> 00:33:47.519
-to understand what these buttons were
-
-00:33:47.519 --> 00:33:50.159
-doing and I was able to figure out how
-
-00:33:50.159 --> 00:33:50.960
-these things are
-
-00:33:50.960 --> 00:33:53.120
-implemented and describe key and then
-
-00:33:53.120 --> 00:33:55.519
-similar help functions in max
-
-00:33:55.519 --> 00:33:57.760
-and I discovered that one of the main
-
-00:33:57.760 --> 00:34:00.000
-lower level functions that a max used
-
-00:34:00.000 --> 00:34:01.360
-for this
-
-00:34:01.360 --> 00:34:04.080
-is a function called find function no
-
-00:34:04.080 --> 00:34:05.279
-select
-
-00:34:05.279 --> 00:34:08.240
-if I run find function no select on next
-
-00:34:08.240 --> 00:34:09.929
-line
-
-00:34:09.929 --> 00:34:11.200
-[Music]
-
-00:34:11.200 --> 00:34:14.240
-it returns a pair
-
-00:34:14.240 --> 00:34:18.079
-a cons made of a buffer and a position
-
-00:34:18.079 --> 00:34:20.560
-so I created functions that would that
-
-00:34:20.560 --> 00:34:21.679
-would
-
-00:34:21.679 --> 00:34:24.320
-uh follow this that would open that
-
-00:34:24.320 --> 00:34:25.119
-buffer
-
-00:34:25.119 --> 00:34:28.320
-in that position and then this is a
-
-00:34:28.320 --> 00:34:29.679
-postback list
-
-00:34:29.679 --> 00:34:31.679
-so we could go to these positions and
-
-00:34:31.679 --> 00:34:33.919
-then search for this string and another
-
-00:34:33.919 --> 00:34:36.000
-string and another string and so on
-
-00:34:36.000 --> 00:34:40.320
-so this goes to the definition of find a
-
-00:34:40.320 --> 00:34:41.040
-function
-
-00:34:41.040 --> 00:34:44.159
-and then to a to a string
-
-00:34:44.159 --> 00:34:47.919
-after it and I use these things to
-
-00:34:47.919 --> 00:34:49.040
-implement my own
-
-00:34:49.040 --> 00:34:51.839
-functions that pointed to the same the
-
-00:34:51.839 --> 00:34:52.960
-same targets
-
-00:34:52.960 --> 00:34:55.440
-as the button hyperlinks and describe
-
-00:34:55.440 --> 00:35:00.240
-key
-
-00:35:00.240 --> 00:35:03.200
-again let me show the comparison this is
-
-00:35:03.200 --> 00:35:05.599
-the standard describe key
-
-00:35:05.599 --> 00:35:10.480
-here and this is my variant
-
-00:35:10.480 --> 00:35:13.839
-uh it creates a buffer with links
-
-00:35:13.839 --> 00:35:17.680
-with the list hyperlinks about this key
-
-00:35:17.680 --> 00:35:20.960
-we get this so each one of these
-
-00:35:20.960 --> 00:35:22.960
-functions is either a blank line
-
-00:35:22.960 --> 00:35:28.720
-or a or an ellipse hyperlink
-
-00:35:28.720 --> 00:35:31.760
-here is a slight variant of the of the
-
-00:35:31.760 --> 00:35:32.880
-function
-
-00:35:32.880 --> 00:35:35.920
-find e key links above in this variant
-
-00:35:35.920 --> 00:35:38.079
-the argument is a string that has to be
-
-00:35:38.079 --> 00:35:39.280
-processed by
-
-00:35:39.280 --> 00:35:42.400
-read cbd macro to convert it to the
-
-00:35:42.400 --> 00:35:45.280
-lower level format
-
-00:35:45.280 --> 00:35:48.160
-and note that these functions here that
-
-00:35:48.160 --> 00:35:49.040
-I wrote
-
-00:35:49.040 --> 00:35:51.440
-they display temporary buffers with no
-
-00:35:51.440 --> 00:35:53.599
-help at all
-
-00:35:53.599 --> 00:35:57.359
-uh to be honest there's a link to a
-
-00:35:57.359 --> 00:35:58.560
-tutorial here but
-
-00:35:58.560 --> 00:36:01.680
-this is a recent edition so let's ignore
-
-00:36:01.680 --> 00:36:03.200
-this
-
-00:36:03.200 --> 00:36:06.640
-uh they they display temporary buffers
-
-00:36:06.640 --> 00:36:08.320
-with no help at all just lots of
-
-00:36:08.320 --> 00:36:09.520
-hyperlinks
-
-00:36:09.520 --> 00:36:11.599
-and these hyperlinks can be they are
-
-00:36:11.599 --> 00:36:13.359
-very hacker friendly in the sense that
-
-00:36:13.359 --> 00:36:15.040
-they can be followed with
-
-00:36:15.040 --> 00:36:17.520
-metae they can be copied to other
-
-00:36:17.520 --> 00:36:19.920
-buffers because they are plain text
-
-00:36:19.920 --> 00:36:23.680
-because they are just sex
-
-00:36:23.680 --> 00:36:26.240
-and they can be inspected in the sense
-
-00:36:26.240 --> 00:36:28.000
-that
-
-00:36:28.000 --> 00:36:32.400
-for example here
-
-00:36:32.400 --> 00:36:34.079
-we have a hyperlink to a function that
-
-00:36:34.079 --> 00:36:35.520
-we
-
-00:36:35.520 --> 00:36:37.599
-it may be difficult to figure out what
-
-00:36:37.599 --> 00:36:39.200
-this function does
-
-00:36:39.200 --> 00:36:42.320
-but we can go to that position and then
-
-00:36:42.320 --> 00:36:45.839
-type ctrl h f to see the descript
-
-00:36:45.839 --> 00:36:48.240
-description of this function
-
-00:36:48.240 --> 00:36:52.400
-and here is a hyperlink to
-
-00:36:52.400 --> 00:36:53.890
-the does that
-
-00:36:53.890 --> 00:36:56.000
-[Music]
-
-00:36:56.000 --> 00:37:00.160
-in my syntax say
-
-00:37:00.160 --> 00:37:02.800
-and this list of hyperlinks were
-
-00:37:02.800 --> 00:37:04.480
-generated by
-
-00:37:04.480 --> 00:37:08.000
-this code here that just just uh
-
-00:37:08.000 --> 00:37:11.119
-used a back quote to to generate
-
-00:37:11.119 --> 00:37:14.640
-lists of sex
-
-00:37:14.640 --> 00:37:18.240
-and I I felt that this function here
-
-00:37:18.240 --> 00:37:21.040
-uh that just generated this list was
-
-00:37:21.040 --> 00:37:22.160
-very easy to understand
-
-00:37:22.160 --> 00:37:24.960
-and to modify so this was hacker
-
-00:37:24.960 --> 00:37:28.480
-friendly in the way that I wanted
-
-00:37:28.480 --> 00:37:31.599
-and so I started using this
-
-00:37:31.599 --> 00:37:34.079
-and this idea of using buffers with sex
-
-00:37:34.079 --> 00:37:36.800
-fiber links and no help violated
-
-00:37:36.800 --> 00:37:38.720
-all the notions of user friendliness
-
-00:37:38.720 --> 00:37:40.079
-that I knew so I was
-
-00:37:40.079 --> 00:37:42.000
-exploring some something new at that
-
-00:37:42.000 --> 00:37:46.160
-time and this is the end of part two
-
-00:37:46.160 --> 00:37:49.359
-part three of this presentation is uh
-
-00:37:49.359 --> 00:37:52.240
-about the killer features of ev or why
-
-00:37:52.240 --> 00:37:54.800
-everybody should use av or at least have
-
-00:37:54.800 --> 00:37:57.920
-eev installed even if they think the tv
-
-00:37:57.920 --> 00:37:59.280
-is too weird
-
-00:37:59.280 --> 00:38:01.440
-so this is a very quick listing eevee
-
-00:38:01.440 --> 00:38:03.440
-has lease hyperlinks which are super
-
-00:38:03.440 --> 00:38:04.240
-nice
-
-00:38:04.240 --> 00:38:06.560
-it comes with lots of tutorials the main
-
-00:38:06.560 --> 00:38:07.599
-one here
-
-00:38:07.599 --> 00:38:10.800
-explains all the main features
-
-00:38:10.800 --> 00:38:14.079
-uh there's also a tutorial with that's
-
-00:38:14.079 --> 00:38:15.040
-an index of
-
-00:38:15.040 --> 00:38:18.079
-all the other tutorials here
-
-00:38:18.079 --> 00:38:21.680
-many many many tutorials uh if we forget
-
-00:38:21.680 --> 00:38:24.079
-everything we can just type meta j
-
-00:38:24.079 --> 00:38:27.280
-and remember that this this part here is
-
-00:38:27.280 --> 00:38:28.880
-beginner friendly and the rest is
-
-00:38:28.880 --> 00:38:30.839
-beginner
-
-00:38:30.839 --> 00:38:32.960
-unfriendly
-
-00:38:32.960 --> 00:38:38.320
-there's a tutorial on max list here
-
-00:38:38.320 --> 00:38:41.920
-it mainly explains how to understand
-
-00:38:41.920 --> 00:38:44.640
-a lisp code which is much easier than
-
-00:38:44.640 --> 00:38:46.320
-it's much easier to understand the lisp
-
-00:38:46.320 --> 00:38:47.040
-code and
-
-00:38:47.040 --> 00:38:48.800
-then to understand how to program in a
-
-00:38:48.800 --> 00:38:50.160
-lisp and
-
-00:38:50.160 --> 00:38:53.440
-most people are only going to need this
-
-00:38:53.440 --> 00:38:55.920
-uh ev is very easy to install it's in
-
-00:38:55.920 --> 00:38:58.240
-helper so we just need to do
-
-00:38:58.240 --> 00:39:00.560
-this thing here and it's very
-
-00:39:00.560 --> 00:39:03.520
-non-invasive
-
-00:39:03.520 --> 00:39:06.079
-uh years ago several years ago it was a
-
-00:39:06.079 --> 00:39:08.000
-very invasive package but then I changed
-
-00:39:08.000 --> 00:39:08.960
-everything
-
-00:39:08.960 --> 00:39:13.520
-now uh if we toggle ev mode on and off
-
-00:39:13.520 --> 00:39:16.640
-what's going to happen is just that the
-
-00:39:16.640 --> 00:39:20.000
-evk map key map becomes activated or
-
-00:39:20.000 --> 00:39:21.599
-deactivated
-
-00:39:21.599 --> 00:39:24.720
-and when we install the evita
-
-00:39:24.720 --> 00:39:28.320
-I mean when we require the only things
-
-00:39:28.320 --> 00:39:28.640
-that
-
-00:39:28.640 --> 00:39:32.640
-happens globally distance here
-
-00:39:32.640 --> 00:39:34.480
-several functions and variables become
-
-00:39:34.480 --> 00:39:36.240
-defined all of them have
-
-00:39:36.240 --> 00:39:40.079
-standard prefixes except for one
-
-00:39:40.079 --> 00:39:43.040
-three characters are changed in the
-
-00:39:43.040 --> 00:39:44.480
-standard display table
-
-00:39:44.480 --> 00:39:48.640
-to make them appear as colored glyphs
-
-00:39:48.640 --> 00:39:52.079
-the red star and two and the open
-
-00:39:52.079 --> 00:39:54.160
-double angle brackets and the closed
-
-00:39:54.160 --> 00:39:58.160
-double angle brackets
-
-00:39:58.160 --> 00:40:01.359
-and two environment variables are set
-
-00:40:01.359 --> 00:40:04.560
-and this is a trivial technicality
-
-00:40:04.560 --> 00:40:07.599
-we just run a def advice
-
-00:40:07.599 --> 00:40:10.160
-around one function that that is used by
-
-00:40:10.160 --> 00:40:10.800
-man
-
-00:40:10.800 --> 00:40:14.240
-justice also
-
-00:40:14.240 --> 00:40:16.720
-eevee has a very high discoverability
-
-00:40:16.720 --> 00:40:18.400
-factor
-
-00:40:18.400 --> 00:40:21.839
-and there's a way to create a very easy
-
-00:40:21.839 --> 00:40:25.200
-way to create a hyperlink to here
-
-00:40:25.200 --> 00:40:27.760
-uh I do not have time to show this now
-
-00:40:27.760 --> 00:40:29.760
-but for example if I'm
-
-00:40:29.760 --> 00:40:32.960
-here in a tutorial and I think that that
-
-00:40:32.960 --> 00:40:34.480
-this
-
-00:40:34.480 --> 00:40:36.240
-section is something interesting and I
-
-00:40:36.240 --> 00:40:39.520
-want to create a hyperlink to it
-
-00:40:39.520 --> 00:40:41.200
-I just have to type a certain key
-
-00:40:41.200 --> 00:40:43.040
-sequence here
-
-00:40:43.040 --> 00:40:46.800
-and here I got a hyperlink that I can
-
-00:40:46.800 --> 00:40:50.400
-copy to my notes and this hyperlink goes
-
-00:40:50.400 --> 00:40:52.260
-to that section
-
-00:40:52.260 --> 00:40:58.240
-[Music]
-
-00:40:58.240 --> 00:41:00.720
-we have hyperlinks that point to
-
-00:41:00.720 --> 00:41:02.319
-specific positions in
-
-00:41:02.319 --> 00:41:05.839
-pdf documents and nvidia files here
-
-00:41:05.839 --> 00:41:09.119
-this one opens a pdf and displays it
-
-00:41:09.119 --> 00:41:09.680
-this one
-
-00:41:09.680 --> 00:41:13.920
-opens a pdf and converts it to text
-
-00:41:13.920 --> 00:41:16.720
-and this one opens the video in a
-
-00:41:16.720 --> 00:41:18.400
-certain position
-
-00:41:18.400 --> 00:41:20.480
-and we also have a way to control
-
-00:41:20.480 --> 00:41:22.079
-shell-like programs
-
-00:41:22.079 --> 00:41:25.280
-uh in my presentation of the last year I
-
-00:41:25.280 --> 00:41:27.440
-spent one third of the presentation
-
-00:41:27.440 --> 00:41:29.520
-explaining this and I think that I gave
-
-00:41:29.520 --> 00:41:31.839
-a very good demonstration there
-
-00:41:31.839 --> 00:41:35.680
-the demonstration is here
-
-00:41:35.680 --> 00:41:38.800
-we can go to the web page and go to
-
-00:41:38.800 --> 00:41:41.839
-this section of the web page
-
-00:41:41.839 --> 00:41:47.680
-and start by this point
-
-00:41:47.680 --> 00:41:51.440
-and here we have an explanation and so
-
-00:41:51.440 --> 00:41:55.920
-on whatever
-
-00:41:55.920 --> 00:41:58.720
-and I've already mentioned this before
-
-00:41:58.720 --> 00:41:59.200
-uh
-
-00:41:59.200 --> 00:42:01.119
-eevee comes with a very nice elise
-
-00:42:01.119 --> 00:42:02.240
-tutorial
-
-00:42:02.240 --> 00:42:04.240
-so that's it this is the end of part
-
-00:42:04.240 --> 00:42:05.599
-three
-
-00:42:05.599 --> 00:42:07.359
-so this is the last part of my
-
-00:42:07.359 --> 00:42:09.839
-presentation and it's about the title of
-
-00:42:09.839 --> 00:42:10.160
-the
-
-00:42:10.160 --> 00:42:11.839
-the presentation I called the
-
-00:42:11.839 --> 00:42:13.599
-presentation why
-
-00:42:13.599 --> 00:42:16.560
-most of the best features in eevee look
-
-00:42:16.560 --> 00:42:16.960
-like
-
-00:42:16.960 --> 00:42:20.480
-like five minute hacks uh I've already
-
-00:42:20.480 --> 00:42:20.960
-run off
-
-00:42:20.960 --> 00:42:23.920
-out of time so I have to to skip this
-
-00:42:23.920 --> 00:42:24.800
-first
-
-00:42:24.800 --> 00:42:28.720
-part here in which I describe how I
-
-00:42:28.720 --> 00:42:31.280
-was exposed to several different notions
-
-00:42:31.280 --> 00:42:33.440
-of user friendliness
-
-00:42:33.440 --> 00:42:35.920
-and how the one that really blew my mind
-
-00:42:35.920 --> 00:42:37.119
-was the one in
-
-00:42:37.119 --> 00:42:41.680
-in a certain uh fought environment
-
-00:42:41.680 --> 00:42:44.160
-uh and let me make the long long story
-
-00:42:44.160 --> 00:42:46.560
-very very short
-
-00:42:46.560 --> 00:42:49.280
-uh in all this process I switched from
-
-00:42:49.280 --> 00:42:49.680
-from
-
-00:42:49.680 --> 00:42:52.079
-the belief that the user was always
-
-00:42:52.079 --> 00:42:52.960
-someone else
-
-00:42:52.960 --> 00:42:55.359
-someone external and that that I always
-
-00:42:55.359 --> 00:42:57.040
-had to write my programs for
-
-00:42:57.040 --> 00:43:00.079
-this external user I switched
-
-00:43:00.079 --> 00:43:02.240
-from from that to the belief that I am
-
-00:43:02.240 --> 00:43:03.200
-the user
-
-00:43:03.200 --> 00:43:05.839
-and I can play with the interface that I
-
-00:43:05.839 --> 00:43:07.040
-want I can
-
-00:43:07.040 --> 00:43:10.079
-write programs which that
-
-00:43:10.079 --> 00:43:12.079
-that only I am going to understand I can
-
-00:43:12.079 --> 00:43:14.240
-experiment with hundreds of interfaces
-
-00:43:14.240 --> 00:43:16.079
-and then select the best ones
-
-00:43:16.079 --> 00:43:18.720
-and document them and then share them
-
-00:43:18.720 --> 00:43:20.960
-with other people
-
-00:43:20.960 --> 00:43:23.520
-who are also experimenting with
-
-00:43:23.520 --> 00:43:24.720
-interfaces in their
-
-00:43:24.720 --> 00:43:28.880
-own ways and so eevee has
-
-00:43:28.880 --> 00:43:31.119
-lots of things that are user-friendly in
-
-00:43:31.119 --> 00:43:33.440
-these unusual ways that I've explained
-
-00:43:33.440 --> 00:43:34.880
-before
-
-00:43:34.880 --> 00:43:37.760
-and uh and if we disconsider that this
-
-00:43:37.760 --> 00:43:40.319
-notion of user friendliness is valid
-
-00:43:40.319 --> 00:43:44.079
-then this implement these things that av
-
-00:43:44.079 --> 00:43:45.119
-implement they are
-
-00:43:45.119 --> 00:43:47.280
-user friendly and hacker friendly at the
-
-00:43:47.280 --> 00:43:48.800
-same time
-
-00:43:48.800 --> 00:43:51.119
-and let me show one example this is one
-
-00:43:51.119 --> 00:43:51.920
-this is
-
-00:43:51.920 --> 00:43:54.640
-one that really took me one only five
-
-00:43:54.640 --> 00:43:56.640
-minutes to implement
-
-00:43:56.640 --> 00:43:59.599
-uh at one point a few months ago I
-
-00:43:59.599 --> 00:44:00.640
-discovered
-
-00:44:00.640 --> 00:44:04.240
-that sasha chewer's weekly posts about
-
-00:44:04.240 --> 00:44:05.599
-the max news
-
-00:44:05.599 --> 00:44:08.800
-had uh were also being posted to a
-
-00:44:08.800 --> 00:44:11.440
-mailing list that is stored at
-
-00:44:11.440 --> 00:44:14.800
-lists.we know.org and it's called max
-
-00:44:14.800 --> 00:44:16.319
-dungeons
-
-00:44:16.319 --> 00:44:19.280
-uh and I just and I found a way to
-
-00:44:19.280 --> 00:44:19.760
-create
-
-00:44:19.760 --> 00:44:25.440
-the links to to the posts in both places
-
-00:44:25.440 --> 00:44:28.400
-but I had to use a template for that so
-
-00:44:28.400 --> 00:44:30.640
-what we are seeing here now
-
-00:44:30.640 --> 00:44:32.560
-is a template with the the default
-
-00:44:32.560 --> 00:44:36.640
-values so this means that we have not uh
-
-00:44:36.640 --> 00:44:39.359
-set the year correctly we have not set
-
-00:44:39.359 --> 00:44:40.720
-the month correctly
-
-00:44:40.720 --> 00:44:44.240
-or the day correctly but if we run this
-
-00:44:44.240 --> 00:44:44.720
-text
-
-00:44:44.720 --> 00:44:48.960
-here uh let me do something else before
-
-00:44:48.960 --> 00:44:53.359
-if we run this text here
-
-00:44:53.359 --> 00:44:57.280
-which we change some of these
-
-00:44:57.280 --> 00:45:00.880
-entries in the
-
-00:45:00.880 --> 00:45:04.400
-in the template and we get these links
-
-00:45:04.400 --> 00:45:05.200
-here
-
-00:45:05.200 --> 00:45:09.119
-they all work for example this one opens
-
-00:45:09.119 --> 00:45:12.160
-uh the blog post in in session sasha
-
-00:45:12.160 --> 00:45:12.800
-chewers
-
-00:45:12.800 --> 00:45:16.000
-site and this one
-
-00:45:16.000 --> 00:45:21.280
-opens it in the mailing list
-
-00:45:21.280 --> 00:45:23.440
-and sometimes I want the org source of
-
-00:45:23.440 --> 00:45:25.760
-that and the easiest way to get the word
-
-00:45:25.760 --> 00:45:27.280
-source is to
-
-00:45:27.280 --> 00:45:30.480
-look at this link here that has an
-
-00:45:30.480 --> 00:45:31.680
-attachment
-
-00:45:31.680 --> 00:45:35.040
-and if I take this
-
-00:45:35.040 --> 00:45:38.560
-link here and I take this
-
-00:45:38.560 --> 00:45:42.319
-stem that points to to the attachment
-
-00:45:42.319 --> 00:45:44.480
-and I put it here and I generate this
-
-00:45:44.480 --> 00:45:45.440
-page again
-
-00:45:45.440 --> 00:45:49.119
-with all this data then I get a script
-
-00:45:49.119 --> 00:45:50.000
-here
-
-00:45:50.000 --> 00:45:53.359
-that downloads let me switch to a
-
-00:45:53.359 --> 00:45:54.640
-smaller font
-
-00:45:54.640 --> 00:45:58.160
-it downloads this attachment
-
-00:45:58.160 --> 00:46:00.960
-and it renames that attachment to
-
-00:46:00.960 --> 00:46:01.599
-something
-
-00:46:01.599 --> 00:46:06.000
-dot slash nx news sorry some things
-
-00:46:06.000 --> 00:46:10.720
-uh iphone mx news hyphen
-
-00:46:10.720 --> 00:46:15.119
-something mxnews.org here
-
-00:46:15.119 --> 00:46:17.599
-the file is already here already with
-
-00:46:17.599 --> 00:46:18.400
-the right name
-
-00:46:18.400 --> 00:46:21.359
-so I can open it with just this
-
-00:46:21.359 --> 00:46:22.079
-hyperlink
-
-00:46:22.079 --> 00:46:23.780
-let me go to the big font again
-
-00:46:23.780 --> 00:46:25.200
-[Music]
-
-00:46:25.200 --> 00:46:28.079
-and now I have the work source for that
-
-00:46:28.079 --> 00:46:29.280
-hyperlink
-
-00:46:29.280 --> 00:46:33.839
-sorry for that blog post
-
-00:46:33.839 --> 00:46:37.040
-and so this one line thing
-
-00:46:37.040 --> 00:46:40.960
-here is in a sense
-
-00:46:40.960 --> 00:46:43.920
-a a to to this blog post in all its
-
-00:46:43.920 --> 00:46:45.119
-formats
-
-00:46:45.119 --> 00:46:48.640
-uh if I execute this I get links to
-
-00:46:48.640 --> 00:46:52.000
-to all the places where it is posted
-
-00:46:52.000 --> 00:46:54.400
-and I get a hype and I get a script to
-
-00:46:54.400 --> 00:46:56.000
-download the local copy
-
-00:46:56.000 --> 00:47:00.480
-of the org source of it and that's it
-
-00:47:00.480 --> 00:47:03.200
-well I'm already out of time so let me
-
-00:47:03.200 --> 00:47:04.480
-finish here
-
-00:47:04.480 --> 00:47:10.079
-thanks bye
diff --git a/2020/subtitles/emacsconf-2020--21-on-why-most-of-the-best-features-in-eev-look-like-5-minute-hacks--eduardo-ochs.vtt b/2020/subtitles/emacsconf-2020--21-on-why-most-of-the-best-features-in-eev-look-like-5-minute-hacks--eduardo-ochs.vtt
new file mode 100644
index 00000000..530b95c8
--- /dev/null
+++ b/2020/subtitles/emacsconf-2020--21-on-why-most-of-the-best-features-in-eev-look-like-5-minute-hacks--eduardo-ochs.vtt
@@ -0,0 +1,2848 @@
+WEBVTT
+
+00:00:00.080 --> 00:00:01.708
+Hi, my name is Eduardo Ochs.
+
+00:00:01.708 --> 00:00:03.439
+I'm this person here,
+
+00:00:03.439 --> 00:00:06.240
+and the title of this talk is on "Why
+
+00:00:07.120 --> 00:00:09.519
+Most of the Best Features in eev Look
+
+00:00:09.519 --> 00:00:11.599
+Like Five Minute Hacks."
+
+00:00:11.599 --> 00:00:15.280
+This is a presentation at the
+EmacsConf 2020
+
+00:00:15.280 --> 00:00:23.199
+happening on November 28 and 29, 2020.
+
+00:00:23.199 --> 00:00:25.519
+So this is part one of the presentation.
+
+00:00:25.519 --> 00:00:27.680
+Here I'm going to explain
+
+00:00:27.680 --> 00:00:29.840
+some ideas that are prerequisites for
+
+00:00:29.840 --> 00:00:32.320
+understanding the rest of the
+presentation.
+
+00:00:32.320 --> 00:00:35.440
+The three main keys of eev are
+
+00:00:35.440 --> 00:00:37.920
+M-e, M-k, and M-j.
+I'm going to start by
+
+00:00:37.920 --> 00:00:42.079
+explaining M-e and M-k.
+
+00:00:42.079 --> 00:00:44.960
+M-e is used to follow hyperlinks.
+
+00:00:44.960 --> 00:00:47.592
+Technically, it is essentially
+
+00:00:47.592 --> 00:00:49.345
+just a C-e to move to
+
+00:00:49.345 --> 00:00:50.402
+the end of the line,
+
+00:00:50.402 --> 00:00:53.918
+and then a C-x C-e to
+execute this,
+
+00:00:53.918 --> 00:00:58.960
+the sexp before point at
+the end of the line.
+
+00:00:58.960 --> 00:01:00.879
+And the thing is that Emacs comes with
+
+00:01:00.879 --> 00:01:02.479
+many functions that can be
+
+00:01:02.479 --> 00:01:05.040
+used as sexp hyperlinks.
+
+00:01:05.040 --> 00:01:07.540
+We can consider that they point to
+somewhere.
+
+00:01:07.540 --> 00:01:09.040
+I'm going to refer to that as
+
+00:01:09.040 --> 00:01:11.411
+the target of the hyperlink.
+
+00:01:11.411 --> 00:01:12.960
+If we execute this
+
+00:01:12.960 --> 00:01:15.759
+sexp hyperlinks, we coul go to that target.
+
+00:01:15.759 --> 00:01:17.119
+For example, this one
+
+00:01:17.119 --> 00:01:20.000
+is a hyperlink that points to a buffer
+
+00:01:20.000 --> 00:01:22.720
+with the manpage for cat.
+
+00:01:22.720 --> 00:01:25.040
+And usually, but not always, after
+
+00:01:25.040 --> 00:01:27.040
+following the hyperlink, we can go back
+
+00:01:27.040 --> 00:01:29.840
+by just killing the current buffer
+
+00:01:29.840 --> 00:01:31.537
+that the hyperlink created:
+
+00:01:31.537 --> 00:01:34.400
+the target of the hyperlink.
+
+00:01:34.400 --> 00:01:38.000
+But this example here is badly behaved.
+
+00:01:38.000 --> 00:01:41.360
+If we execute it, it creates a new frame,
+
+00:01:41.360 --> 00:01:43.360
+and to go back to the previous situation,
+
+00:01:43.360 --> 00:01:52.840
+we have to either click here
+or type C-x 5 0.
+
+00:01:54.880 --> 00:01:57.120
+So here are some examples of
+
+00:01:57.120 --> 00:01:58.726
+sexp hyperlinks using
+
+00:01:58.726 --> 00:02:00.640
+standard Emacs functions.
+
+00:02:00.640 --> 00:02:03.188
+This third one is badly behaved
+
+00:02:03.188 --> 00:02:04.880
+in a different way.
+
+00:02:04.880 --> 00:02:08.554
+If executed, the target is created
+
+00:02:08.554 --> 00:02:11.006
+in the same window as we are now,
+
+00:02:11.006 --> 00:02:14.312
+but it also shows a lot of
+garbage
+
+00:02:14.312 --> 00:02:15.797
+here in the echo area,
+
+00:02:15.797 --> 00:02:23.280
+so the current frame becomes
+a bit messy.
+
+00:02:23.280 --> 00:02:25.728
+And well, one of the first things
+
+00:02:25.728 --> 00:02:28.319
+that I did when I was creating eev
+
+00:02:28.319 --> 00:02:30.720
+many many years ago was that I created
+
+00:02:30.720 --> 00:02:33.380
+variants of all these functions
+
+00:02:33.380 --> 00:02:36.640
+that were better behaved.
+
+00:02:36.640 --> 00:02:39.200
+They were better behaved in two
+senses.
+
+00:02:39.200 --> 00:02:40.839
+The obvious one was that
+
+00:02:40.839 --> 00:02:43.680
+they all created the target
+
+00:02:43.680 --> 00:02:45.246
+in the same window as before,
+
+00:02:45.246 --> 00:02:48.720
+so I could go back by just typing M-k
+
+00:02:48.720 --> 00:02:52.879
+which has essentially just killed this
+buffer.
+
+00:02:52.879 --> 00:02:56.480
+I also implemented something extra that
+
+00:02:56.480 --> 00:02:59.040
+are the postback lists.
+
+00:02:59.040 --> 00:03:03.599
+For example, these extra arguments here
+are a postback list.
+
+00:03:03.599 --> 00:03:06.080
+These extra arguments specify
+
+00:03:06.080 --> 00:03:09.599
+position and the target buffer.
+
+00:03:09.599 --> 00:03:14.337
+In this example,
+this postback list means:
+
+00:03:14.337 --> 00:03:18.239
+starting from the beginning of
+the buffer,
+
+00:03:18.239 --> 00:03:22.757
+search for the first occurrence
+of this string after that,
+
+00:03:22.757 --> 00:03:24.754
+after the beginning
+of the buffer,
+
+00:03:24.754 --> 00:03:27.662
+and then search for
+the first occurrence
+
+00:03:27.662 --> 00:03:33.760
+of this string after that.
+
+00:03:33.760 --> 00:03:36.070
+eev also defines some hyperlinks
+
+00:03:36.070 --> 00:03:38.799
+that do not create new buffers.
+
+00:03:38.799 --> 00:03:40.879
+Here is the first example.
+
+00:03:40.879 --> 00:03:42.971
+If I execute this one,
+
+00:03:42.971 --> 00:03:45.920
+this one is a hyperlink
+
+00:03:45.920 --> 00:03:46.959
+to the result
+
+00:03:46.959 --> 00:03:50.720
+of running this show comment date,
+
+00:03:50.720 --> 00:03:52.623
+but instead of showing the result
+
+00:03:52.623 --> 00:03:53.767
+in the new buffer,
+
+00:03:53.767 --> 00:03:55.475
+the result is shown
+here.
+
+00:03:55.475 --> 00:03:58.959
+So, if I execute this hyperlink,
+
+00:03:58.959 --> 00:04:01.634
+the result of date, the output of date,
+
+00:04:01.634 --> 00:04:03.339
+is shown in the echo area.
+
+00:04:03.339 --> 00:04:07.120
+And if executed again,
+
+00:04:07.120 --> 00:04:08.673
+it shows the result again,
+
+00:04:08.673 --> 00:04:09.519
+and the result
+
+00:04:09.519 --> 00:04:11.519
+changes every second.
+
+00:04:11.519 --> 00:04:18.720
+So this is a variant of find-sh.
+
+00:04:18.720 --> 00:04:21.840
+find-sh0 is the variant that
+
+00:04:21.840 --> 00:04:24.960
+just shows the output in the echo area,
+
+00:04:24.960 --> 00:04:28.080
+and find-sh shows the output in
+
+00:04:28.080 --> 00:04:31.759
+a new buffer.
+
+00:04:31.759 --> 00:04:35.919
+Here is an example of a hyperlink
+
+00:04:35.919 --> 00:04:39.173
+that calls an external program.
+
+00:04:39.173 --> 00:04:41.280
+If I execute this,
+
+00:04:41.280 --> 00:04:43.604
+it calls Google Chrome to open
+
+00:04:43.604 --> 00:04:46.639
+a certain URL.
+
+00:04:46.639 --> 00:04:51.520
+Here it is. Let's go back to Emacs.
+
+00:04:51.520 --> 00:04:55.280
+If I execute this hyperlink here,
+
+00:04:55.280 --> 00:04:57.986
+it invokes my favorite PDF viewer
+
+00:04:57.986 --> 00:05:02.560
+which is xpdf. It makes xpdf
+
+00:05:02.560 --> 00:05:07.759
+open this PDF page. It is PDF
+
+00:05:07.759 --> 00:05:10.880
+in this page, and these other arguments
+
+00:05:10.880 --> 00:05:15.199
+are ignored. Let me show how it works.
+
+00:05:15.199 --> 00:05:20.160
+Here it is. This is an excerpt from a
+book.
+
+00:05:20.160 --> 00:05:22.639
+So page 3 in the pdf corresponds to
+
+00:05:22.639 --> 00:05:26.400
+page 113 in the book.
+
+00:05:26.400 --> 00:05:29.360
+This variant here of the hyperlink above,
+
+00:05:29.360 --> 00:05:31.759
+it opens the PDF in a different way.
+
+00:05:31.759 --> 00:05:34.560
+It runs a program called pdftotext on
+
+00:05:34.560 --> 00:05:36.479
+this PDF here,
+
+00:05:36.479 --> 00:05:39.600
+and Emacs takes the output of
+
+00:05:39.600 --> 00:05:42.880
+running pdftotext on this pdf here
+
+00:05:42.880 --> 00:05:45.301
+and displays it in a buffer.
+
+00:05:45.301 --> 00:05:47.280
+Now this postback list
+
+00:05:47.280 --> 00:05:49.651
+is interpreted in a different way.
+
+00:05:49.651 --> 00:05:51.280
+This thing is interpreted
+
+00:05:51.280 --> 00:05:53.425
+as a number of a page,
+
+00:05:53.425 --> 00:05:55.548
+and Emacs goes to page three
+
+00:05:55.548 --> 00:05:57.520
+by counting form feeds in
+
+00:05:57.520 --> 00:06:00.370
+the converted version of the PDF
+
+00:06:00.370 --> 00:06:03.039
+and then it searches for this string.
+
+00:06:03.039 --> 00:06:06.319
+and in this three... So let's execute this
+
+00:06:06.319 --> 00:06:09.169
+to see what happens.
+Here it is.
+
+00:06:09.169 --> 00:06:14.800
+I opened the same page
+as before.
+
+00:06:14.800 --> 00:06:18.400
+It starts with lecture one.
+
+00:06:18.400 --> 00:06:20.720
+So the other hyperlink searched for this
+
+00:06:20.720 --> 00:06:25.520
+string and for this string here.
+
+00:06:25.520 --> 00:06:30.400
+This thing here is a hyperlink
+to video,
+
+00:06:30.400 --> 00:06:31.644
+and when I execute it,
+
+00:06:31.644 --> 00:06:34.560
+it's going to open this video here
+
+00:06:34.560 --> 00:06:37.759
+at this timestamp. Let's see.
+
+00:06:37.759 --> 00:06:49.440
+1, 2, 3. 1, 2, 3.
+That's the way to do it.
+
+00:06:49.440 --> 00:06:51.956
+And also some hyperlinks
+
+00:06:51.956 --> 00:06:53.680
+that I defined,
+
+00:06:53.680 --> 00:06:55.940
+they don't work like
+
+00:06:55.940 --> 00:06:58.160
+usual hyperlinks. They work more
+
+00:06:58.160 --> 00:07:01.440
+like browser buttons,
+
+00:07:01.440 --> 00:07:06.240
+these buttons that appear in web pages,
+
+00:07:06.240 --> 00:07:09.120
+in the sense that these buttons usually
+
+00:07:09.120 --> 00:07:11.360
+don't open a new page. They usually
+
+00:07:11.360 --> 00:07:14.960
+just do something to change
+the current page.
+
+00:07:14.960 --> 00:07:17.312
+If I execute this, the action
+
+00:07:17.312 --> 00:07:22.240
+of this function eek is to...
+
+00:07:22.240 --> 00:07:25.423
+It interprets this string
+as a series of keys
+
+00:07:25.423 --> 00:07:30.051
+and it acts as if the user had
+typed all these keys.
+
+00:07:30.051 --> 00:07:32.706
+So if executed, I get a hello
+
+00:07:32.706 --> 00:07:34.400
+in the next line.
+
+00:07:34.400 --> 00:07:36.639
+If executed again, I get another hello.
+
+00:07:36.639 --> 00:07:39.440
+Another hello. hello. hello. etc. etc.
+
+00:07:39.440 --> 00:07:44.319
+Let me undo this mess. Oops.
+
+00:07:44.319 --> 00:07:47.840
+And here is another kind of button
+
+00:07:47.840 --> 00:07:51.440
+that defines a new function. If I execute
+
+00:07:51.440 --> 00:07:54.879
+this sexp here, at this moment, though it's
+
+00:07:54.879 --> 00:07:55.759
+not defined.
+
+00:07:55.759 --> 00:07:57.919
+And if I execute this, Emacs is going to
+
+00:07:57.919 --> 00:08:00.000
+show me a message saying
+
+00:08:00.000 --> 00:08:03.599
+symbol as function cell is not defined,
+
+00:08:03.599 --> 00:08:05.840
+something like this.
+
+00:08:05.840 --> 00:08:09.520
+But if I execute the defun,
+
+00:08:09.520 --> 00:08:12.960
+the action of this function o here
+
+00:08:12.960 --> 00:08:18.960
+is to run this, which opens a certain
+directory.
+
+00:08:18.960 --> 00:08:21.840
+Let me go back. Here is another
+
+00:08:21.840 --> 00:08:23.039
+button that defines
+
+00:08:23.039 --> 00:08:25.489
+several functions at the same time.
+
+00:08:25.489 --> 00:08:32.320
+If I execute this,
+
+00:08:32.320 --> 00:08:34.561
+note that the the result of
+
+00:08:34.561 --> 00:08:36.719
+executing this expression
+
+00:08:36.719 --> 00:08:38.447
+is the name of one of the functions
+
+00:08:38.447 --> 00:08:40.080
+that it defined.
+
+00:08:40.080 --> 00:08:42.800
+That is this one here. Let me explain
+
+00:08:42.800 --> 00:08:46.959
+these examples. One of the functions
+
+00:08:46.959 --> 00:08:48.800
+that this thing here defined
+
+00:08:48.800 --> 00:08:51.839
+is called find-orggitfile, where
+
+00:08:51.839 --> 00:08:54.640
+this orggit in the middle of its name
+
+00:08:54.640 --> 00:08:59.600
+is exactly this first argument to
+code-c-d.
+
+00:08:59.600 --> 00:09:03.120
+The action of running find-orggitfile
+
+00:09:03.120 --> 00:09:06.399
+on a string like this is that
+
+00:09:06.399 --> 00:09:09.680
+find-orggitfile takes the string
+
+00:09:09.680 --> 00:09:13.360
+and prepends this string to it,
+
+00:09:13.360 --> 00:09:15.600
+this one here which is the second
+
+00:09:15.600 --> 00:09:17.920
+argument to code-c-d,
+
+00:09:17.920 --> 00:09:21.760
+and then it executes find-fline
+
+00:09:21.760 --> 00:09:25.680
+on the result, which is this one.
+
+00:09:25.680 --> 00:09:28.320
+find-fline is my variant of find-file
+
+00:09:28.800 --> 00:09:32.080
+that supports both spec lists.
+
+00:09:32.080 --> 00:09:36.880
+This function here that I'm
+
+00:09:36.880 --> 00:09:38.538
+referring to as a button,
+
+00:09:38.538 --> 00:09:41.200
+it also defines a function called
+
+00:09:41.200 --> 00:09:44.880
+find-orggitnode here, where the orggit
+
+00:09:44.880 --> 00:09:46.839
+is the same string as here.
+
+00:09:46.839 --> 00:09:50.320
+This function opens a node
+
+00:09:50.320 --> 00:09:54.160
+of an info manual. This one,
+
+00:09:54.160 --> 00:09:57.310
+this text here opens this node
+
+00:09:57.310 --> 00:10:00.080
+in the Org manual.
+
+00:10:00.080 --> 00:10:03.519
+It is equivalent to this text here.
+
+00:10:03.519 --> 00:10:06.225
+So in the passage from this line
+
+00:10:06.225 --> 00:10:08.720
+to this line, we prepended
+
+00:10:08.720 --> 00:10:12.310
+to the node name the name of
+the manual here.
+
+00:10:12.310 --> 00:10:15.040
+find-node is my variant
+
+00:10:15.040 --> 00:10:18.160
+of this standard Emacs function here,
+
+00:10:18.160 --> 00:10:20.119
+but find-node also supports
+
+00:10:20.119 --> 00:10:23.519
+postback lists.
+
+00:10:23.519 --> 00:10:26.640
+eev also defines some functions that
+
+00:10:26.640 --> 00:10:28.423
+define shorter hyperlinks to PDFs
+
+00:10:28.423 --> 00:10:30.800
+and videos.
+
+00:10:30.800 --> 00:10:32.574
+Remember that this thing here
+
+00:10:32.574 --> 00:10:34.322
+is a shorter hyperlink
+
+00:10:34.322 --> 00:10:36.668
+to a file. This thing here
+
+00:10:36.668 --> 00:10:39.040
+is a shorter hyperlink to a node
+
+00:10:39.040 --> 00:10:43.200
+in an Emacs menu in an info manual.
+
+00:10:43.200 --> 00:10:47.279
+If we run this thing here, this
+code-pdf-page,
+
+00:10:47.279 --> 00:10:50.240
+this acts like a button that defines a
+
+00:10:50.240 --> 00:10:52.880
+certain function
+
+00:10:52.880 --> 00:10:56.669
+and this string,
+this other sexp here,
+
+00:10:56.669 --> 00:10:58.430
+defines another function.
+
+00:10:58.430 --> 00:11:00.240
+The first one defines
+
+00:11:00.240 --> 00:11:02.745
+the function find-fongspivak-page,
+
+00:11:02.745 --> 00:11:05.360
+and the second one defines the
+function find-fongspivak-text.
+
+00:11:05.360 --> 00:11:09.608
+When we run the file,
+
+00:11:09.608 --> 00:11:12.020
+when we run find-fongspivak-page,
+
+00:11:12.020 --> 00:11:15.686
+it opens this PDF here.
+
+00:11:15.686 --> 00:11:20.640
+The name is quite long.
+
+00:11:20.640 --> 00:11:23.839
+This example opens this PDF at page 8
+
+00:11:23.839 --> 00:11:26.079
+and searches for the string contents.
+
+00:11:26.079 --> 00:11:31.279
+In this case, it just ignores
+this string.
+
+00:11:31.279 --> 00:11:33.519
+Here it only considers
+
+00:11:33.519 --> 00:11:37.360
+the number of the page. Let's try.
+
+00:11:42.640 --> 00:11:45.200
+Here it is, the contents of a book
+
+00:11:45.200 --> 00:11:51.760
+that is freely available. Here is
+another page of the book.
+
+00:11:51.760 --> 00:11:55.519
+And if we execute this
+hyperlink here,
+
+00:11:55.519 --> 00:11:58.399
+find-fongspivak-text, it converts the
+
+00:11:58.399 --> 00:11:59.920
+PDF to text
+
+00:11:59.920 --> 00:12:03.382
+and it searches for
+page eight in it,
+
+00:12:03.382 --> 00:12:04.754
+and then for the string,
+
+00:12:04.754 --> 00:12:08.079
+this string here in page eight.
+
+00:12:08.079 --> 00:12:12.240
+It takes a few seconds.
+
+00:12:12.240 --> 00:12:16.160
+Here it is. So this is the
+
+00:12:16.160 --> 00:12:20.892
+ASCII version of this contents page
+here.
+
+00:12:20.892 --> 00:12:25.040
+Note that this block here
+
+00:12:25.040 --> 00:12:28.800
+is a kind of an index to that book.
+
+00:12:28.800 --> 00:12:31.360
+I have the full index somewhere,
+
+00:12:31.360 --> 00:12:32.506
+but it's very long,
+
+00:12:32.506 --> 00:12:34.959
+so I just copied a few lines here.
+
+00:12:34.959 --> 00:12:38.959
+So this is a link to s
+
+00:12:38.959 --> 00:12:42.160
+section one, chapter one. This is the
+
+00:12:42.160 --> 00:12:48.959
+section 1.1, section 1.1.1, and so on.
+
+00:12:48.959 --> 00:12:54.000
+Here is a link to the index.
+
+00:12:54.000 --> 00:12:58.079
+Here is a part of my index
+
+00:12:58.079 --> 00:13:03.279
+of positions in the video
+that we just saw
+
+00:13:03.279 --> 00:13:07.360
+that I think that are especially
+relevant.
+
+00:13:07.360 --> 00:13:11.940
+So this hyperlink is a kind
+of a button
+
+00:13:11.940 --> 00:13:14.160
+that defines this function here,
+
+00:13:14.160 --> 00:13:18.839
+find-punchandjudyvideo. Into the video.
+
+00:13:27.600 --> 00:13:30.800
+We can also use this for
+
+00:13:30.800 --> 00:13:33.360
+video tutorials. For example,
+
+00:13:33.360 --> 00:13:37.200
+this is a very good tutorial on Magit.
+
+00:13:37.200 --> 00:13:40.880
+If we execute this,
+
+00:13:40.880 --> 00:13:42.560
+then these functions are going to be
+
+00:13:42.560 --> 00:13:44.800
+defined, and these functions open
+
+00:13:44.800 --> 00:13:48.399
+this tutorial on Magit.
+
+00:13:48.399 --> 00:13:50.079
+These are some of the positions in the
+
+00:13:50.079 --> 00:13:52.904
+tutorial that I found
+especially relevant.
+
+00:13:52.904 --> 00:13:54.408
+This is a very dense tutorial.
+
+00:13:54.408 --> 00:13:56.480
+I had to take notes
+of everything,
+
+00:13:56.480 --> 00:13:59.040
+and I had to watch everything
+
+00:13:59.040 --> 00:14:00.800
+several times.
+
+00:14:00.800 --> 00:14:02.896
+For example, this is a link
+
+00:14:02.896 --> 00:14:05.444
+to the position in the tutorial
+
+00:14:05.444 --> 00:14:11.005
+that explains how in Spacemacs,
+
+00:14:11.005 --> 00:14:17.600
+Magit interprets SPC g s as magit-status.
+
+00:14:17.600 --> 00:14:20.480
+Let's see. "...beginners.
+SPC g s to initiate
+
+00:14:20.480 --> 00:14:22.320
+Magit's git status.
+
+00:14:22.320 --> 00:14:25.600
+You can also do..." That's it.
+
+00:14:25.600 --> 00:14:28.800
+Here are some examples that I
+
+00:14:28.800 --> 00:14:31.200
+took from somewhere else.
+
+00:14:31.200 --> 00:14:34.240
+The video tutorials from
+
+00:14:34.240 --> 00:14:43.519
+Rainer Koenig about Org Mode.
+
+00:14:43.519 --> 00:14:45.308
+Now let me show how the functions
+
+00:14:45.308 --> 00:14:47.220
+that define these shorter hyperlinks
+
+00:14:47.220 --> 00:14:48.720
+are implemented.
+
+00:14:48.720 --> 00:14:50.509
+The standard ways in Emacs
+
+00:14:50.509 --> 00:14:53.741
+to define functions that define
+other functions
+
+00:14:53.741 --> 00:14:55.760
+would be with macros.
+
+00:14:55.760 --> 00:14:58.320
+Let's see an example. This is a standard
+
+00:14:58.320 --> 00:15:01.540
+function that defines new functions.
+
+00:15:02.959 --> 00:15:06.959
+If we execute it,
+
+00:15:06.959 --> 00:15:09.040
+its result is the last function that it
+
+00:15:09.040 --> 00:15:11.527
+defined, which is ee-glyph,
+
+00:15:11.527 --> 00:15:13.920
+which is here.
+
+00:15:13.920 --> 00:15:16.959
+It's implemented as a macro. We can
+
+00:15:16.959 --> 00:15:20.880
+look at the result of macro-expand,
+which is going to
+
+00:15:20.880 --> 00:15:22.975
+show us the result of this,
+
+00:15:22.975 --> 00:15:25.519
+of the expansion of this.
+
+00:15:25.519 --> 00:15:27.804
+Instead of expanding and executing,
+
+00:15:27.804 --> 00:15:33.199
+it just expands and shows us the result.
+
+00:15:33.199 --> 00:15:35.439
+Here the result is a bit messy.
+
+00:15:35.439 --> 00:15:39.396
+It's too big for humans to understand,
+
+00:15:39.396 --> 00:15:42.894
+but we can run this or this text here.
+
+00:15:42.894 --> 00:15:47.519
+That takes that result
+and pretty-prints it.
+
+00:15:47.519 --> 00:15:50.701
+So this is the pretty-printed version
+
+00:15:50.701 --> 00:15:54.000
+of this macro here.
+
+00:15:54.000 --> 00:15:57.600
+We can see that it defines
+
+00:15:57.600 --> 00:16:01.120
+several functions here.
+
+00:16:01.120 --> 00:16:06.399
+For example, this one.
+
+00:16:06.399 --> 00:16:09.360
+And this, just as a curiosity, is a link
+
+00:16:09.360 --> 00:16:13.839
+to the definition of cl-defstruct.
+
+00:16:13.839 --> 00:16:16.880
+Note that the code is huge.
+
+00:16:16.880 --> 00:16:18.677
+Well, it's very well-commented,
+
+00:16:18.677 --> 00:16:22.577
+but it has lots of special cases.
+
+00:16:22.577 --> 00:16:26.210
+It supports lots of constructions,
+
+00:16:26.210 --> 00:16:27.920
+and so it's huge.
+
+00:16:27.920 --> 00:16:30.174
+It's very difficult to understand.
+
+00:16:30.174 --> 00:16:33.360
+I mean, I found it very difficult
+to understand.
+
+00:16:33.360 --> 00:16:35.040
+Here's a link to document the
+
+00:16:35.040 --> 00:16:37.759
+documentation of cl-defstruct
+
+00:16:37.759 --> 00:16:42.210
+here in the manual for cl,
+
+00:16:42.210 --> 00:16:45.025
+which is a kind of support
+
+00:16:45.025 --> 00:16:50.480
+for some features of Common Lisp
+in Emacs.
+
+00:16:50.480 --> 00:16:53.825
+So let's compare this standard way of
+
+00:16:53.825 --> 00:16:56.560
+defining functions that
+define new functions,
+
+00:16:56.560 --> 00:16:59.253
+which is with macros,
+with this.
+
+00:16:59.253 --> 00:17:02.300
+I'm going to use a slogan
+repeatedly.
+
+00:17:02.300 --> 00:17:06.319
+The slogan is: "I am a very bad
+programmer."
+
+00:17:06.319 --> 00:17:08.005
+I'm a very bad programmer.
+
+00:17:08.005 --> 00:17:10.082
+So, when I was trying to create
+functions
+
+00:17:10.082 --> 00:17:12.240
+that would define new functions,
+
+00:17:12.240 --> 00:17:14.480
+I found it easier to generally generate
+
+00:17:14.480 --> 00:17:16.400
+this code as text,
+
+00:17:16.400 --> 00:17:20.559
+and then run read and eval in it.
+
+00:17:20.559 --> 00:17:24.640
+The code-c-d that we saw
+in the previous section,
+
+00:17:24.640 --> 00:17:28.079
+we can see the code that it produces
+
+00:17:28.079 --> 00:17:30.769
+by making a copy of this line
+
+00:17:30.769 --> 00:17:32.579
+and prepending this string here
+
+00:17:32.579 --> 00:17:34.480
+to the name of the function.
+
+00:17:34.480 --> 00:17:36.317
+So, instead of running code-c-d,
+
+00:17:36.317 --> 00:17:38.400
+we run find-code-cd,
+
+00:17:38.400 --> 00:17:41.280
+and it creates a new temporary buffer
+
+00:17:41.280 --> 00:17:44.400
+with the code that
+
+00:17:44.400 --> 00:17:47.760
+code-c-d would execute.
+
+00:17:47.760 --> 00:17:54.080
+So it's a series of the defuns
+and a few setqs and so on.
+
+00:17:54.080 --> 00:17:59.120
+And this thing is implemented mostly as
+a template.
+
+00:18:02.160 --> 00:18:04.045
+There's an inner function called
+
+00:18:04.045 --> 00:18:06.240
+ee-code-c-d-base that receives just
+
+00:18:06.240 --> 00:18:08.799
+these two arguments, and it says...
+
+00:18:08.799 --> 00:18:10.640
+Essentially, it just runs the function
+
+00:18:10.640 --> 00:18:14.320
+ee-template0 on the string here, and
+
+00:18:14.320 --> 00:18:16.480
+the things between curly braces are
+
+00:18:16.480 --> 00:18:18.559
+substituted by the values
+
+00:18:18.559 --> 00:18:23.600
+of these arguments here.
+
+00:18:23.600 --> 00:18:25.919
+There's one part of the tutorial here
+
+00:18:25.919 --> 00:18:28.480
+that explains all these things,
+
+00:18:28.480 --> 00:18:31.039
+except for the rationale for some
+
+00:18:31.039 --> 00:18:32.559
+design decisions,
+
+00:18:32.559 --> 00:18:35.360
+and those design decisions are one of
+
+00:18:35.360 --> 00:18:37.280
+the many motivations for this talk.
+
+00:18:37.760 --> 00:18:39.679
+I'm only going to explain these
+
+00:18:39.679 --> 00:18:42.640
+things in detail at the end,
+
+00:18:42.640 --> 00:18:48.480
+which is kind of...
+
+00:18:48.480 --> 00:18:49.662
+So in the beginning, I said
+
+00:18:49.662 --> 00:18:51.600
+that the three main keys of eev
+
+00:18:51.600 --> 00:18:56.000
+are M-e, M-k and M-j.
+
+00:18:56.000 --> 00:19:00.080
+Let's see now what M-j does.
+
+00:19:00.080 --> 00:19:02.447
+I need to start with some
+motivation.
+
+00:19:02.447 --> 00:19:04.640
+The motivation is that we
+
+00:19:04.640 --> 00:19:06.559
+can define commands with very short
+
+00:19:06.559 --> 00:19:08.240
+names. Actually, I became kind of
+
+00:19:08.240 --> 00:19:10.160
+addicted to that.
+
+00:19:10.160 --> 00:19:13.200
+This is an example of defun that
+
+00:19:13.200 --> 00:19:15.600
+defines a comment with a very short name.
+
+00:19:15.600 --> 00:19:18.000
+Its name is just one letter, "e."
+
+00:19:18.000 --> 00:19:20.530
+and I can invoke... You invoke it
+
+00:19:20.530 --> 00:19:21.856
+with M-x e.
+
+00:19:21.856 --> 00:19:24.720
+If I type M-x p,
+
+00:19:24.720 --> 00:19:26.661
+now it opens a LaTeX file
+
+00:19:26.661 --> 00:19:31.130
+that I'm working on.
+
+00:19:32.559 --> 00:19:35.200
+I create most of my LaTeX files
+
+00:19:35.200 --> 00:19:39.200
+using template-based functions like
+
+00:19:39.200 --> 00:19:43.760
+the implementation of code-c-d above.
+
+00:19:43.760 --> 00:19:45.576
+These template-based functions
+
+00:19:45.576 --> 00:19:49.280
+create files with extension .tex
+
+00:19:49.280 --> 00:19:51.280
+that start with a series of defuns
+
+00:19:51.280 --> 00:19:53.919
+in comments. For example,
+
+00:19:53.919 --> 00:19:55.926
+let's look at this example here.
+
+00:19:55.926 --> 00:19:58.049
+If I execute find-latex-links
+
+00:19:58.049 --> 00:19:59.440
+with this argument,
+
+00:19:59.440 --> 00:20:02.525
+it's going to do several things
+
+00:20:02.525 --> 00:20:08.320
+for creating a file called /tmp/foo.tex,
+
+00:20:08.320 --> 00:20:10.387
+and the header of that file
+
+00:20:10.387 --> 00:20:12.400
+is going to be this,
+
+00:20:12.400 --> 00:20:16.080
+which starts with three
+
+00:20:16.080 --> 00:20:19.280
+defuns with functions with very short
+
+00:20:19.280 --> 00:20:21.919
+names and comments.
+
+00:20:21.919 --> 00:20:27.520
+Let's compare with the situation here.
+
+00:20:27.520 --> 00:20:32.799
+In my file, 2020favorite-conventions.tex,
+
+00:20:32.799 --> 00:20:34.640
+I have this header here in which I
+
+00:20:34.640 --> 00:20:39.360
+define six functions with
+very short names.
+
+00:20:39.360 --> 00:20:41.919
+And in this case here, that is even
+
+00:20:41.919 --> 00:20:44.799
+explained in the tutorial.
+
+00:20:44.799 --> 00:20:48.000
+These... We have mnemonics for
+
+00:20:48.000 --> 00:20:51.520
+these short names here. c is compile,
+
+00:20:51.520 --> 00:20:54.799
+d is display. I mean, display the PDF.
+
+00:20:54.799 --> 00:20:57.377
+e is added in the sense of
+
+00:20:57.377 --> 00:21:02.320
+make Emacs visit that file.
+
+00:21:02.320 --> 00:21:06.480
+Now I can explain what is M-j
+itself.
+
+00:21:06.480 --> 00:21:09.600
+We just saw commands with
+very short names.
+
+00:21:09.600 --> 00:21:12.048
+The idea behind M-j is that
+
+00:21:12.048 --> 00:21:14.031
+we can define commands with
+
+00:21:14.031 --> 00:21:16.480
+very short numbers.
+
+00:21:16.480 --> 00:21:19.679
+Let me explain this.
+
+00:21:19.679 --> 00:21:23.039
+The short explanation
+for what M-j does
+
+00:21:23.039 --> 00:21:25.360
+is that it jumps to set certain
+
+00:21:25.360 --> 00:21:27.039
+predefined places.
+
+00:21:27.039 --> 00:21:30.799
+In particular, a M-j without
+a numeric argument
+
+00:21:30.799 --> 00:21:32.216
+takes us to a buffer
+
+00:21:32.216 --> 00:21:34.080
+with the basic help
+
+00:21:34.080 --> 00:21:37.679
+and a list of the current jump targets.
+
+00:21:37.679 --> 00:21:39.760
+This is something that is a bit
+
+00:21:39.760 --> 00:21:41.520
+simpler to understand.
+
+00:21:41.520 --> 00:21:44.559
+If we type M-5 M-j,
+
+00:21:44.559 --> 00:21:48.411
+then M-j runs this sexp here
+
+00:21:48.411 --> 00:21:51.120
+that is associated to
+
+00:21:51.120 --> 00:21:55.440
+the argument 5. I say that the target
+
+00:21:55.440 --> 00:21:59.039
+for the argument 5 is this one,
+
+00:21:59.039 --> 00:22:01.520
+and if the argument is true, then the
+
+00:22:01.520 --> 00:22:03.760
+target associated to the true
+
+00:22:03.760 --> 00:22:07.039
+is this sexp here that opens...
+
+00:22:07.039 --> 00:22:09.600
+This one opens the main tutorial
+for eev,
+
+00:22:09.600 --> 00:22:13.679
+and this one opens another tutorial.
+
+00:22:13.679 --> 00:22:15.679
+This is a link to one of the tutorials
+
+00:22:15.679 --> 00:22:20.480
+of eev to the part that explains M-j.
+
+00:22:20.480 --> 00:22:22.212
+I've copied the the main part
+
+00:22:22.212 --> 00:22:24.559
+of the text here.
+
+00:22:24.559 --> 00:22:28.159
+The header that M-j shows...
+
+00:22:28.159 --> 00:22:31.360
+Let me show it very quickly here.
+
+00:22:31.360 --> 00:22:36.320
+Here is their head and
+here is the rest.
+
+00:22:36.320 --> 00:22:38.773
+The header is very beginner friendly,
+
+00:22:38.773 --> 00:22:40.000
+and if you're a beginner
+
+00:22:40.000 --> 00:22:42.159
+who only knows how to use M-e to
+
+00:22:42.159 --> 00:22:44.559
+execute and...
+
+00:22:44.559 --> 00:22:46.706
+This should be okay.
+
+00:22:46.706 --> 00:22:48.240
+M-k to go back.
+
+00:22:48.240 --> 00:22:52.320
+Then you can and should use that header--
+
+00:22:52.320 --> 00:22:56.720
+I mean, this header here--
+
+00:22:56.720 --> 00:22:58.894
+as your main starting point.
+
+00:22:58.894 --> 00:23:00.799
+Every time that you feel lost,
+
+00:23:00.799 --> 00:23:04.799
+you can type M-j to go back to
+that header,
+
+00:23:04.799 --> 00:23:08.000
+and you can use its links to
+navigate to the documentation
+
+00:23:08.000 --> 00:23:11.360
+for Emacs and eev. Let me explain that.
+
+00:23:11.360 --> 00:23:15.679
+This header here has several elisp
+hyperlinks.
+
+00:23:15.679 --> 00:23:22.400
+One here, one here, one here,
+one here, and so on.
+
+00:23:22.400 --> 00:23:25.760
+These ones are links to the
+
+00:23:25.760 --> 00:23:29.280
+to the intros, which are the tutorials.
+
+00:23:29.280 --> 00:23:31.520
+find-eev-quick-intro is the
+main tutorial,
+
+00:23:31.520 --> 00:23:35.760
+and find-emacs-keys-intro is a
+kind of tutorial that is
+
+00:23:35.760 --> 00:23:40.000
+an index of the main keys.
+
+00:23:40.000 --> 00:23:42.559
+After that, we have an explanation of
+
+00:23:42.559 --> 00:23:45.449
+what some numeric prefixes do.
+
+00:23:45.449 --> 00:23:49.913
+So if we type M-1 M-j,
+the effect of that
+
+00:23:49.913 --> 00:23:53.200
+is exactly the same as
+executing this.
+
+00:23:53.200 --> 00:24:00.159
+We can execute this with M-e also.
+
+00:24:00.159 --> 00:24:03.679
+M-2 M-j runs this sexp and
+
+00:24:03.679 --> 00:24:06.960
+I can also execute it with M-e.
+
+00:24:06.960 --> 00:24:18.400
+Here it is. It's this intro, this
+sandbox tutorial.
+
+00:24:18.400 --> 00:24:24.640
+Here is another sandbox tutorial.
+
+00:24:24.640 --> 00:24:27.039
+Let me go back. Then the
+
+00:24:27.039 --> 00:24:29.388
+documentation says that header,
+
+00:24:29.388 --> 00:24:31.760
+the header that is beginner-friendly
+
+00:24:31.760 --> 00:24:33.679
+is followed by a section that is very
+
+00:24:33.679 --> 00:24:35.520
+beginner-unfriendly
+
+00:24:35.520 --> 00:24:40.400
+that contains a series of defuns
+like these ones.
+
+00:24:40.400 --> 00:24:44.640
+Here, the last line of the header is
+this comment here.
+
+00:24:44.640 --> 00:24:48.559
+Then we have several defuns like this.
+
+00:24:48.559 --> 00:24:51.440
+Let me explain how these things work.
+
+00:24:51.440 --> 00:24:53.082
+Technically, what happens
+
+00:24:53.082 --> 00:24:56.399
+when we type M-j without any arguments
+
+00:24:56.399 --> 00:25:00.230
+is that it runs eejump with argument nil,
+
+00:25:00.230 --> 00:25:04.640
+and then this runs 5 eejumps.
+
+00:25:04.640 --> 00:25:07.224
+When I run M-j with a numeric argument,
+
+00:25:07.224 --> 00:25:13.374
+for example, with argument 5,
+it runs a jump 5.
+
+00:25:13.374 --> 00:25:17.679
+eejump-5 concatenates this 5 one
+
+00:25:17.679 --> 00:25:19.999
+to make a name of a function,
+
+00:25:19.999 --> 00:25:21.679
+this function here.
+
+00:25:21.679 --> 00:25:24.720
+and it executes this function
+eejump-5.
+
+00:25:24.720 --> 00:25:31.919
+You jump -5, and eejump-5
+
+00:25:31.919 --> 00:25:35.520
+executes find-eev-quick-intro.
+
+00:25:35.520 --> 00:25:39.360
+If I execute just M-j,
+
+00:25:39.360 --> 00:25:40.533
+the section that shows
+
+00:25:40.533 --> 00:25:43.919
+the current jump targets
+
+00:25:43.919 --> 00:25:46.719
+has a line for eejump-5. This is...
+
+00:25:46.719 --> 00:25:52.400
+That is exactly the thing
+that I was explaining before.
+
+00:25:52.400 --> 00:25:54.544
+So we can use M-j to navigate
+
+00:25:54.544 --> 00:25:59.520
+the tutorials. We can copy the links.
+
+00:25:59.520 --> 00:26:03.440
+Sorry. We can copy links to the
+
+00:26:03.440 --> 00:26:07.919
+tutorials to our notes.
+
+00:26:07.919 --> 00:26:11.840
+Oh, sorry, this has some typos.
+
+00:26:11.840 --> 00:26:14.880
+For example, if I execute this,
+
+00:26:14.880 --> 00:26:18.080
+I go to a section of this tutorial here
+
+00:26:18.080 --> 00:26:20.640
+that explains the main keys of eev.
+
+00:26:20.640 --> 00:26:23.670
+These things are hyperlinks.
+
+00:26:23.670 --> 00:26:25.597
+I can mark a hyperlink like this.
+
+00:26:25.597 --> 00:26:27.286
+it is just plain text.
+
+00:26:27.286 --> 00:26:29.525
+I can copy it to my notes.
+
+00:26:29.525 --> 00:26:31.760
+The idea is that every time
+
+00:26:31.760 --> 00:26:34.016
+that I find something that is
+interesting,
+
+00:26:34.016 --> 00:26:36.240
+I can create a hyperlink to it.
+
+00:26:36.240 --> 00:26:38.513
+I can put these links in my notes
+
+00:26:38.513 --> 00:26:40.799
+so I can navigate back
+
+00:26:40.799 --> 00:26:42.667
+to all the interesting positions
+
+00:26:42.667 --> 00:26:48.799
+very quickly.
+
+00:26:48.799 --> 00:26:57.600
+Okay, next feature.
+If we type M-J (uppercase), then
+
+00:26:57.600 --> 00:27:00.080
+this is a function that transforms
+
+00:27:00.080 --> 00:27:03.679
+the current line in a certain way.
+
+00:27:03.679 --> 00:27:06.471
+Let me give an example.
+Let me isolate this.
+
+00:27:06.471 --> 00:27:11.039
+Let me duplicate this line
+to make clear what happens.
+
+00:27:11.039 --> 00:27:14.240
+If I type M-J (uppercase) here,
+
+00:27:14.240 --> 00:27:17.561
+this line here becomes
+the defun for eejump-6,
+
+00:27:17.561 --> 00:27:21.200
+and the target of this eejump
+
+00:27:21.200 --> 00:27:24.799
+is exactly this sexp here.
+
+00:27:24.799 --> 00:27:28.559
+Let me undo this mess.
+
+00:27:28.559 --> 00:27:30.815
+If the first word in the line
+
+00:27:30.815 --> 00:27:32.840
+is not a number... For example,
+
+00:27:32.840 --> 00:27:36.240
+here, let me do the same thing:
+
+00:27:36.240 --> 00:27:41.200
+duplicate the line and type M-J,
+
+00:27:41.200 --> 00:27:44.014
+then M-J (uppercase) converts that to
+
+00:27:44.014 --> 00:27:49.440
+a defun that defines a function
+with a very short name.
+
+00:27:49.440 --> 00:27:52.720
+This function with a very short name
+
+00:27:52.720 --> 00:27:56.720
+opens this file here in the directory
+
+00:27:56.720 --> 00:27:59.360
+with the copy of the git repository
+
+00:27:59.360 --> 00:28:01.360
+for Org Mode.
+
+00:28:01.360 --> 00:28:05.360
+Let me undo the mess again.
+
+00:28:05.360 --> 00:28:14.640
+Oops. That's it.
+
+00:28:14.640 --> 00:28:21.279
+M-J (uppercase) is a particular case
+of something that
+
+00:28:21.279 --> 00:28:23.708
+I use a lot in eev.
+
+00:28:23.708 --> 00:28:28.799
+eev has lots of commands that--
+sorry, key sequences
+
+00:28:28.799 --> 00:28:31.466
+that are like M- uppercase letter,
+
+00:28:31.466 --> 00:28:34.660
+and almost all of them operate
+
+00:28:34.660 --> 00:28:36.019
+on the current line and
+
+00:28:36.019 --> 00:28:37.616
+transform the current line
+
+00:28:37.616 --> 00:28:38.880
+in a certain way.
+
+00:28:38.880 --> 00:28:42.000
+For example, this is a filename.
+
+00:28:42.000 --> 00:28:45.360
+If I type M-F (uppercase) here,
+
+00:28:45.360 --> 00:28:47.967
+it becomes a link to that file.
+
+00:28:47.967 --> 00:28:50.000
+This is the name of a man page.
+
+00:28:50.000 --> 00:28:53.600
+If I type M-M (uppercase) here,
+
+00:28:53.600 --> 00:28:55.292
+it converts that to the link
+
+00:28:55.292 --> 00:28:58.080
+to a manpage. This is a shell command.
+
+00:28:58.080 --> 00:29:01.679
+If I type M-S (uppercase) here,
+
+00:29:01.679 --> 00:29:04.960
+it converts that to a link to a
+
+00:29:04.960 --> 00:29:08.720
+to find-sh (shell).
+
+00:29:08.720 --> 00:29:12.960
+Until a few years ago,
+these functions
+
+00:29:12.960 --> 00:29:16.159
+with M- uppercase letter were half
+
+00:29:16.159 --> 00:29:18.880
+of my main ways of creating
+sexp hyperlinks
+
+00:29:18.880 --> 00:29:20.085
+with a few key strokes.
+
+00:29:20.085 --> 00:29:22.399
+In the beginning, of course,
+I had to create my
+
+00:29:22.399 --> 00:29:25.600
+sexp pipelines by typing each character.
+
+00:29:25.600 --> 00:29:28.640
+But after some time, I decided that
+
+00:29:28.640 --> 00:29:31.520
+I needed something more efficient.
+
+00:29:31.520 --> 00:29:38.480
+So this is the end of part one
+of the presentation.
+
+00:29:38.480 --> 00:29:40.640
+So this is part two of the presentation,
+
+00:29:40.640 --> 00:29:42.070
+and the main theme here
+
+00:29:42.070 --> 00:29:44.320
+is the standard describe-key
+
+00:29:44.320 --> 00:29:46.320
+function that comes with Emacs.
+
+00:29:46.320 --> 00:29:49.200
+My variant of it... The thing is that
+
+00:29:49.200 --> 00:29:50.960
+the standard describe-key in Emacs
+
+00:29:50.960 --> 00:29:52.738
+is user-friendly, but it is
+
+00:29:52.738 --> 00:29:55.600
+hacker-unfriendly. Well, I felt so.
+
+00:29:55.600 --> 00:29:58.281
+When I tried to complement it
+
+00:29:58.281 --> 00:30:00.799
+by writing a hacker-friendly
+version of it
+
+00:30:00.799 --> 00:30:03.919
+that produced the sexp hyperlinks
+that I needed,
+
+00:30:03.919 --> 00:30:06.457
+I got something that
+I found really lovely.
+
+00:30:07.039 --> 00:30:08.994
+Several of the main
+
+00:30:08.994 --> 00:30:12.480
+design decisions of eev can be seen there.
+
+00:30:12.480 --> 00:30:13.995
+When I showed my variants to
+
+00:30:13.995 --> 00:30:15.520
+other people, they hated it.
+
+00:30:15.520 --> 00:30:16.851
+They felt that it was
+
+00:30:16.851 --> 00:30:19.360
+totally against their notions of
+
+00:30:19.360 --> 00:30:23.440
+user-friendliness.
+
+00:30:23.440 --> 00:30:24.606
+Okay. So let's see.
+
+00:30:24.606 --> 00:30:26.297
+The standard describe-key,
+
+00:30:26.297 --> 00:30:30.401
+if I run this hyperlink here,
+I get this.
+
+00:30:30.401 --> 00:30:31.866
+The result of running
+
+00:30:31.866 --> 00:30:34.399
+describe-key on the key down...
+
+00:30:34.399 --> 00:30:35.799
+This is a big buffer
+
+00:30:35.799 --> 00:30:38.080
+with some things in italics.
+
+00:30:38.080 --> 00:30:40.752
+Some hyperlinks here.
+
+00:30:40.752 --> 00:30:42.387
+These hyperlinks are standard
+
+00:30:42.387 --> 00:30:43.679
+in the sense that
+
+00:30:43.679 --> 00:30:45.407
+the targets are not visible,
+
+00:30:45.407 --> 00:30:47.760
+and they are implemented using
+
+00:30:47.760 --> 00:30:49.519
+buttons in Emacs Lisp.
+
+00:30:49.519 --> 00:30:52.385
+This section of the Emacs Lisp manual
+
+00:30:52.385 --> 00:30:56.799
+describes how buttons work.
+
+00:30:56.799 --> 00:31:01.957
+The source code is quite difficult.
+
+00:31:01.957 --> 00:31:04.240
+I mean, when I was starting to
+
+00:31:04.240 --> 00:31:05.721
+to try to decipher this
+
+00:31:05.721 --> 00:31:07.600
+when I was a beginner
+
+00:31:07.600 --> 00:31:11.200
+using Emacs 19.34, I felt that this
+
+00:31:11.200 --> 00:31:12.320
+describe-key was
+
+00:31:12.320 --> 00:31:15.519
+very difficult to understand.
+
+00:31:15.519 --> 00:31:20.080
+I felt that the the designers,
+
+00:31:20.080 --> 00:31:22.640
+the people who wrote it,
+were sacrificing
+
+00:31:22.640 --> 00:31:24.839
+too much of the hacker-friendliness
+
+00:31:24.839 --> 00:31:27.154
+that I was expecting from it
+
+00:31:27.154 --> 00:31:31.279
+to make it beginner-friendly.
+
+00:31:31.279 --> 00:31:33.600
+Let me explain. What are the problems
+
+00:31:33.600 --> 00:31:35.511
+with the standard describe-key?
+
+00:31:35.511 --> 00:31:37.336
+If we think that hyperlinks
+
+00:31:37.336 --> 00:31:38.640
+are things like this
+
+00:31:38.640 --> 00:31:41.600
+with the target and the text, then in the
+
+00:31:41.600 --> 00:31:43.600
+button hyperlinks of describe-key,
+
+00:31:43.600 --> 00:31:46.516
+these three bad things happen.
+
+00:31:46.516 --> 00:31:49.983
+First, it is hard to extract
+the target from the hyperlink.
+
+00:31:49.983 --> 00:31:52.000
+Second, it is hard to recreate
+
+00:31:52.000 --> 00:31:55.440
+a list of code that would
+go to that target.
+
+00:31:55.440 --> 00:31:57.519
+Third, it is hard to copy the full
+
+00:31:57.519 --> 00:32:00.640
+hyperlink, including the targets
+to other buffers.
+
+00:32:00.640 --> 00:32:04.960
+I only knew how to copy the text
+
+00:32:04.960 --> 00:32:06.937
+when I was trying to decipher
+
+00:32:06.937 --> 00:32:09.039
+what describe-key was doing.
+
+00:32:09.039 --> 00:32:11.679
+I created lots of hyperlinks like this
+
+00:32:11.679 --> 00:32:16.159
+to inspect the text properties and
+things like that.
+
+00:32:16.159 --> 00:32:18.113
+For example, in the description
+
+00:32:18.113 --> 00:32:20.390
+of the key down here,
+
+00:32:20.390 --> 00:32:26.799
+we have a button that points to
+simple.el.
+
+00:32:26.799 --> 00:32:29.336
+The text of that button is simple.el.
+
+00:32:29.336 --> 00:32:31.600
+This hyperlink goes to the
+
+00:32:31.600 --> 00:32:35.519
+to the middle of this
+button hyperlink here.
+
+00:32:35.519 --> 00:32:39.120
+This hyperlink here
+
+00:32:39.120 --> 00:32:43.279
+goes to the middle of the button
+of this button hyperlink,
+
+00:32:43.279 --> 00:32:46.240
+and then inspects its text properties,
+
+00:32:46.240 --> 00:32:51.679
+and then goes to this section here
+of the description.
+
+00:32:51.679 --> 00:32:53.521
+So this is a high-level description
+
+00:32:53.521 --> 00:32:56.159
+of the text properties.
+
+00:32:56.159 --> 00:32:58.782
+I mean, the text properties that make it
+a button.
+
+00:32:58.782 --> 00:33:04.320
+This is a lower-level description of
+these text properties.
+
+00:33:04.320 --> 00:33:08.000
+The button that points to
+
+00:33:08.000 --> 00:33:11.440
+forward-line--sorry, the button
+
+00:33:11.440 --> 00:33:14.399
+whose text is forward-line, this one is
+
+00:33:14.399 --> 00:33:16.480
+slightly different--
+
+00:33:16.480 --> 00:33:21.200
+this hyperlink here goes to the middle
+of that button.
+
+00:33:21.200 --> 00:33:25.760
+This hyperlink goes to the middle of
+that button,
+
+00:33:25.760 --> 00:33:28.173
+inspects its text properties,
+
+00:33:28.173 --> 00:33:29.360
+and goes to the section
+
+00:33:29.360 --> 00:33:33.617
+of this button of this help buffer here
+
+00:33:33.617 --> 00:33:36.399
+that describes the button
+
+00:33:36.399 --> 00:33:41.679
+and the lower-level view of the text
+properties.
+
+00:33:41.679 --> 00:33:45.519
+So I started with things like this
+
+00:33:45.519 --> 00:33:47.866
+to understand what these buttons
+were doing
+
+00:33:47.866 --> 00:33:49.339
+and I was able to figure out
+
+00:33:49.339 --> 00:33:51.620
+how these things are implemented
+
+00:33:51.620 --> 00:33:53.120
+in describe-key, and then
+
+00:33:53.120 --> 00:33:55.519
+similar help functions in Emacs.
+
+00:33:55.519 --> 00:33:57.506
+I discovered that one of the
+
+00:33:57.506 --> 00:33:59.049
+main lower-level functions
+
+00:33:59.049 --> 00:34:01.360
+that Emacs used for this
+
+00:34:01.360 --> 00:34:05.279
+is a function called
+find-function-noselect.
+
+00:34:05.279 --> 00:34:09.929
+If I run find-function-noselect
+on next line,
+
+00:34:11.200 --> 00:34:14.240
+it returns a pair:
+
+00:34:14.240 --> 00:34:18.079
+a cons made of a buffer and a position.
+
+00:34:18.079 --> 00:34:20.560
+So I created functions that would
+
+00:34:21.679 --> 00:34:24.320
+follow this. That would open that
+
+00:34:24.320 --> 00:34:26.510
+buffer in that position
+
+00:34:26.510 --> 00:34:29.679
+and then this is a postback list.
+
+00:34:29.679 --> 00:34:31.679
+So we could go to these positions and
+
+00:34:31.679 --> 00:34:33.919
+then search for this string, and another
+
+00:34:33.919 --> 00:34:36.000
+string, and another string, and so on.
+
+00:34:36.000 --> 00:34:41.040
+So this goes to the definition
+of find-efunction
+
+00:34:41.040 --> 00:34:45.006
+and then to a string after it.
+
+00:34:45.006 --> 00:34:48.296
+I use these things to implement
+
+00:34:48.296 --> 00:34:51.839
+my own functions that pointed to the
+
+00:34:51.839 --> 00:34:55.339
+same targets as the button hyperlinks
+
+00:34:55.339 --> 00:35:00.240
+and describe-key.
+
+00:35:00.240 --> 00:35:02.673
+Again, let me show the comparison.
+
+00:35:02.673 --> 00:35:06.322
+This is the standard
+describe-key here,
+
+00:35:06.322 --> 00:35:10.480
+and this is my variant.
+
+00:35:10.480 --> 00:35:13.839
+It creates a buffer with links,
+
+00:35:13.839 --> 00:35:17.680
+with the list of hyperlinks about this key.
+
+00:35:17.680 --> 00:35:20.960
+We get this. So, each one of these
+
+00:35:20.960 --> 00:35:22.960
+functions is either a blank line
+
+00:35:22.960 --> 00:35:28.720
+or an elisp hyperlink.
+
+00:35:28.720 --> 00:35:34.506
+Here is a slight variant of the
+function find-ekey-links above.
+
+00:35:34.506 --> 00:35:39.280
+In this variant, the argument is a
+string that has to be processed by
+
+00:35:39.280 --> 00:35:42.400
+read-kbd-macro to convert it to the
+
+00:35:42.400 --> 00:35:45.280
+lower-level format.
+
+00:35:45.280 --> 00:35:49.040
+Note that these functions here
+that I wrote,
+
+00:35:49.040 --> 00:35:50.934
+they display temporary buffers
+
+00:35:50.934 --> 00:35:53.599
+with no help at all.
+
+00:35:53.599 --> 00:35:57.131
+To be honest, there's a link to
+
+00:35:57.131 --> 00:35:58.345
+a tutorial here,
+
+00:35:58.345 --> 00:36:00.467
+but this is a recent edition
+
+00:36:00.467 --> 00:36:03.200
+so let's ignore this.
+
+00:36:03.200 --> 00:36:06.640
+They display temporary buffers
+
+00:36:06.640 --> 00:36:07.949
+with no help at all,
+
+00:36:07.949 --> 00:36:09.520
+just lots of hyperlinks.
+
+00:36:09.520 --> 00:36:11.172
+And these hyperlinks can be...
+
+00:36:11.172 --> 00:36:13.359
+They are very hacker-friendly
+in the sense that
+
+00:36:13.359 --> 00:36:15.477
+they can be followed with M-e.
+
+00:36:15.477 --> 00:36:17.520
+They can be copied to other
+
+00:36:17.520 --> 00:36:19.920
+buffers because they are plain text,
+
+00:36:19.920 --> 00:36:23.680
+because they are just sexp.
+
+00:36:23.680 --> 00:36:28.000
+And they can be inspected
+in the sense that...
+
+00:36:28.000 --> 00:36:32.400
+For example, here,
+
+00:36:32.400 --> 00:36:35.520
+we have a hyperlink to a function
+that we...
+
+00:36:35.520 --> 00:36:37.599
+It may be difficult to figure out what
+
+00:36:37.599 --> 00:36:39.200
+this function does,
+
+00:36:39.200 --> 00:36:41.600
+but we can go to that position,
+
+00:36:41.600 --> 00:36:45.839
+and then type C-h f to see the
+
+00:36:45.839 --> 00:36:48.240
+description of this function.
+
+00:36:48.240 --> 00:36:53.890
+And here is a hyperlink that does that
+
+00:36:56.000 --> 00:37:00.160
+in my syntax, say.
+
+00:37:00.160 --> 00:37:02.800
+This list of hyperlinks were
+
+00:37:02.800 --> 00:37:08.000
+generated by this code here that just
+
+00:37:08.000 --> 00:37:11.119
+used a back quote to generate
+
+00:37:11.119 --> 00:37:14.640
+lists of sexps.
+
+00:37:14.640 --> 00:37:18.240
+I felt that this function here
+
+00:37:18.240 --> 00:37:20.700
+that just generated this list
+
+00:37:20.700 --> 00:37:23.393
+was very easy to understand
+and to modify,
+
+00:37:23.393 --> 00:37:28.480
+so this was hacker-friendly
+in the way that I wanted.
+
+00:37:28.480 --> 00:37:31.599
+So I started using this,
+
+00:37:31.599 --> 00:37:33.459
+and this idea of using buffers
+
+00:37:33.459 --> 00:37:36.066
+with sexp hyperlinks and no help
+
+00:37:36.066 --> 00:37:38.720
+violated all the notions
+of user-friendliness
+
+00:37:38.720 --> 00:37:40.079
+that I knew, so I was
+
+00:37:40.079 --> 00:37:41.504
+exploring something new
+
+00:37:41.504 --> 00:37:46.160
+at that time. This is the end of
+part two.
+
+00:37:46.160 --> 00:37:49.359
+Part three of this presentation is
+
+00:37:49.359 --> 00:37:51.735
+about the killer features of eev,
+
+00:37:51.735 --> 00:37:53.778
+or why everybody should use eev
+
+00:37:53.778 --> 00:37:55.789
+or at least have eev installed
+
+00:37:55.789 --> 00:37:59.280
+even if they think that eev
+is too weird.
+
+00:37:59.280 --> 00:38:01.200
+So this is a very quick listing.
+
+00:38:01.200 --> 00:38:04.240
+eev has elisp hyperlinks
+which are super nice.
+
+00:38:04.240 --> 00:38:06.050
+It comes with lots of tutorials.
+
+00:38:06.050 --> 00:38:10.800
+The main one here explains all the
+main features.
+
+00:38:10.800 --> 00:38:14.079
+There's also a tutorial that's
+
+00:38:14.079 --> 00:38:18.079
+an index of all the other tutorials here.
+
+00:38:18.079 --> 00:38:20.509
+Many, many, many tutorials.
+
+00:38:20.509 --> 00:38:24.079
+If we forget everything,
+we can just type M-j.
+
+00:38:24.079 --> 00:38:28.104
+Remember that this part here
+is beginner-friendly,
+
+00:38:28.104 --> 00:38:32.960
+and the rest is
+beginner-unfriendly.
+
+00:38:32.960 --> 00:38:38.320
+There's a tutorial on Emacs Lisp here.
+
+00:38:38.320 --> 00:38:41.920
+It mainly explains how to understand
+
+00:38:41.920 --> 00:38:44.640
+Elisp code, which is much easier than...
+
+00:38:44.640 --> 00:38:46.673
+It's much easier to understand
+Elisp code
+
+00:38:46.673 --> 00:38:50.160
+than to understand how to
+program in Elisp.
+
+00:38:50.160 --> 00:38:53.440
+Most people are only going to need this.
+
+00:38:53.440 --> 00:38:55.368
+eev is very easy to install.
+
+00:38:55.368 --> 00:38:58.240
+It's in ELPA, so we just need to do
+
+00:38:58.240 --> 00:39:03.520
+this thing here, and it's very
+non-invasive.
+
+00:39:03.520 --> 00:39:05.472
+Years ago, several years ago,
+
+00:39:05.472 --> 00:39:07.039
+it was a very invasive package,
+
+00:39:07.039 --> 00:39:08.960
+but then I changed everything.
+
+00:39:08.960 --> 00:39:13.520
+Now, if we toggle eev-mode on and off,
+
+00:39:13.520 --> 00:39:16.320
+what's going to happen is just that
+
+00:39:16.320 --> 00:39:21.599
+the eev-keymap becomes activated or
+deactivated.
+
+00:39:21.599 --> 00:39:24.720
+When we install eev--
+
+00:39:24.720 --> 00:39:27.064
+I mean when we require eev,
+
+00:39:27.064 --> 00:39:32.640
+the only things that happens globally
+are these things here:
+
+00:39:32.640 --> 00:39:34.993
+several functions and variables
+become defined.
+
+00:39:34.993 --> 00:39:40.079
+All of them have standard prefixes,
+except for one.
+
+00:39:40.079 --> 00:39:43.040
+Three characters are changed in the
+
+00:39:43.040 --> 00:39:44.480
+standard display table
+
+00:39:44.480 --> 00:39:48.640
+to make them appear as colored glyphs:
+
+00:39:48.640 --> 00:39:52.780
+the red star, the open
+double angle brackets,
+
+00:39:52.780 --> 00:39:58.160
+and the closed double angle brackets.
+
+00:39:58.160 --> 00:40:01.359
+Two environment variables are set.
+
+00:40:01.359 --> 00:40:04.560
+This is a trivial technicality.
+
+00:40:04.560 --> 00:40:10.800
+We just run a defadvice around one
+function that is used by "man."
+
+00:40:10.800 --> 00:40:18.400
+Also, eev has a very high
+discoverability factor.
+
+00:40:18.400 --> 00:40:22.135
+There's a way to create,
+a very easy way
+
+00:40:22.135 --> 00:40:25.200
+to create a hyperlink to here.
+
+00:40:25.200 --> 00:40:27.760
+I do not have time to show this now,
+
+00:40:27.760 --> 00:40:31.200
+but for example, if I'm here
+in a tutorial,
+
+00:40:31.200 --> 00:40:35.736
+and I think that this section
+is something interesting
+
+00:40:35.736 --> 00:40:39.520
+and I want to create a hyperlink to it,
+
+00:40:39.520 --> 00:40:43.040
+I just have to type a certain key
+sequence here,
+
+00:40:43.040 --> 00:40:45.783
+and here I got a hyperlink
+
+00:40:45.783 --> 00:40:48.269
+that I can copy to my notes,
+
+00:40:48.269 --> 00:40:52.260
+and this hyperlink goes to that section.
+
+00:40:58.240 --> 00:41:02.092
+We have hyperlinks that point to
+specific positions
+
+00:41:02.092 --> 00:41:05.382
+in PDF documents and in video files.
+
+00:41:05.382 --> 00:41:09.119
+Here, this one opens a PDF
+and displays it.
+
+00:41:09.119 --> 00:41:13.920
+This one opens a PDF
+and converts it to text.
+
+00:41:13.920 --> 00:41:18.400
+and this one opens the video in a
+certain position.
+
+00:41:18.400 --> 00:41:20.480
+We also have a way to control
+
+00:41:20.480 --> 00:41:22.079
+shell-like programs.
+
+00:41:22.079 --> 00:41:25.111
+In my presentation of the last year,
+
+00:41:25.111 --> 00:41:28.163
+I spent one third of the presentation
+explaining this,
+
+00:41:28.163 --> 00:41:31.839
+and I think that I gave a very good
+demonstration there.
+
+00:41:31.839 --> 00:41:35.680
+The demonstration is here.
+
+00:41:35.680 --> 00:41:37.908
+We can go to the web page,
+
+00:41:37.908 --> 00:41:41.839
+go to this section of the web page,
+
+00:41:41.839 --> 00:41:47.680
+and start by this point.
+
+00:41:47.680 --> 00:41:55.920
+And here we have an explanation
+and so on. Whatever.
+
+00:41:55.920 --> 00:41:58.720
+I've already mentioned this before.
+
+00:41:59.200 --> 00:42:02.240
+eev comes with a very nice Elisp
+tutorial.
+
+00:42:02.240 --> 00:42:05.599
+So that's it. This is the end of part
+three.
+
+00:42:05.599 --> 00:42:08.103
+So this is the last part of my
+presentation,
+
+00:42:08.103 --> 00:42:10.965
+and it's about the title of the
+presentation.
+
+00:42:10.965 --> 00:42:13.599
+I called the presentation, "Why
+
+00:42:13.599 --> 00:42:16.560
+Most of the Best Features in eev Look
+
+00:42:16.560 --> 00:42:20.480
+Like Five-Minute Hacks." I've already
+
+00:42:20.480 --> 00:42:23.920
+run out of time, so I have to skip this
+
+00:42:23.920 --> 00:42:28.485
+first part here in which
+I describe how
+
+00:42:28.485 --> 00:42:33.440
+I was exposed to several different
+notions of user-friendliness,
+
+00:42:33.440 --> 00:42:35.920
+and how the one that really blew my mind
+
+00:42:35.920 --> 00:42:41.680
+was the one in a certain
+Forth environment.
+
+00:42:41.680 --> 00:42:44.160
+Let me make the long, long story
+
+00:42:44.160 --> 00:42:46.560
+very, very short.
+
+00:42:46.560 --> 00:42:49.280
+In all this process, I switched from
+
+00:42:49.680 --> 00:42:52.960
+the belief that the user was always
+someone else,
+
+00:42:52.960 --> 00:42:55.359
+someone external, and that I always
+
+00:42:55.359 --> 00:42:57.040
+had to write my programs for
+
+00:42:57.040 --> 00:43:00.079
+this external user. I switched
+
+00:43:00.079 --> 00:43:00.173
+from that to the belief
+
+00:43:00.173 --> 00:43:03.200
+that I am the user.
+
+00:43:03.200 --> 00:43:06.319
+I can play with the interface
+that I want.
+
+00:43:06.319 --> 00:43:10.079
+I can write programs
+
+00:43:10.079 --> 00:43:11.786
+that only I am going to understand.
+
+00:43:11.786 --> 00:43:14.240
+I can experiment with
+hundreds of interfaces,
+
+00:43:14.240 --> 00:43:16.079
+select the best ones,
+
+00:43:16.079 --> 00:43:18.720
+document them, and then share them
+
+00:43:18.720 --> 00:43:20.960
+with other people
+
+00:43:20.960 --> 00:43:24.056
+who are also experimenting
+with interfaces
+
+00:43:24.056 --> 00:43:27.050
+in their own ways.
+
+00:43:27.050 --> 00:43:30.879
+So eev has lots of things
+that are user-friendly
+
+00:43:30.879 --> 00:43:34.880
+in these unusual ways that I've
+explained before.
+
+00:43:34.880 --> 00:43:37.160
+If we consider that
+
+00:43:37.160 --> 00:43:40.319
+this notion of user-friendliness
+is valid,
+
+00:43:40.319 --> 00:43:44.651
+then these things that eev implements,
+
+00:43:44.651 --> 00:43:46.904
+they are user-friendly
+and hacker-friendly
+
+00:43:46.904 --> 00:43:48.800
+at the same time.
+
+00:43:48.800 --> 00:43:50.346
+Let me show one example.
+
+00:43:51.119 --> 00:43:56.640
+This is one that really took me only
+five minutes to implement.
+
+00:43:56.640 --> 00:43:59.430
+At one point a few months ago,
+
+00:43:59.430 --> 00:44:05.599
+I discovered that Sacha Chua's weekly
+posts about Emacs News
+
+00:44:05.599 --> 00:44:08.800
+were also being posted to a
+
+00:44:08.800 --> 00:44:12.893
+mailing list that is stored at
+lists.gnu.org,
+
+00:44:12.893 --> 00:44:16.319
+and it's called emacs-tangents.
+
+00:44:16.319 --> 00:44:19.760
+I found a way to create
+
+00:44:19.760 --> 00:44:25.440
+the links to the posts in both places,
+
+00:44:25.440 --> 00:44:28.178
+but I had to use a template for that.
+
+00:44:28.178 --> 00:44:30.640
+So what we are seeing here now
+
+00:44:30.640 --> 00:44:33.221
+is a template with
+the default values.
+
+00:44:33.221 --> 00:44:38.243
+So this means that we have not set the
+year correctly.
+
+00:44:38.243 --> 00:44:40.720
+We have not set the month correctly,
+
+00:44:40.720 --> 00:44:42.173
+or the day correctly,
+
+00:44:42.173 --> 00:44:45.462
+but if we run this sexp here...
+
+00:44:45.462 --> 00:44:48.960
+Let me do something else before...
+
+00:44:48.960 --> 00:44:53.359
+If we run this sexp here,
+
+00:44:53.359 --> 00:45:00.880
+we change some of these entries
+
+00:45:00.880 --> 00:45:05.200
+in the template, and we get
+these links here.
+
+00:45:05.200 --> 00:45:07.719
+They all work. For example,
+
+00:45:07.719 --> 00:45:13.552
+this one opens the blog post in
+Sacha Chua's site,
+
+00:45:13.552 --> 00:45:21.280
+and this one opens it
+in the mailing list.
+
+00:45:21.280 --> 00:45:23.672
+Sometimes I want
+the Org source of that,
+
+00:45:23.672 --> 00:45:26.520
+and the easiest way
+to get the Org source
+
+00:45:26.520 --> 00:45:31.680
+is to look at this link here
+that has an attachment.
+
+00:45:31.680 --> 00:45:35.839
+If I take this link here,
+
+00:45:35.839 --> 00:45:43.342
+and I take this stem that points to the
+attachment, and I put it here,
+
+00:45:43.342 --> 00:45:45.440
+and I generate this page again
+
+00:45:45.440 --> 00:45:50.000
+with all this data,
+then I get a script here
+
+00:45:50.000 --> 00:45:51.673
+that downloads...
+
+00:45:51.673 --> 00:45:54.640
+Let me switch to a smaller font.
+
+00:45:54.640 --> 00:45:58.160
+It downloads this attachment
+
+00:45:58.160 --> 00:46:01.599
+and it renames that attachment to
+something:
+
+00:46:01.599 --> 00:46:06.000
+./emacs-news -- sorry, something's...
+
+00:46:06.000 --> 00:46:10.720
+-emacs-news-something
+
+00:46:10.720 --> 00:46:15.119
+something emacs-news.org here.
+
+00:46:15.119 --> 00:46:16.750
+The file is already here,
+
+00:46:16.750 --> 00:46:18.400
+already with the right name.
+
+00:46:18.400 --> 00:46:22.079
+So I can open it with
+just this hyperlink.
+
+00:46:22.079 --> 00:46:23.780
+Let me go to the big font again.
+
+00:46:25.200 --> 00:46:28.673
+And now I have the Org source
+for that hyperlink--
+
+00:46:28.673 --> 00:46:33.839
+Sorry, for that blog post.
+
+00:46:33.839 --> 00:46:37.911
+And so this one-line thing here
+
+00:46:37.911 --> 00:46:40.960
+is, in a sense,
+
+00:46:40.960 --> 00:46:45.119
+a hyperlink to this blog post
+in all its formats.
+
+00:46:45.119 --> 00:46:48.640
+If I execute this, I get links to
+
+00:46:48.640 --> 00:46:52.000
+all the places where it is posted,
+
+00:46:52.000 --> 00:46:56.000
+and I get a script to
+download the local copy
+
+00:46:56.000 --> 00:47:00.480
+of the Org source of it. And that's it.
+
+00:47:00.480 --> 00:47:02.506
+Well, I'm already out of time,
+
+00:47:02.506 --> 00:47:04.480
+so let me finish here.
+
+00:47:04.480 --> 00:47:10.079
+Thanks. Bye.