(Re)generate: (find-wrap-intro)
Source code: (find-eev "eev-intro.el" "find-wrap-intro")
More intros: (find-eev-quick-intro)
(find-eval-intro)
(find-eepitch-intro)
This buffer is _temporary_ and _editable_.
It is meant as both a tutorial and a sandbox.
Note: this intro needs to be rewritten!
Ideally it should _complement_ the material in:
(find-eev-quick-intro "6.3. Creating eepitch blocks: `M-T'")
(find-eev-quick-intro "8.3. Creating index/section anchor pairs")
(find-eev-quick-intro "8.4. Creating e-script blocks")
1. Eepitch and eev
Eepitch defines only two keys - <F8> and <M-T> - and <M-T> is a
particular case of something more general: "wrapping commands", that
follow these conventions:
1) they are bound to meta-shift-letter keys (M-T, M-F, M-M, ...),
2) they transform the current line and then move down,
3) they produce Lisp code meant to be executed with `M-e' or `F8',
4) they are listed at:
(find-efunctiondescr 'eev-mode "M-F")
5) their keybindings are only available when eev-mode is turned on.
To understand how they work, please follow the instructions below and
try them here. Note that this buffer is a sandbox, and it can be
recreated by executing the sexp "(find-wrap-intro)" at the top.
Note that the wrapping commands are all bound to key sequences of
the form meta-SHIFT-letter - don't forget the shift!!!
2. <M-T>: produce an eepitch block
If you type <M-T> on a line containing just the word "shell" you get
three lines, like this:
* (eepitch-shell)
* (eepitch-kill)
* (eepitch-shell)
We call a block of three lines like this an "eepitch block", and
eepitch blocks can be used to set up interactions with external
programs. Try typing <M-T> on the lines that say "shell" and "python"
below, and use them to send some lines to bash and to a python
interpreter (with <F8>):
bash
export PS1='$PWD% '
cd /tmp/
function ee () { set -v; . /tmp/ee.sh; set +v; }
rm -v /tmp/ee.sh
cat > /tmp/ee.sh <<'%%%'
echo Hello
cd /etc/
%%%
cat /tmp/ee.sh
bash /tmp/ee.sh
ee
python
square = lambda x: x*x
square(5)
3. <M-F>: hyperlink to a file or a directory
If you type <M-F> on the lines below,
/etc/
/tmp/
~/
~/.emacs
you get hyperlinks like these:
# (find-fline "/etc/")
# (find-fline "/tmp/")
# (find-fline "~/")
# (find-fline "~/.emacs")
4. <M-S>: hyperlink to the output of a shell command
If you type <M-S> on a line containing a shell command you get a
hyperlink that starts with `find-sh', and that when followed opens a
temporary buffer with the output of that shell command, like these:
# (find-sh "find --help")
# (find-sh "find /etc | sort")
# (find-sh "find /etc -type d | sort")
# (find-sh "find /etc -type d -maxdepth 1 | sort")
# (find-sh "find /etc -type d -maxdepth 2 | sort")
Try it here:
dict smop
dict 'minor detail'
If you have the packages dict, dictd and dict-jargon installed
these hyperlinks will show you the meaning of the expressions
"smop" and "minor detail".
# (find-sh "dict smop")
# (find-sh "dict 'minor detail'")
5. <M-M>: hyperlink to a manpage
Try <M-M> here:
1 tac
6. All wrapping functions
Try this:
(find-eaproposf "eewrap")
It will show a temporary buffer with hyperlinks like this one,
(find-efunction 'eewrap-find-fline)
that points to the definition of `eewrap-find-fline'. Each
definition of an `eewrap-*' function is preceded by a header that
contains two lines like these ones:
;; Skel: (find-eewrap-links "F" "find-fline" "fname")
;; Test: (find-eewraptest-links "find-fline" "/tmp/foo")
The `find-eewraptest-links' goes to a temporary buffer that
contains a test like this one,
;; (eek "<down> <<eewrap-find-fline>>")
/tmp/foo
that demonstrates a typical use of that `eewrap-*' function.
Here are all the tests copied to a single place:
;; M-A: (find-efunction 'eewrap-anchor)
;; Test: (find-eewraptest-links "anchor" "# <foo>")
;; (eek "<down> <<eewrap-anchor>>")
# <foo>
;; M-C: (find-efunction 'eewrap-code-c-d)
;; Test: (find-eewraptest-links "code-c-d" "CCC /DIR/")
;; (eek "<down> <<eewrap-code-c-d>>")
CCC /DIR/
;; M-D: (find-efunction 'eewrap-debian)
;; Test: (find-eewraptest-links "debian" "bash")
;; (eek "<down> <<eewrap-debian>>")
bash
;; M-J: (find-efunction 'eewrap-eejump)
;; Test 1: (find-eewraptest-links "eejump" "42 (find-fline \"~/TODO\")")
;; (eek "<down> <<eewrap-eejump>>")
42 (find-fline "~/TODO")
;; M-J: (find-efunction 'eewrap-eejump)
;; Test 2: (find-eewraptest-links "eejump" "todo (find-fline \"~/TODO\")")
;; (eek "<down> <<eewrap-eejump>>")
todo (find-fline "~/TODO")
;; M-F: (find-efunction 'eewrap-find-fline)
;; Test: (find-eewraptest-links "find-fline" "/tmp/foo")
;; (eek "<down> <<eewrap-find-fline>>")
/tmp/foo
;; M-M: (find-efunction 'eewrap-man)
;; Test: (find-eewraptest-links "man" "1 tac")
;; (eek "<down> <<eewrap-man>>")
1 tac
;; M-P: (find-efunction 'eewrap-pdflike)
;; Test: (find-eewraptest-links "pdflike" "o /tmp/o.pdf")
;; (eek "<down> <<eewrap-pdflike>>")
o /tmp/o.pdf
;; M-R: (find-efunction 'eewrap-rm/mkdir/cd)
;; Test: (find-eewraptest-links "rm/mkdir/cd" "/tmp/foo/")
;; (eek "<down> <<eewrap-rm/mkdir/cd>>")
/tmp/foo/
;; M-S: (find-efunction 'eewrap-sh)
;; Test: (find-eewraptest-links "sh" "dict smop")
;; (eek "<down> <<eewrap-sh>>")
dict smop
;; M-T: (find-efunction 'eewrap-eepitch)
;; Test: (find-eewraptest-links "eepitch" "shell")
;; (eek "<down> <<eewrap-eepitch>>")
shell
;; M-V: (find-efunction 'eewrap-audiovideo)
;; Test: (find-eewraptest-links "audiovideo" "ovideo /tmp/o.mp4")
;; (eek "<down> <<eewrap-audiovideo>>")
ovideo /tmp/o.mp4
;; M-Z: (find-efunction 'eewrap-zsh)
;; Test: (find-eewraptest-links "zsh" "echo $SHELL")
;; (eek "<down> <<eewrap-zsh>>")
echo $SHELL
;; M-#: (find-efunction 'eewrap-two-eepitches)
;; Test: (find-eewraptest-links "two-eepitches" "shell python")
;; (eek "<down> <<eewrap-two-eepitches>>")
shell python
The bindings for `M-Z' and `M-#' are not active by default. See:
(find-eev "eev-mode.el" "eev-mode-map-set" "M-Z" "eewrap-zsh")
(find-eev "eev-mode.el" "eev-mode-map-set" "M-#" "eewrap-two-eepitches")
7. Wrapping functions generate hyperlinks
...this is a slogan - a huge idea, in a very shortened form. In its
full form, that would be:
(Some) wrapping function provide one of the basic ways to produce
elisp hyperlinks quickly; the second basic way, which is a bit more
complex conceptually, is via Elisp hyperlinks buffers. This, and the
whole rationale behind generating and using elisp hyperlinks, is
explained here:
(find-links-intro "Elisp hyperlinks buffers")
The "some" in beginning of the long version of the slogan, above, is
because a few of the wrapping commands, for example, <M-T> and <M-R>,
are used to produce things that are not hyperlinks - usually other
kinds of scripts.