% (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:
