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: