|
Warning: this is an htmlized version!
The original is here, and the conversion rules are here. |
% (find-LATEX "2019emacsconf-long.tex")
% (defun c () (interactive) (find-LATEXsh "lualatex -record 2019emacsconf-long.tex" :end))
% (defun d () (interactive) (find-pdf-page "~/LATEX/2019emacsconf-long.pdf"))
% (defun d () (interactive) (find-pdftools-page "~/LATEX/2019emacsconf-long.pdf"))
% (defun e () (interactive) (find-LATEX "2019emacsconf-long.tex"))
% (defun u () (interactive) (find-latex-upload-links "2019emacsconf-long"))
% (setq revert-without-query '("pdf$"))
% (find-pdf-page "~/LATEX/2019emacsconf-long.pdf")
% (find-sh0 "cp -v ~/LATEX/2019emacsconf-long.pdf /tmp/")
% (find-sh0 "cp -v ~/LATEX/2019emacsconf-long.pdf /tmp/pen/")
% file:///home/edrx/LATEX/2019emacsconf-long.pdf
% file:///tmp/2019emacsconf-long.pdf
% file:///tmp/pen/2019emacsconf-long.pdf
% http://angg.twu.net/LATEX/2019emacsconf-long.pdf
% (find-LATEX "2019.mk")
% «.defs» (to "defs")
% «.title-page» (to "title-page")
% «.complements» (to "complements")
% «.short-long» (to "short-long")
% «.short-long-2» (to "short-long-2")
% «.design-decisions» (to "design-decisions")
% «.music» (to "music")
% «.yuck-and-wow» (to "yuck-and-wow")
% «.yuck-and-wow-2» (to "yuck-and-wow-2")
% «.C-h-f» (to "C-h-f")
% «.C-h-f-2» (to "C-h-f-2")
% «.M-h-M-f» (to "M-h-M-f")
% «.M-h-M-f-2» (to "M-h-M-f-2")
% «.playing-with-M-h-M-f» (to "playing-with-M-h-M-f")
% «.M-h-M-f-M-h-M-k» (to "M-h-M-f-M-h-M-k")
% «.M-h-M-f-M-h-M-k-2» (to "M-h-M-f-M-h-M-k-2")
% «.four-ways» (to "four-ways")
% «.wrap» (to "wrap")
% «.wrap-2» (to "wrap-2")
% «.find-here-links» (to "find-here-links")
% «.find-here-links-3» (to "find-here-links-3")
% «.M-h-M-k» (to "M-h-M-k")
% «.links» (to "links")
\documentclass[oneside]{book}
\usepackage[colorlinks,urlcolor=DarkRed]{hyperref} % (find-es "tex" "hyperref")
\usepackage{amsmath}
\usepackage{amsfonts}
\usepackage{amssymb}
\usepackage{pict2e}
\usepackage[x11names,svgnames]{xcolor} % (find-es "tex" "xcolor")
\usepackage{colorweb} % (find-es "tex" "colorweb")
%\usepackage{tikz}
%
% (find-dn6 "preamble6.lua" "preamble0")
%\usepackage{proof} % For derivation trees ("%:" lines)
%\input diagxy % For 2D diagrams ("%D" lines)
%\xyoption{curve} % For the ".curve=" feature in 2D diagrams
%
\usepackage{edrx15} % (find-LATEX "edrx15.sty")
\input edrxaccents.tex % (find-LATEX "edrxaccents.tex")
\input edrxchars.tex % (find-LATEX "edrxchars.tex")
\input edrxheadfoot.tex % (find-LATEX "edrxheadfoot.tex")
\input edrxgac2.tex % (find-LATEX "edrxgac2.tex")
%
% (find-es "tex" "geometry")
\usepackage[paperwidth=11.5cm, paperheight=9cm,
%total={6.5in,4in},
%textwidth=4in, paperwidth=4.5in,
%textheight=5in, paperheight=4.5in,
%a4paper,
top=1.5cm, bottom=.5cm, left=1cm, right=1cm, includefoot
]{geometry}
%
\begin{document}
%\catcode`\^^J=10
%\directlua{dofile "dednat6load.lua"} % (find-LATEX "dednat6load.lua")
% %L dofile "edrxtikz.lua" -- (find-LATEX "edrxtikz.lua")
% %L dofile "edrxpict.lua" -- (find-LATEX "edrxpict.lua")
% \pu
% «defs» (to ".defs")
% (find-LATEX "edrx15.sty" "colors-2019")
\long\def\ColorRed #1{{\color{Red1}#1}}
\long\def\ColorViolet#1{{\color{MagentaVioletLight}#1}}
\long\def\ColorViolet#1{{\color{Violet!50!black}#1}}
\long\def\ColorGreen #1{{\color{SpringDarkHard}#1}}
\long\def\ColorGreen #1{{\color{SpringGreenDark}#1}}
\long\def\ColorGreen #1{{\color{SpringGreen4}#1}}
\long\def\ColorGray #1{{\color{GrayLight}#1}}
\long\def\ColorGray #1{{\color{black!30!white}#1}}
\long\def\ColorShort #1{{\color{SpringGreen4}#1}}
\long\def\ColorLong #1{{\color{Red1}#1}}
% pos-spec colors
% (find-es "tex" "xcolor")
% (find-xcolorpage 17 "2.4 Predefined colors")
% (find-xcolortext 17 "2.4 Predefined colors")
\def\Cnum#1{{\color{magenta}#1}}
\def\Cnum#1{{\color{Red1}#1}}
\def\Cnum#1{{\color{violet}#1}}
\def\Cnum#1{{\color{orange}#1}}
\def\Cstr#1{{\color{violet}#1}}
\def\Cstr#1{{\color{Red1}#1}}
\def\Csex#1{{\color{Red1}#1}}
\def\Clink#1{{\color{Red1}#1}}
% (find-es "tex" "co")
% \co: a low-level way to typeset code; a poor man's "\verb"
\def\cocolor{}
\def\cocolor{\color{DarkGreen!80!black}}
\def\co#1{{%
\cocolor%
\def\%{\char37}%
\def\\{\char92}%
\def\^{\char94}%
\def\~{\char126}%
\tt#1%
}}
\def\qco#1{`\co{#1}'}
\def\qqco#1{``\co{#1}''}
\def\pco#1{\par\co{#1}}
\noedrxfooter % (find-LATEX "edrxheadfoot.tex")
\setlength{\parindent}{0em}
% _____ _ _ _
% |_ _(_) |_| | ___ _ __ __ _ __ _ ___
% | | | | __| |/ _ \ | '_ \ / _` |/ _` |/ _ \
% | | | | |_| | __/ | |_) | (_| | (_| | __/
% |_| |_|\__|_|\___| | .__/ \__,_|\__, |\___|
% |_| |___/
%
% «title-page» (to ".title-page")
% (eclp 1 "title-page")
% (ecl "title-page")
% (find-LATEX "2019ilha-grande-slides.tex" "title-page")
% (find-LATEX "2018vichy-vgms-slides.tex" "title-page")
% (find-TH "emacsconf2019")
\thispagestyle{empty} % (find-es "tex" "thispagestyle")
\begin{center}
\begin{tabular}{c}
{\Large {\bf How to record \ColorRed{executable notes}}} \\[1pt]
{\Large {\bf with \ColorGreen{eev}, and how to}} \\[1pt]
{\Large {\bf \ColorViolet{play them back}}} \\[1pt]
\ColorGray{(talk @ EmacsConf 2019; long version)}
\end{tabular}
\bsk
\begin{tabular}[c]{r}
By: \\
Eduardo Ochs $→$ \\
\ColorGray{(original author)} \\
\\
Selana Ochs $→$ \\
\ColorGray{(recent contributor)} \\
\end{tabular}
\!\!\!\!\!\!\!
\begin{tabular}[c]{c}
$\includegraphics[height=90pt]{2019emacsconf-long-eu-e-selana.jpg}$
\end{tabular}
% \msk
% \url{http://angg.twu.net/\#eev}
\end{center}
\newpage
% ____ _ _
% / ___|___ _ __ ___ _ __ | | ___ _ __ ___ ___ _ __ | |_ ___
% | | / _ \| '_ ` _ \| '_ \| |/ _ \ '_ ` _ \ / _ \ '_ \| __/ __|
% | |__| (_) | | | | | | |_) | | __/ | | | | | __/ | | | |_\__ \
% \____\___/|_| |_| |_| .__/|_|\___|_| |_| |_|\___|_| |_|\__|___/
% |_|
%
% «complements» (to ".complements")
% (eclp 2 "complements")
% (ecl "complements")
{\bf This presentation {\color{red} complements} the short one}
\ssk
My short talk \ColorRed{should have been} a ``lightning talk'',
less than 10 minutes long, but ended up with
almost 20 minutes... I had too much to tell! ${=}($
\ssk
This longer talk complements the short one.
The short one was mainly about:
\ssk
1) how eev appeared (by accident),
% 2) some design decisions,
2) using sexp hyperlinks (with \qco{M-e}),
3) sending lines to shell-like programs (with \qco{<F8>}),
4) navigating the docs and tutorials (with \qco{M-j})
5) an example of ``\ColorRed{playing back}'' executable notes.
\msk
This longer talk is mainly on how to \ColorRed{record}
executable notes (with few keystrokes).
% I prepared two videos for the EmacsConf 2019:
%
% a short one, that \ColorRed{should have been} $<$\,10 minutes,
% but ended up being almost 20 minutes long ${=}($...
% and this longer one, about more advanced topics...
% \ssk
% The next page shows the abstract of my talk(s)
% with the \ColorShort{topics of the short video} in \ColorShort{green}
% and the \ColorLong{topics of the longer video} in \ColorLong{red}.
\newpage
% ____ _ _ ___
% / ___|| |__ ___ _ __| |_ / / | ___ _ __ __ _
% \___ \| '_ \ / _ \| '__| __| / /| |/ _ \| '_ \ / _` |
% ___) | | | | (_) | | | |_ / / | | (_) | | | | (_| |
% |____/|_| |_|\___/|_| \__/_/ |_|\___/|_| |_|\__, |
% |___/
%
% «short-long» (to ".short-long")
% (eclp 3 "short-long")
% (ecl "short-long")
% {\bf The themes of the \ColorShort{short video} and the \ColorLong{long video}}
%
% \ColorGray{The abstract that I submitted was:}
%
% \msk
%
% {\sf
%
% 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 \ColorLong{learn how to switch
% between task and notes without losing focus}. Learning these things
% usually took years.
%
% }
%
% \msk
%
% \ColorGray{(continues in the next page...)}
%
% \newpage
% ____ _ _ ___ ____
% / ___|| |__ ___ _ __| |_ / / | ___ _ __ __ _ |___ \
% \___ \| '_ \ / _ \| '__| __| / /| |/ _ \| '_ \ / _` | __) |
% ___) | | | | (_) | | | |_ / / | | (_) | | | | (_| | / __/
% |____/|_| |_|\___/|_| \__/_/ |_|\___/|_| |_|\__, | |_____|
% |___/
%
% «short-long-2» (to ".short-long-2")
% (eclp 4 "short-long-2")
% (ecl "short-long-2")
% {\bf The themes of the \ColorShort{short video} and the \ColorLong{long video} (2)}
%
% \msk
%
% {\sf
%
% % In this talk I will present a package called ``Eev'' that lets us
% % do a modern version of this [alternating between performing a task
% % an taking fieldnotes about it].
%
% Some of the lower-level modules of eev implement support for
% \ColorShort{many kinds of elisp hyperlinks} and a variant of
% `isend-mode' called `\ColorShort{eepitch}' that lets us select an
% interpreter and send lines of the current buffer to it; on top of
% that it has \ColorLong{tools that let us create and modify elisp
% hyperlinks with very few keystrokes}.
%
% \ssk
%
% I will show \ColorShort{1) how to use the elisp hyperlinks and
% eepitch blocks in already existing notes,} \ColorLong{2) how to
% create elisp hyperlinks and eepitch blocks with very few
% keystrokes,} \ColorLong{3) how to use this to do
% ``task''+``notes'' with just a few more keystrokes than we would
% use to do just "task",} \ColorShort{4) how I've been using this to
% teach Emacs to total beginners.}
%
% }
%
%
% \newpage
% ____ _ _
% | _ \ ___ ___(_) __ _ _ __ __| | ___ ___ ___
% | | | |/ _ \/ __| |/ _` | '_ \ / _` |/ _ \/ __/ __|
% | |_| | __/\__ \ | (_| | | | | | (_| | __/ (__\__ \
% |____/ \___||___/_|\__, |_| |_| \__,_|\___|\___|___/
% |___/
%
% «design-decisions» (to ".design-decisions")
% (eclp 3 "design-decisions")
% (ecl "design-decisions")
{\bf Some design decisions}
Eev appeared (by accident) when I started using
GNU/Linux and Emacs in 1995...
\ssk
Before that I had used MS-DOS for years, and
MS-Windows 3.1 a bit.
\ssk
MS-DOS was bad, GNU/Linux was infinitely better than it.
MS-Windows 3.1 was \ColorRed{infinitely worse} than MS-DOS.
MS-Windows was \ColorRed{``user-friendly'' in a totally flawed way.}
\ssk
When I started to create my own extensions for Emacs
I followed some design principles that were the
\ColorRed{opposite}
{\footnotesize
\phantom{aaaaaaaaaaaaaaaa} \ColorGray{($↑$ Inspired by \ColorGreen{\bf Forth}! Long story!...)}
}
of the ones in MS-Windows 3.1.
\ssk
I wanted something that felt like \ColorRed{a machine whose lid is open.}
\newpage
% __ __ _
% | \/ |_ _ ___(_) ___
% | |\/| | | | / __| |/ __|
% | | | | |_| \__ \ | (__
% |_| |_|\__,_|___/_|\___|
%
% «music» (to ".music")
% (eclp 4 "music")
% (ecl "music")
{\bf Digression: music}
Selana's name is a homage to a Greek psychedelic band,
called Kristi Stassinopoulou. \ColorGray{($←$ I'm a great fan of them)}
\ssk
...so: I listened to lots of Greek music, then
some Byzantine music, some arabic music...
\ssk
...weird scales $→$ weird \ColorRed{tunings}.
\ssk
People have different reactions when they listen to arabic
music for the first time: some people say ``WOW'',
some other people say ``Yuck! This is \ColorRed{OUT OF TUNE!}''
\newpage
% __ __ _ _
% \ \ / / _ ___| | __ __ _ _ __ __| | __ _______ __
% \ V / | | |/ __| |/ / / _` | '_ \ / _` | \ \ /\ / / _ \ \ /\ / /
% | || |_| | (__| < | (_| | | | | (_| | \ V V / (_) \ V V /
% |_| \__,_|\___|_|\_\ \__,_|_| |_|\__,_| \_/\_/ \___/ \_/\_/
%
% «yuck-and-wow» (to ".yuck-and-wow")
% (eclp 5 "yuck-and-wow")
% (ecl "yuck-and-wow")
{\bf Yuck vs.\ Wow}
\ssk
It's the same thing with \ColorRed{computer interfaces.}
For some people eev is ``Wow!'', for other people it is ``Yuck!''
I'm trying to find more ``Wow people''.
\msk
Eev has a ``sexp-based interface'' (based on plain text!)...
\newpage
% __ __ _ _ ____
% \ \ / / _ ___| | __ __ _ _ __ __| | __ _______ __ |___ \
% \ V / | | |/ __| |/ / / _` | '_ \ / _` | \ \ /\ / / _ \ \ /\ / / __) |
% | || |_| | (__| < | (_| | | | | (_| | \ V V / (_) \ V V / / __/
% |_| \__,_|\___|_|\_\ \__,_|_| |_|\__,_| \_/\_/ \___/ \_/\_/ |_____|
%
% «yuck-and-wow-2» (to ".yuck-and-wow-2")
% (eclp 6 "yuck-and-wow-2")
% (ecl "yuck-and-wow-2")
{\bf Yuck vs.\ Wow (2)}
\ssk
Some people react to music in strange tunings with ``Wow'',
some people react with ``Yuck, this is out of tune''...
\msk
The people that say that sexp-based interfaces are ``Yucky''
usually justify this by saying that sexp-based interfaces are:
\ssk
\begin{tabular}{ll}
1. & ugly (no icons, no colors) \\
2. & too technical / scary \\
& (the code and details ``should be hidden'') \\
3. & not user-friendly / weird / wrong \\
& (different from what they see everywhere) \\
\end{tabular}
\newpage
% ____ _ __
% / ___| | |__ / _|
% | | _____| '_ \ | |_
% | |__|_____| | | | | _|
% \____| |_| |_| |_|
%
% «C-h-f» (to ".C-h-f")
% (eclp 7 "C-h-f")
% (ecl "C-h-f")
{\bf Motivation: \qco{C-h f} is hacker-unfriendly}
% (find-epp (assoc (symbol-file 'set-mark-command 'defun) load-history))
% (find-efunctiondescr 'open-line)
If we type \qco{C-h f open-line} we get a \qco{*Help*} buffer
with this, where the red parts are hyperlinks...
\bsk
{\scriptsize
\pco{open-line is an interactive compiled Lisp function in `\Clink{simple.el}'.}
\pco{\ }
\pco{It is bound to C-o, <insertline>.}
\pco{\ }
\pco{(open-line N)}
\pco{\ }
\pco{\ \ Probably introduced at or before Emacs version \Clink{19.29}.}
\pco{\ }
\pco{Insert a newline and leave point before it.}
\pco{If there is a fill prefix and/or a `\Clink{left-margin}', insert them on}
\pco{the new line if the line would have been blank.}
\pco{With arg N, insert N newlines.}
}
\newpage
% ____ _ __ ____
% / ___| | |__ / _| |___ \
% | | _____| '_ \ | |_ __) |
% | |__|_____| | | | | _| / __/
% \____| |_| |_| |_| |_____|
%
% «C-h-f-2» (to ".C-h-f-2")
% (eclp 8 "C-h-f-2")
% (ecl "C-h-f-2")
{\bf Motivation: \qco{C-h f} is hacker-unfriendly (2)}
\ssk
\qco{C-h f} runs \qco{describe-function},
that is a \ColorRed{biiiiiiiiiiiiiiiiiiiiiiiiiiig} function...
\msk
I found \qco{describe-function} difficult to understand
and to modify, and even worse, it took me \ColorRed{YEARS}
\ColorGray{(because I am a bad programmer with bad social skills)}
to find ways to recreate its hyperlinks to
\qco{\Clink{simple.el}},
\qco{\Clink{19.29}}, and
\qco{\Clink{left-margin}}
into my own notes...
\newpage
% __ __ _ __ __ __
% | \/ | | |__ | \/ | / _|
% | |\/| |_____| '_ \ | |\/| |_____| |_
% | | | |_____| | | | | | | |_____| _|
% |_| |_| |_| |_| |_| |_| |_|
%
% «M-h-M-f» (to ".M-h-M-f")
% (eclp 9 "M-h-M-f")
% (ecl "M-h-M-f")
{\bf Eev's variant of \qco{C-h f}}
\ssk
\begin{tabular}{llll}
\qco{C-h f} &$→$& \qco{describe-function} & (Emacs) \\
\qco{M-h M-f} &$→$& \qco{find-efunction-links} & (Eev) \\
\end{tabular}
\msk
\qco{M-h M-f open-line} creates a \ColorRed{read-write} buffer
called \qco{*Elisp hyperlinks*} containing this...
\newpage
% __ __ _ __ __ __ ____
% | \/ | | |__ | \/ | / _| |___ \
% | |\/| |_____| '_ \ | |\/| |_____| |_ __) |
% | | | |_____| | | | | | | |_____| _| / __/
% |_| |_| |_| |_| |_| |_| |_| |_____|
%
% «M-h-M-f-2» (to ".M-h-M-f-2")
% (eclp 10 "M-h-M-f-2")
% (ecl "M-h-M-f-2")
% (This slide doesn't have a title)
{\scriptsize
\pco{\# (find-efunction-links 'open-line)}
\pco{\# (eek "M-h M-f open-line")}
\pco{\# (find-eev-quick-intro "4.2. `find-ekey-links' and friends")}
\pco{\ }
\pco{\# (find-efunctiondescr 'open-line)}
\pco{\# (find-efunction 'open-line)}
\pco{\# (find-efunctionpp 'open-line)}
\pco{\# (find-efunctiond 'open-line)}
\pco{\ }
\pco{\# (Info-goto-emacs-command-node 'open-line)}
\pco{\# (find-enode "Command Index" "* open-line:")}
\pco{\# (find-elnode "Index" "* open-line:")}
\pco{\ }
\pco{\# (where-is 'open-line)}
\pco{\# (symbol-file 'open-line 'defun)}
\pco{\# (find-fline (symbol-file 'open-line 'defun))}
\pco{\# (find-epp (assoc (symbol-file 'open-line 'defun) load-history))}
\pco{\# (find-estring (mapconcat 'identity (mapcar 'car load-history) "\\n"))}
\pco{\# (find-estring (documentation 'open-line))}
\pco{\# (find-estring (documentation 'open-line t))}
\pco{\# (describe-function 'open-line)}
}
\newpage
% __ __ _ __ __ __ _____
% | \/ | | |__ | \/ | / _| |___ /
% | |\/| |_____| '_ \ | |\/| |_____| |_ |_ \
% | | | |_____| | | | | | | |_____| _| ___) |
% |_| |_| |_| |_| |_| |_| |_| |____/
%
% «playing-with-M-h-M-f» (to ".playing-with-M-h-M-f")
% (eclp 11 "playing-with-M-h-M-f")
% (ecl "playing-with-M-h-M-f")
{\bf Playing with \qco{M-h M-f}}
\ssk
All the hyperlinks in page created by \qco{M-h M-f open-line}
are \ColorRed{safe}! Follow them with \qco{M-e} to see what they do.
Some of them are too technical, like these...
\msk
{\scriptsize
\pco{\# (find-efunctionpp 'open-line)}
\pco{\# (find-efunctiond 'open-line)}
\pco{\# (symbol-file 'open-line 'defun)}
\pco{\# (find-epp (assoc (symbol-file 'open-line 'defun) load-history))}
\pco{\# (find-estring (mapconcat 'identity (mapcar 'car load-history) "\\n"))}
}
\msk
...but you can put the cursor on the name of
the mysterious functions in them and type
\qco{M-h M-f RET} to understand them...
\msk
\ColorRed{...and all these links are copy-and-pasteable,
because they are plain text!}
\newpage
% __ __ _ __ __ __ _ _
% | \/ | | |__ | \/ | / _| | || |
% | |\/| |_____| '_ \ | |\/| |_____| |_ | || |_
% | | | |_____| | | | | | | |_____| _| |__ _|
% |_| |_| |_| |_| |_| |_| |_| |_|
%
% «M-h-M-f-M-h-M-k» (to ".M-h-M-f-M-h-M-k")
% (eclp 12 "M-h-M-f-M-h-M-k")
% (ecl "M-h-M-f-M-h-M-k")
% (eek "M-h M-f open-line")
% (eek "M-h M-k C-o ;; open-line")
% (find-eev-quick-intro "4.2. `find-ekey-links' and friends")
{\bf \qco{M-h M-f}, \qco{M-h M-k}, and friends}
\ssk
\begin{tabular}{llll}
\qco{C-h f} &$→$& \qco{describe-function} & (Emacs) \\
\qco{C-h k} &$→$& \qco{describe-key} & (Emacs) \\
\qco{M-h M-f} &$→$& \qco{find-efunction-links} & (Eev) \\
\qco{M-h M-k} &$→$& \qco{find-ekey-links} & (Eev) \\
\end{tabular}
\msk
The main tutorial has a demo:
\msk
{\footnotesize
\pco{(find-eev-quick-intro "4.2. `find-ekey-links' and friends")}
\pco{(eek "M-h M-f\ \ open-line")}
\pco{(eek "M-h M-k\ \ C-o\ \ ;; open-line")}
}
\msk
Functions like these are \ColorRed{very} easy to write.
Over the years I wrote \ColorRed{hundreds} of them,
and \ColorRed{a few of them} were assigned to keys
and added to eev...
% (find-eapropos "find-.*-links")
% (find-efunctiondescr 'find-here-links)
% (find-efunction 'find-here-links)
\newpage
% «M-h-M-f-M-h-M-k-2» (to ".M-h-M-f-M-h-M-k-2")
% (eclp 13 "M-h-M-f-M-h-M-k-2")
% (ecl "M-h-M-f-M-h-M-k-2")
{\bf \qco{M-h M-f}, \qco{M-h M-k}, and friends (2)}
\ssk
...then I found a way to \ColorRed{sort of} bind fifteen
of these \qco{find-*-links} functions to a single
function and key: \qco{find-here-links}, \qco{M-h M-h}.
\msk
But let me explain the ``wrapping functions'' first.
\newpage
% _____
% | ___|__ _ _ _ __ __ ____ _ _ _ ___
% | |_ / _ \| | | | '__| \ \ /\ / / _` | | | / __|
% | _| (_) | |_| | | \ V V / (_| | |_| \__ \
% |_| \___/ \__,_|_| \_/\_/ \__,_|\__, |___/
% |___/
%
% «four-ways» (to ".four-ways")
% (eclp 14 "four-ways")
% (ecl "four-ways")
{\bf Four ways of generating elisp hyperlinks}
Eev has four \ColorRed{basic} ways to generate elisp hyperlinks
with few keystrokes:
(we just saw the {\bf Way 1})
\ssk
\begin{tabular}{ll}
1. & \qco{find-efunction-links} and friends \\
& (\qco{M-h M-f}, \qco{M-h M-k}, $\ldots$) \\
2. & The \qco{eewrap-*} functions \\
& (\qco{M-F}, \qco{M-M}, \qco{M-S}, $\ldots$) \\
3. & \qco{find-here-links} (\qco{M-h M-h}) \\
& that integrates 18 \qco{find-*-links} functions \\
4. & \qco{find-pdf-links} (\qco{M-h M-p}) \\
\end{tabular}
\bsk
% 18 subcases:
% (find-efunction 'ee-find-here-links)
\newpage
% __ __
% \ \ / / __ __ _ _ __
% \ \ /\ / / '__/ _` | '_ \
% \ V V /| | | (_| | |_) |
% \_/\_/ |_| \__,_| .__/
% |_|
%
% «wrap» (to ".wrap")
% (eclp 15 "wrap")
% (ecl "wrap")
{\bf Way 2: The \qco{eewrap-*} functions}
\ssk
The \qco{eewrap-*} functions are trivial.
The docstring for \qco{eev-mode} says this:
\msk
{\footnotesize
\pco{Commands to convert the current line into hyperlinks:}
\pco{\ \ M-F -- wrap its contents in a `find-fline'}
\pco{\ \ M-M -- wrap its contents in a `find-man'}
\pco{\ \ M-S -- wrap its contents in a `find-sh'}
\pco{\ \ (...)}
\pco{\ \ (Variants:)}
\pco{\ \ M-T -- generate an "\ColorRed{*} (eepitch-\{xxx,kill,xxx\})" block}
\pco{\ \ M-D -- wrap its contents in three Debian hyperlinks}
\pco{\ \ M-R -- make a rm/mkdir/cd triple}
\pco{\ \ M-J -- make a ‘(defun eejump-N ...)’ from N and a hyperlink}
}
\newpage
% __ __ ____
% \ \ / / __ __ _ _ __ |___ \
% \ \ /\ / / '__/ _` | '_ \ __) |
% \ V V /| | | (_| | |_) | / __/
% \_/\_/ |_| \__,_| .__/ |_____|
% |_|
%
% «wrap-2» (to ".wrap-2")
% (eclp 18 "wrap-2")
% (ecl "wrap-2")
{\bf Way 2: The \qco{eewrap-*} functions (2)}
\ssk
Demo:
\msk
{\footnotesize
\pco{(find-wrap-intro "3. <M-F>: hyperlink to a file or a directory")}
\pco{(find-wrap-intro "4. <M-S>:" "to the output of a shell command")}
\pco{(find-wrap-intro "5. <M-M>: hyperlink to a manpage")}
}
% \pco{(find-wrap-intro "4. <M-S>: hyperlink to the output of a shell command")}
\newpage
% __ __ _ __ __ _
% | \/ | | |__ | \/ | | |__
% | |\/| |_____| '_ \ | |\/| |_____| '_ \
% | | | |_____| | | | | | | |_____| | | |
% |_| |_| |_| |_| |_| |_| |_| |_|
%
% «find-here-links» (to ".find-here-links")
% (eclp 17 "find-here-links")
% (ecl "find-here-links")
{\bf Way 3: \qco{find-here-links} (\qco{M-h M-h})}
% (find-here-links-intro "2. \"Here\"")
% (find-efunction 'find-here-links)
% (find-efunction 'ee-find-here-links)
\ssk
Full explanation and demo:
{\footnotesize
\pco{(find-here-links-intro "2. \\"Here\\"")}
}
\ssk
``Here'' means the current Emacs buffer.
Each one of the sexp hyperlinks below opens a
different \ColorRed{kind} of (``target'') buffer:
\msk
{\footnotesize
\pco{(find-eev-quick-intro "4. Creating Elisp Hyperlinks")}
% \pco{(find-emacs-keys-intro "3. Cutting \& pasting")}
\pco{(find-fline "\~/")}
\pco{(find-eevfile "")}
\pco{(find-eevfile "eev-blinks.el")}
\pco{(find-efunctiondescr 'find-file)}
\pco{(find-enode "Modes")}
% \pco{(find-elnode "Defining Functions" "(defun foo () 5)")}
\pco{(find-man "date")}
}
\msk
\qco{find-here-links}s recognizes 17 \ColorRed{kinds} of buffers and
behaves accordingly...
\newpage
% __ __ _ __ __ _____
% | \/ | | |__ | \/ | |___ /
% | |\/| |_____| '_ \ | |\/| |_____ |_ \
% | | | |_____| | | | | | | |_____|__) |
% |_| |_| |_| |_| |_| |_| |____/
%
% «find-here-links-3» (to ".find-here-links-3")
% (eclp 16 "find-here-links-3")
% (ecl "find-here-links-3")
% (find-here-links-intro "4. `find-here-links-3'")
{\bf Way 3 for beginners}
\ssk
When I teach eev to people who are just starting with Emacs
I make them start with \qco{find-here-links-3} (\qco{M-h M-3}),
that saves the current window setting and creates a
3-window setting like the one below...
\qco{find-here-links-1} (\qco{M-h M-1}) restores the
previous window setting.
% (find-es "tex" "vskip")
\vspace{-5pt}
{\footnotesize
\begin{verbatim}
_____________________
| | |
| | elinks |
| here/ | buffer |
| target |__________|
| buffer | |
| | notes |
| | buffer |
|__________|__________|
\end{verbatim}
}
\newpage
% (find-here-links-intro "4. `find-here-links-3'")
{\bf Way 4: \qco{find-pdf-links} (\qco{M-h M-p})}
\newpage
% _ _ _
% | | (_)_ __ | | _____
% | | | | '_ \| |/ / __|
% | |___| | | | | <\__ \
% |_____|_|_| |_|_|\_\___/
%
% «links» (to ".links")
% (eclp 15 "links")
% (ecl "links")
{\bf Links}
% (find-TH "emacsconf2019")
See:
\url{http://angg.twu.net/\#eev}
\url{http://angg.twu.net/emacsconf2019.html}
\url{http://angg.twu.net/e/emacsconf2019.e.html\#long}
\msk
\phantom{aa} \ColorRed{Thank you! $=)$}
\newpage
% https://en.wikipedia.org/wiki/WIMP_(computing)
% https://en.wikipedia.org/wiki/Graphical_user_interface
% https://en.wikipedia.org/wiki/History_of_the_graphical_user_interface
% Links to everything:
%
% \url{http://angg.twu.net/emacsconf2019.html}
% \msk
\end{document}
% Local Variables:
% coding: utf-8-unix
% ee-tla: "ecl"
% End: