Warning: this is an htmlized version!
The original is across this link,
and the conversion rules are here.
(Re)generate: (find-videos-intro)
Source code:  (find-efunction 'find-videos-intro)
More intros:  (find-eev-intro)
This buffer is _temporary_ and _editable_.
Is is meant as both a tutorial and a sandbox.

What we have now
I am producing a series of videos about eev - but at this moment
only two very broad introductions are ready 8-(. I have plans for
several short videos about specific usage patterns, but don't
hold your breath yet... also, these are my first videos EVER - so
please excuse any stutterings, hesitations and false starts...

The videos are uploaded to Youtube to make them very easy to
find, but Youtube reduces the resolution of the original videos
and makes them blurry and almost unreadable - so the best way to
watch them is to fetch local copies of the high-res .mp4 files.

Downloading local copies
Here are direct links to both the low-res versions at Youtube
and to the corresponding high-res ".mp4"s:

  Eepitch: a way to control shell-like programs from Emacs

  An introduction to eev2 (2012nov11)

(The video about eepitch is shorter and far better than the
other one - please start by it.)

The ideas behind "local copies" are here:


These sexps generate the download scripts in temporary buffers:

  (find-eev-video-links "eepitchvideo" "video4-eepitch" "Lj_zKC5BR64")
  (find-eev-video-links "eevvideo"     "video2"         "doeyn5MOaB8")

Hyperlinks to the local copies of the videos
Notice that the download scripts above contain these sexps:

(code-video "eepitchvideo" "$S/http/angg.twu.net/eev-videos/video4-eepitch.mp4")
(code-video "eevvideo"     "$S/http/angg.twu.net/eev-videos/video2.mp4")

After you execute them hyperlinks like these should work:


Note that they use mplayer to display the videos, and if you
don't have mplayer - or if you haven't downloaded the ".mp4"s -
then you will get error messages in the "*Messages*" buffer.
You can inspect them with `C-x b *Messages*' or with:

  (find-ebuffer "*Messages*")

Hyperlinks to positions
The first argument to `find-eepitchvideo' and to other similar
functions is a time offset; it is optional, and it defaults to
"0:00". Any further arguments are ignored, and this allows us
to use them as comments. So these two sexps are equivalent:

  (find-eepitchvideo "0:16")
  (find-eepitchvideo "0:16" "the eepitch-to-shell-and-python example")

We could use a series of `find-eepitchvideo' sexps to create a
"table of contents" for a video, similarly to what we do for
written documents...

Time offsets as hyperlinks to positions
In some cases using sexps creates too much visual clutter, and we
would like to be able to create an index or table of contents
writing lines just like this,

  0:16  the eepitch-to-shell-and-python example

instead of using explicit elisp hyperlinks.

There is a way to do this, but it is tricky. It involves
activating a mode, called `eev-avadj-mode', in which `M-p' is
bound to a command that locates the first thing looking like a
time offset in the current line, and calls the video player to
make it play the *current default video* starting from that time
offset; a sexp like

  (find-eepitchvideo t)

just sets the current default video, but does not invoke the
player. All this is explained here:

  (find-audiovideo-intro "The time-from-bol")

Eepitch video: table of contents
(eev-avadj-mode 1)
(find-eepitchvideo t)

0:16 the eepitch-to-shell-and-python example, very quickly
1:18 executing eepitch scripts with `f8's; f8 on red star lines and normal lines
2:33 the eepitch-to-shell-and-python example - what each line does
3:15 the first three lines use advanced features
3:52 eepitch scripts are made to be executed interactively
5:25 the eepitch-to-shell-and-python example again, more slowly

5:58 what happens when the eepitch target is being shown
7:13 the default is to use two windows
7:33 what happens when the target does not exist
8:25 how to send commands to a new shell
8:54 how an eepitch block (like eepitch-shell/kill/shell) works

9:38 an example with shell comments (which eev uses as hyperlinks)
12:35 refining hyperlinks
12:35 converting shell commands into hyperlinks (by wrapping - by hand)
13:04 wrapping commands - bound to meta-uppercase-letters
13:53 M-M wraps the current line into a hyperlink to a manpage
14:12 demonstrating M-M, M-S and M-T with eek sexps
14:40 M-T wraps the current linto an eepitch-xxx/kill/xxx triple
15:47 introduction to the sandboxed tutorials and to M-j (eejump)
16:17 the default numeric arguments for eejump
16:35 M-5 M-j jumps to the index for the documentation for eev
17:15 temp. eev buffers usually start with a sexp that regenerates the buffer
18:23 where the eepitch-to-shell-and-python example is in the documentation

18:58 Other examples
19:07 pdf-like documents 
20:43 a tutorial for Lua based on eepitch
22:26 that's it - last comments, where to find more info, how to get in touch

Eev video: table of contents
(eev-avadj-mode 1)
(find-eevvideo t)

 0:00 introduction
 2:45 unpack the tarball and invoke Emacs
 5:07 and make the cursor stop blinking

 5:11 Emacs as a Lisp environment
11:48 Open the file "VERSION" (TAB completes)
12:15 (eek "C-x C-f VERSION") is not very readable
12:35 (find-file ".../VERSION") is more readable
12:43 to follow it we type M-e, and M-k to go back
14:00 parts for humans and more or less for humans; passive sexps
14:34 variations of M-e that split the screen
15:09 left side is "before", right side is "after"

16:00 help on a key sequence
16:28 C-h k gives us help on a key sequence
17:46 (eek "C-h k  C-x C-f") is an unreadble way to get help on a key
17:55 (describe-function 'find-file) is even messier
18:28 (find-efunctiondescr 'find-file) is cleaner - and why

20:14 introduction the eev documentation in "intro"s
22:30 (eek "M-h M-k  C-x C-f") generates a list of hyperlinks
24:15 the first line regenerates the buffer
24:40 the intros are temporary buffers
25:07 we can play without destroying the documentation of eev
25:40 we can copy the hyperlinks to intros to other places

25:53 introduction to eejump
26:44 a plain M-j goes to the index of eejumps
28:00 M-5 M-j goes to the top level of the documentation in intros
28:22 M-2 M-j goes to (find-emacs-intro)
28:36 ...which has lots of links to the emacs manuals

28:54 (find-eev-update-links)
29:47 I could have done that with just instructions in English
30:01 ...but it was more interesting to do that in an executable way.
30:21 remember that the first line regenerates the buffer...
31:07 we use that to select a directory for installation.
31:40 an eepitch block
31:53 emacs is made to handle anyting that looks like text...
32:38 running terminals inside Emacs
32:52 the best of both worlds
33:50 f8
35:48 [oops - I forgot to unpack]

In Portuguese

  (find-eev-video-links "eevvideopt" "video2pt"       "yztYD9Y7Iz4")
  (code-video "eevvideopt" "$S/http/angg.twu.net/eev-videos/video2pt.mp4")
  (eev-avadj-mode 1)
  (find-eevvideopt t)

;; (find-eepitchvideo)
;; (find-eevvideo)
;; (find-eevvideopt)

Comparison with youtube
Note that Youtube has a trick that lets we use URLs that point to
specific positions in videos. For example, this,


makes the video about eepitch start at 0:16 instead of from the
beginning. Also, each video at Youtube can have uploader comments
and a discussion, and in the text of these comments things like
"12:34" become links that make the current video skip to that


Video2pt: Uma introducao ao eev2 (2012nov15)
This is a version in Portuguese of the video above.
It is slightly longer than the version in English because it's
intended mostly for non-Emacsers, so some things are explained
(much) more slowly...

At youtube: http://www.youtube.com/watch?v=yztYD9Y7Iz4
Hi-res mp4: http://angg.twu.net/eev-videos/video2pt.mp4
            (128228339 bytes, 122MB. Duration: 1:09:42)

# (find-eevvideopt)
# (find-eevvideopt "1:07:40" "eepitch pro shell e pro Python")

Long story short
You may want to copy the block of elisp below to your .emacs. You can
use this sexp to help you:

  (ee-copy-rest 0 '(find-fline "~/.emacs"))

;; Hyperlinks to videos about eev.
;; See: (find-videos-intro)
;; (find-eev-video-links "eepitchvideo" "video4-eepitch" "Lj_zKC5BR64")
;; (find-eev-video-links "eevvideo"     "video2"         "doeyn5MOaB8")
;; (find-eev-video-links "eevvideopt"   "video2pt"       "yztYD9Y7Iz4")
(code-video "eepitchvideo" "$S/http/angg.twu.net/eev-videos/video4-eepitch.mp4")
(code-video "eevvideo"     "$S/http/angg.twu.net/eev-videos/video2.mp4")
(code-video "eevvideopt"   "$S/http/angg.twu.net/eev-videos/video2pt.mp4")
;; (find-eepitchvideo)
;; (find-eevvideo)
;; (find-eevvideopt)
;; (find-ebuffer "*Messages*")