Eev @ EmacsConf 2019
This is what I presented at the EmacsConf 2019.
The slides of my presentation are here.
Its video is here.
Here are links to the list of all talks in the conference and to my talk in it.
How to record executable notes with eev - and how to play them
In the old times we would take notes about a task - think on
fieldnotes - by using paper notebooks. Nothing was automatic then:
we had to decide what to write and how to write it, we had to switch
between "task" and "notes", we had to learn how to write both
readably and concisely, and we had to learn how to switch between
task and notes without losing focus. Learning these things usually
In this talk I will present a package called "Eev" that lets us
do a modern version of this. Some of its lower-level modules
implement support for many kinds of elisp hyperlinks and a variant
of `isend-mode' called `eepitch' that lets us select an interpreter
and send lines of the current buffer to it; on top of that it has
tools that let us create and modify elisp hyperlinks with very few
keystrokes. I will show 1) how to use the elisp hyperlinks and
eepitch blocks in already existing notes, 2) how to create elisp
hyperlinks and eepitch blocks with very few keystrokes, 3) how to
use this to do "task"+"notes" with just a few more keystrokes than
we would use to do just "task", 4) how I've been using this to teach
Emacs to total beginners.
The Eev homepage is at <http://angg.twu.net/#eev>.
The EmacsConf 2019 was a virtual conference (modulo satellite
events at Zurich and Boston), and most people prerecorded their presentations. I told the
organizers that I would record a short presentation and a long one,
but I never finished the long one... so my "short presentation" ended
up being my "only presentation".
My "short presentation" was focused on the history of eev, on some
design decisions, and on the items 1 and 4 of the abstract above:
1) how to use the elisp hyperlinks and eepitch blocks in already
4) how I've been using this to teach Emacs to
It ended with an analysis of my executable notes on patching xpdf.
You can watch the video of
my presentation on Youtube by clicking on the screenshot below,
...but the version on youtube is a bit blurry - this is because I
edited it with Blender, and Blender reencoded it in a bad way. In
dec/2020 I learned how to use ffmpeg to cut and join its raw parts (my
e-scripts on this are here), and I produced a version with a much better quality. One way
to watch it in high quality is to run the two "wget"s and the "mpv" below; this will download the video and its subtitles, and play
it with mpv - and then you can use these keys to play it in high speed.
Links to some points of the video:
0:00 Title page
0:15 Prehistory 1: eev appeared by accident
1:08 Prehistory 2: my notes started to have lots of elisp hyperlinks
2:35 Prehistory 3: M-x eev
3:04 Prehistory 4: several other kinds of elisp kyperlinks
4:05 Prehistory 5: these elisp hyperlinks could be put in comments
5:34 Prehistory 6: variants of M-x eev
5:41 Prehistory 7: several megabytes of scripts and notes
6:41 Prehistory 8: I was sure that everybody was using Emacs like that
7:52 Prehistory 9: "users should not be forced to see Lisp"
9:22 Eev as an ELPA package
10:51 Eev as an ELPA package (2)
11:20 M-j - and
how beginners should use it
12:54 A demo
13:10 Demo: patching xpdf
14:01 Demo: the `find-man' links
14:45 Demo: the `find-apt-get-source-links'
15:11 Demo: the eepitch block (in red star lines)
15:48 Demo: eepitch on non-red star lines
15:56 Demo: eepitch in action
16:47 Demo: the `find-fline's to the source directory
17:07 Demo: `code-c-d'
17:22 Demo: `find-xpdffile'
17:32 Demo: `find-xpdfsh'
17:44 Demo: `find-xpdfgrep'
18:32 Demo: the second `find-xpdfgrep'
18:46 Demo: the relevant occurrence / direct link to it
A transcription of what I say in the final part (i.e., in the demo):
13:11 Let me show you an example of "executable notes and how to play them back".
13:18 I will only be able to explain how to _record_ these executable notes in the longer video.
13:25 Anyway: when I was recording this video I realized that xpdf was behaving in a very annoying way -
13:34 it was changing the page in moments that I didn't want it to...
13:39 and the problem was that when my finger was at the right side of the touchpad
13:45 and I moved it up or down this would be interpreted as a _mousewheel scroll_,
13:52 that would be interpreted as PageUp or PageDown,
13:57 and I wanted to disable that - I wanted to disable the support for mousewheel scroll in xpdf.
14:01 So I took a look at the man page for xpdf - here -
14:06 I didn't find a simple way to change that by changing a configuration file
14:11 but I found a section that described all the default mouse bindings - here -
14:18 I found a line that seemed to be relevant - this one -
14:21 I created a hyperlink that pointed directly to that line - this one -
14:30 and I also found an explanation for what this function does
14:35 and the explanation says that this function either scrolls up by some pixels
14:41 or it moves to the previous page - which means PageUp.
14:46 So the _quickest_ way to change xpdf - because I was in a hurry -
14:51 was by downloading and recompiling the Debian source with some changes.
14:56 I used this hyperlink here, that uses a template, to generate several links
15:01 and several shell commands for downloading and recompiling a debian source package.
15:08 I copied these lines to my notes with some small changes,
15:15 and this part - here - uses the alternative to M-x eev...
15:20 remember that I said that my old way of sending lines to the shell was by using M-x eev,
15:27 that was very clumsy: it needed several keystrokes, and it was difficult to install
15:34 because we would need to change an rcfile.
15:38 So, the new alternative to it uses just <f8>,
15:43 that behaves in one way in lines that start with a red star - like these ones -
15:49 and in another way in lines that do not start with a red star.
15:54 Let me change the font to a smaller one to show how it works.
16:00 If I type <f8> in these three lines - here -
16:03 this will set up a target buffer - here - running a shell,
16:08 and if I type <f8> in these lines - here - this will send these commands to the shell.
16:14 This command, in particular, it downloads - sorry, it _makes sure_ that I have
16:20 all the Debian packages that I need to be able to compile the source for xpdf,
16:27 and this command - here - downloads the source package for xpdf
16:34 and unpacks it. It takes a few seconds - here.
16:40 I do not want to execute this thing now - this thing would recompile the source.
16:49 So, this hyperlink - here - opens this temporary directory,
16:54 and it turns out that the source package was unpacked in this subdirectory - here -
17:04 so this hyperlink points to the subdirectory,
17:07 and this s-expression - here - defines several shorter hyperlinks with "find-xpdf" in their names
17:17 that operate in this subdirectory - here.
17:22 So, this hyperlink - here - opens that directory,
17:30 this one - here - runs these shell commands in that directory
17:37 to list all the files - remember that I haven't compiled anything yet,
17:41 so all these files belong to the source package,
17:46 and this one is much more interesting - it runs a grep in that directory.
17:51 Remember that I discovered that the name of the mouse event that was bound to
17:57 PageUp, or to the _bad_ PageUp in the bad PageDown,
18:02 was MousePress4 (and MousePress5)...
18:06 So this grep here searches for all the occurrences of MousePress4
18:12 in the source... and it shows that there are only two occurrences,
18:18 one of them in the source for the man page and the other one
18:22 in the rendered version of that source, which is not good...
18:27 Let me change to the bigger font again.
18:31 So I decided to search for the function that was associated to that mouse event -
18:39 this function here - and I found several occurrences of that string,
18:45 and it turned out that _this_ is a relevant occurrence,
18:49 so I created a direct link to that source file,
18:53 and I discovered that if I commented out these lines by hand
19:03 and recompiled everything and installed the new debian binary package
19:09 then I would get an xpdf that does not have the annoying behavior. But...
19:15 That's it.
There's a transcript of the first part here.
My longer presentation:
The video mentions a longer presentation - that I never finished.
I only wrote a first version of
some of its slides.
The longer presentation would complement the shorter one, and
would be mainly about:
2) how to create elisp hyperlinks and eepitch blocks with very few keystrokes,
3) how to use this to do "task"+"notes" with just a few more
keystrokes than we would use to do just "task",
how to switch between "task" and "notes" without losing focus,
other design decisions - like the sexp-based interface - and why
some people hate them.
On integrating eev and Org
After the conference I started to work on this:
and these threads: 2013-11, 2019-11.