emacs-elpa-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[elpa] externals/eev 8bc3bde 10/10: Merge remote-tracking branch 'eev/UT


From: Stefan Monnier
Subject: [elpa] externals/eev 8bc3bde 10/10: Merge remote-tracking branch 'eev/UTF-8' into externals/eev
Date: Thu, 7 Nov 2019 23:21:50 -0500 (EST)

branch: externals/eev
commit 8bc3bde8cbaa66fd4009db77d88fcd24875cea44
Merge: 793b495 fa0b485
Author: Stefan Monnier <address@hidden>
Commit: Stefan Monnier <address@hidden>

    Merge remote-tracking branch 'eev/UTF-8' into externals/eev
---
 ChangeLog         |  103 +++++
 VERSION           |    4 +-
 eepitch.el        |  257 +++++++----
 eev-audiovideo.el |   33 +-
 eev-blinks.el     |   24 +-
 eev-brxxx.el      |    8 +-
 eev-edit.el       |    5 +-
 eev-elinks.el     |   69 ++-
 eev-intro.el      | 1285 ++++++++++++++++++++++++++++++++++++++++++++---------
 eev-load.el       |    3 +-
 eev-mode.el       |   20 +-
 eev-pdflike.el    |    6 +-
 eev-plinks.el     |    4 +-
 eev-testblocks.el |  138 ++++++
 eev-tlinks.el     |    6 +-
 eev-wrap.el       |   89 +---
 eev.el            |    2 +-
 17 files changed, 1622 insertions(+), 434 deletions(-)

diff --git a/ChangeLog b/ChangeLog
index 5e2a329..ec98439 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,106 @@
+2019-11-04  Eduardo Ochs  <address@hidden>
+
+       * eev-intro.el (find-org-intro): rewrote everything.
+       (find-eev-intro): added `find-org-intro' to the index.
+
+2019-10-31  Eduardo Ochs  <address@hidden>
+
+       * eev-mode.el (eev-mode-help): small changes.
+
+2019-10-27  Eduardo Ochs  <address@hidden>
+
+       * eev-brxxx.el (brwget): new function.
+
+2019-10-16  Eduardo Ochs  <address@hidden>
+
+       * eev-blinks.el (find-esubstitutecommandkeys): new function.
+       (ee-find-eejumps-header): small changes.
+
+       * eev-mode.el (eev-mode-help): small changes.
+
+2019-10-15  Eduardo Ochs  <address@hidden>
+
+       * eev-intro.el (find-audiovideo-intro): new section: "4.3. A
+       demo".
+
+2019-10-04  Eduardo Ochs  <address@hidden>
+
+       * eev-elinks.el (ee-find-efunction-links): added two links that
+       refer to `load-history'.
+
+       * eev-intro.el (find-brxxx-intro): small changes.
+
+2019-10-03  Eduardo Ochs  <address@hidden>
+
+       * eev-intro.el (find-brxxx-intro): added several new sections.
+
+       * eev-pdflike.el (brpdfl, brpdfd): new functions.
+
+2019-10-02  Eduardo Ochs  <address@hidden>
+
+       * eev-intro.el (find-psne-intro): small changes.
+
+2019-10-01  Eduardo Ochs  <address@hidden>
+
+       * eepitch.el (eepitch-nodejs): new function (thx @Lunks).
+
+2019-09-30  Eduardo Ochs  <address@hidden>
+
+       * eev-intro.el (find-multiwindow-intro): small changes.
+       (find-eev-intro): rearranged the order or the list.
+
+2019-09-29  Eduardo Ochs  <address@hidden>
+
+       * eev-intro.el (find-eepitch-intro): rewrote some sections, added
+       a section about "test blocks".
+       (find-eev-intro): small changes.
+       (find-eev-install-intro): rewrote almost everything.
+
+       * eev-testblocks.el: new file.
+       (eeit, ee-insert-test, ee-insert-test-lua)
+       (ee-insert-test-python, ee-insert-test-ruby, ee-insert-test-sh)
+       (ee-insert-test-tcl): moved all these functions from eev-wrap.el
+       to eev-testblocks.el.
+
+       * eev-load.el: load eev-testblocks.el.
+
+2019-09-28  Eduardo Ochs  <address@hidden>
+
+       * eev-intro.el (find-eev-install-intro): small changes.
+
+2019-09-27  Eduardo Ochs  <address@hidden>
+
+       * eev-elinks.el (ee-file-name-nondirectory-slash): new function.
+       (ee-file-expand-wildcards-slash): new function.
+       (ee-find-epackage-links0): new function.
+       (find-epackage-links): new function.
+       (ee-find-epackage-links): use `ee-find-epackage-links0'.
+
+       * eev-edit.el (ee-tag-re-utf-8): new variable.
+       (ee-tag-re): use `ee-tag-re-utf-8'.
+
+2019-09-26  Eduardo Ochs  <address@hidden>
+
+       * eev-intro.el (find-eev-quick-intro): small changes.
+
+       * eepitch.el: rewrote lots of comments.
+
+2019-09-25  Eduardo Ochs  <address@hidden>
+
+       * eev-intro.el (find-emacs-keys-intro): added links about the mode
+       line.
+
+2019-09-24  Eduardo Ochs  <address@hidden>
+
+       * eev-blinks.el (ee-find-eejumps-header): small changes in the
+       header.
+
+       * eev-intro.el (find-eepitch-intro): rewrote most of the text.
+
+2019-09-23  Eduardo Ochs  <address@hidden>
+
+       * eev-tlinks.el (find-debpkg-links): added links to Sid.
+
 2019-08-29  Eduardo Ochs  <address@hidden>
 
        * eev-edit.el (ee-copy-this-line-to-kill-ring): use
diff --git a/VERSION b/VERSION
index 46e3e96..0b5d362 100644
--- a/VERSION
+++ b/VERSION
@@ -1,2 +1,2 @@
-Sun Sep  1 15:53:05 GMT 2019
-Sun Sep  1 16:53:05 BST 2019
+Tue Nov  5 20:01:03 GMT 2019
+Tue Nov  5 17:01:03 -03 2019
diff --git a/eepitch.el b/eepitch.el
index 54e801c..04cecbc 100644
--- a/eepitch.el
+++ b/eepitch.el
@@ -1,6 +1,6 @@
 ;; eepitch.el - record interactions with shells as readable notes, redo tasks.
 
-;; Copyright (C) 2012,2015,2018 Free Software Foundation, Inc.
+;; Copyright (C) 2012,2015,2018,2019 Free Software Foundation, Inc.
 ;;
 ;; This file is part of GNU eev.
 ;;
@@ -19,7 +19,7 @@
 ;;
 ;; Author:     Eduardo Ochs <address@hidden>
 ;; Maintainer: Eduardo Ochs <address@hidden>
-;; Version:    2019aug11
+;; Version:    2019sep28
 ;; Keywords:   e-scripts
 ;;
 ;; Latest version: <http://angg.twu.net/eev-current/eepitch.el>
@@ -30,6 +30,22 @@
 ;;                                                (find-eev-quick-intro)
 ;;                                                (find-eepitch-intro)
 
+
+;; «.eepitch»                  (to "eepitch")
+;; «.eepitch-this-line»                (to "eepitch-this-line")
+;; «.eepitch-shell»            (to "eepitch-shell")
+;; «.eepitch-kill»             (to "eepitch-kill")
+;; «.ee-expand»                        (to "ee-expand")
+;; «.ee-split-and-expand»      (to "ee-split-and-expand")
+;; «.find-comintprocess»       (to "find-comintprocess")
+;;
+;; «.eewrap-eepitch»           (to "eewrap-eepitch")
+;; «.glyphs»                   (to "glyphs")
+;; «.set-glyphs»               (to "set-glyphs")
+;; «.set-keys»                 (to "set-keys")
+;;
+;; «.eepitch-langs»            (to "eepitch-langs")
+
 ;;; Commentary:
 
 ;; Eev's central idea is that you can keep "executable logs" of what
@@ -40,11 +56,13 @@
 ;;   1) elisp hyperlinks, and
 ;;   2) lines sent to shell-like programs.
 ;;
-;; Eepitch is the module that implements support for (2). For a
-;; tutorial, see:
+;; Eepitch is the module that implements support for (2). For
+;; tutorials, see:
 ;;
 ;;   (find-eev-quick-intro "6. Controlling shell-like programs")
+;;   (find-eepitch-intro)
 ;;   http://angg.twu.net/eev-intros/find-eev-quick-intro.html#6
+;;   http://angg.twu.net/eev-intros/find-eepitch-intro.html
 ;;
 ;; For videos, see:
 ;;
@@ -69,6 +87,15 @@
 ;; that also generalizes this "send lines to an interpreter" thing.
 ;; TODO: integrate eepitch and isend-mode!
 ;;
+;; See also the `run-<lang>' functions:
+;;
+;;   (find-eapropos "^run-*")
+;;   (find-eapropos "^inferior-*")
+;;   (find-enode "External Lisp" "run-lisp")
+;;   (find-enode "Executing Lisp" "Inferior Lisp mode")
+;;   (find-enode "Executing Lisp" "Inferior Scheme mode")
+;;   (find-elnode "Example Major Modes" "inferior Lisp job")
+;;
 ;;
 ;;
 ;; NOTE 2: eepitch is based on code that Rubikitch sent to the eev
@@ -212,12 +239,15 @@ This function is used by `eepitch-this-line'."
 
 
 
-;;;                     
-;;;   ___ ___  _ __ ___ 
-;;;  / __/ _ \| '__/ _ \
-;;; | (_| (_) | | |  __/
-;;;  \___\___/|_|  \___|
-;;;                     
+;;;                  _ _       _     
+;;;   ___  ___ _ __ (_) |_ ___| |__  
+;;;  / _ \/ _ \ '_ \| | __/ __| '_ \ 
+;;; |  __/  __/ |_) | | || (__| | | |
+;;;  \___|\___| .__/|_|\__\___|_| |_|
+;;;           |_|                    
+;;
+;; «eepitch»  (to ".eepitch")
+;; See: (find-eepitch-intro "2.3. `(eepitch)'")
 
 (defvar eepitch-regexp "^\\(.*\\)"
 "The regexp used by `eepitch-this-line' to determine what is a red-star line.
@@ -330,6 +360,18 @@ which does all the hard work."
   (eepitch-prepare)
   (list 'Target: eepitch-buffer-name)) ; feedback (for <f8> and `M-e')
 
+
+
+
+;;;                  _ _       _           _   _     _           _ _           
 
+;;;   ___  ___ _ __ (_) |_ ___| |__       | |_| |__ (_)___      | (_)_ __   
___ 
+;;;  / _ \/ _ \ '_ \| | __/ __| '_ \ _____| __| '_ \| / __|_____| | | '_ \ / _ 
\
+;;; |  __/  __/ |_) | | || (__| | | |_____| |_| | | | \__ \_____| | | | | |  
__/
+;;;  \___|\___| .__/|_|\__\___|_| |_|      \__|_| |_|_|___/     |_|_|_| 
|_|\___|
+;;;           |_|                                                              
 
+;;
+;; «eepitch-this-line»  (to ".eepitch-this-line")
+
 (defun eepitch-eval-at-target-window (code)
   "Run CODE at the eepitch-target-window."
   (eepitch-prepare)
@@ -370,6 +412,9 @@ and: `eepitch', `eepitch-regexp', `eepitch-comment-regexp'."
 ;;; |  __/  __/ |_) | | || (__| | | |_____|   <| | | |
 ;;;  \___|\___| .__/|_|\__\___|_| |_|     |_|\_\_|_|_|
 ;;;           |_|                                     
+;;
+;; «eepitch-kill»  (to ".eepitch-kill")
+;; See: (find-eepitch-intro "2.2. `(eepitch-kill)'")
 
 (defun ee-kill-buffer (buffer)
   "Kill BUFFER if it exists, asking for fewer confirmations than usual."
@@ -418,6 +463,9 @@ scratch."
 ;;; |  __/  __/ |_) | | || (__| | | |_____\__ \ | | |  __/ | |
 ;;;  \___|\___| .__/|_|\__\___|_| |_|     |___/_| |_|\___|_|_|
 ;;;           |_|                                             
+;;
+;; «eepitch-shell»  (to ".eepitch-shell")
+;; See: (find-eepitch-intro "2.2. `(eepitch-shell)'")
 
 (defun eepitch-shell ()
   "Same as (eepitch '(shell)). See `eepitch' and `eewrap-eepitch'."
@@ -430,12 +478,20 @@ scratch."
 
 
 
-;;;                      _       _   
-;;;   ___ ___  _ __ ___ (_)_ __ | |_ 
-;;;  / __/ _ \| '_ ` _ \| | '_ \| __|
-;;; | (_| (_) | | | | | | | | | | |_ 
-;;;  \___\___/|_| |_| |_|_|_| |_|\__|
-;;;                                  
+;;;                                                  _ 
+;;;   ___  ___        _____  ___ __   __ _ _ __   __| |
+;;;  / _ \/ _ \_____ / _ \ \/ / '_ \ / _` | '_ \ / _` |
+;;; |  __/  __/_____|  __/>  <| |_) | (_| | | | | (_| |
+;;;  \___|\___|      \___/_/\_\ .__/ \__,_|_| |_|\__,_|
+;;;                           |_|                      
+;;
+;; «ee-expand»            (to ".ee-expand")
+;; «ee-split-and-expand»  (to ".ee-split-and-expand")
+;; Tests: (ee-split              "ls   ~/foo")
+;;        (ee-split-and-expand   "ls   ~/foo")
+;;        (ee-split            '("ls" "~/foo"))
+;;        (ee-split-and-expand '("ls" "~/foo"))
+;;        (ee-split-and-expand '("ls" "~/foo bar"))
 
 (defun ee-expand (fname)
 "Expand \"~\"s and \"$ENVVAR\"s in file names, but only at the beginning."
@@ -447,13 +503,38 @@ scratch."
                 (match-string 3 fname)))
        (t fname)))
 
-(defun ee-split (str) (if (stringp str) (split-string str "[ \t\n]+") str))
+(defun ee-split (str)
+  "If STR is a string, split it on whitespace and return the resulting list.
+If STR if a list, return it unchanged."
+  (if (stringp str)
+      (split-string str "[ \t\n]+")
+    str))
+
 (defun ee-split-and-expand (str)
 "Convert STR to a list (if it's a string) and apply `ee-expand' to each 
element.
 This function is used by `find-comintprocess', `find-bgprocess'
 and `find-callprocess'."
   (mapcar 'ee-expand (ee-split str)))
 
+
+
+
+;;;                      _       _   
+;;;   ___ ___  _ __ ___ (_)_ __ | |_ 
+;;;  / __/ _ \| '_ ` _ \| | '_ \| __|
+;;; | (_| (_) | | | | | | | | | | |_ 
+;;;  \___\___/|_| |_| |_|_|_| |_|\__|
+;;;                                  
+;; «find-comintprocess»  (to ".find-comintprocess")
+;; See: (find-eepitch-intro "2.5. `find-comintprocess'")
+;;      (find-eev "eev-plinks.el" "find-comintprocess")
+;;      (find-eev "eev-plinks.el" "find-bgprocess")
+;;      (find-enode "Shell Mode" "Comint mode")
+;;      (find-enode "Terminal emulator")
+;;      (find-elnode "Process Buffers")
+;; This is a variant of `find-bgprocess' that runs the process inside
+;; an Emacs buffer.
+
 (defun find-comintprocess-ne (name &optional program-and-args)
   "Switch to the buffer named *NAME* and run the command PROGRAM-AND-ARGS 
there.
 This function does not run `ee-expand' on the elements of PROGRAM-AND-ARGS."
@@ -477,25 +558,36 @@ See: (find-eepitch-intro)"
 
 
 
+;;;                           
+;;; __      ___ __ __ _ _ __  
+;;; \ \ /\ / / '__/ _` | '_ \ 
+;;;  \ V  V /| | | (_| | |_) |
+;;;   \_/\_/ |_|  \__,_| .__/ 
+;;;                    |_|    
+;;
+;; «eewrap-eepitch»  (to ".eewrap-eepitch")
+;; See: (find-eev-quick-intro "6.3. Creating eepitch blocks: `M-T'")
+;;      (find-eev-quick-intro "wrap")
+;;      (find-wrap-intro)
 
+(defun ee-no-properties (str)
+  (setq str (copy-sequence str))
+  (set-text-properties 0 (length str) nil str)
+  str)
 
+;; (defun eepitch-delete-and-extract-line ()
+;;   (delete-and-extract-region (ee-bol) (ee-eol)))
 
-;;;                  _ _       _               _       
-;;;   ___  ___ _ __ (_) |_ ___| |__         __| | ___  
-;;;  / _ \/ _ \ '_ \| | __/ __| '_ \ _____ / _` |/ _ \ 
-;;; |  __/  __/ |_) | | || (__| | | |_____| (_| | (_) |
-;;;  \___|\___| .__/|_|\__\___|_| |_|      \__,_|\___/ 
-;;;           |_|                                      
-;;
-(defun eepitch-make-suffix (arg)
-  (cond ((null arg) "")
-       ((stringp arg) (format " %s" arg))
-       ((numberp arg) (format " (%s)" arg))))
+(defun ee-this-line-extract ()
+  "Delete the contents of the current line and return it as a string."
+  (delete-and-extract-region (ee-bol) (ee-eol)))
 
-(defun eepitch-do (program-and-args &optional suffix)
-  (eepitch-comint (format "%s%s" (ee-unsplit program-and-args)
-                         (eepitch-make-suffix suffix))
-                 program-and-args))
+(defun eewrap-eepitch () (interactive)
+  (let* ((fmt   " (eepitch-%s)\n (eepitch-kill)\n (eepitch-%s)")
+        (li    (ee-this-line-extract))
+        (newli (format fmt li li)))
+    (insert newli))
+  (ee-next-line 1))
 
 
 
@@ -506,6 +598,8 @@ See: (find-eepitch-intro)"
 ;;;  \__, |_|\__, | .__/|_| |_|___/
 ;;;  |___/   |___/|_|              
 ;;;
+;; «glyphs»  (to ".glyphs")
+;; See: (find-eev-quick-intro "6.4. Red stars")
 ;; More glyphs:
 ;;   (find-eev "eev-anchors.el")
 ;;   (find-anchors-intro)
@@ -533,44 +627,14 @@ to make it work similarly in unibyte and multibyte 
buffers."
       (eepitch-set-glyph0 (make-char 'eight-bit pos) char face)))
 
 
-;;;                           
-;;; __      ___ __ __ _ _ __  
-;;; \ \ /\ / / '__/ _` | '_ \ 
-;;;  \ V  V /| | | (_| | |_) |
-;;;   \_/\_/ |_|  \__,_| .__/ 
-;;;                    |_|    
-;;
-;; See: (find-eev-quick-intro "6.3. Creating eepitch blocks: `M-T'")
-;;      (find-eev-quick-intro "wrap")
-;;      (find-wrap-intro)
-
-(defun ee-no-properties (str)
-  (setq str (copy-sequence str))
-  (set-text-properties 0 (length str) nil str)
-  str)
-
-;; (defun eepitch-delete-and-extract-line ()
-;;   (delete-and-extract-region (ee-bol) (ee-eol)))
-
-(defun ee-this-line-extract ()
-  "Delete the contents of the current line and return it as a string."
-  (delete-and-extract-region (ee-bol) (ee-eol)))
-
-(defun eewrap-eepitch () (interactive)
-  (let* ((fmt   " (eepitch-%s)\n (eepitch-kill)\n (eepitch-%s)")
-        (li    (ee-this-line-extract))
-        (newli (format fmt li li)))
-    (insert newli))
-  (ee-next-line 1))
-
-
-
 ;;;           _           _             _         
 ;;;  ___  ___| |_    __ _| |_   _ _ __ | |__  ___ 
 ;;; / __|/ _ \ __|  / _` | | | | | '_ \| '_ \/ __|
 ;;; \__ \  __/ |_  | (_| | | |_| | |_) | | | \__ \
 ;;; |___/\___|\__|  \__, |_|\__, | .__/|_| |_|___/
 ;;;                 |___/   |___/|_|              
+;;
+;; «set-glyphs»  (to ".set-glyphs")
 
 (if (not standard-display-table)
     (setq standard-display-table (make-display-table)))
@@ -583,26 +647,37 @@ to make it work similarly in unibyte and multibyte 
buffers."
 ;;; \__ \  __/ |_  |   <  __/ |_| \__ \
 ;;; |___/\___|\__| |_|\_\___|\__, |___/
 ;;;                          |___/     
-
+;;
+;; «set-keys»  (to ".set-keys")
+;; Moved to: (find-eev "eev-mode.el" "eev-mode-map-set")
 ;; (global-set-key [f8]   'eepitch-this-line)
 ;; (global-set-key "\M-T" 'eewrap-eepitch)
 
-(provide 'eepitch)
 
 
-;;;  _____           _          __   _   _                               
-;;; | ____|_ __   __| |   ___  / _| | |_| |__   ___    ___ ___  _ __ ___ 
-;;; |  _| | '_ \ / _` |  / _ \| |_  | __| '_ \ / _ \  / __/ _ \| '__/ _ \
-;;; | |___| | | | (_| | | (_) |  _| | |_| | | |  __/ | (_| (_) | | |  __/
-;;; |_____|_| |_|\__,_|  \___/|_|    \__|_| |_|\___|  \___\___/|_|  \___|
-;;;                                                                      
-;;; ----------------------------------------------------------------------
-;;; ----------------------------------------------------------------------
-;;; ----------------------------------------------------------------------
 
 
 
 
+
+;;;                  _ _       _               _       
+;;;   ___  ___ _ __ (_) |_ ___| |__         __| | ___  
+;;;  / _ \/ _ \ '_ \| | __/ __| '_ \ _____ / _` |/ _ \ 
+;;; |  __/  __/ |_) | | || (__| | | |_____| (_| | (_) |
+;;;  \___|\___| .__/|_|\__\___|_| |_|      \__,_|\___/ 
+;;;           |_|                                      
+;;
+(defun eepitch-make-suffix (arg)
+  (cond ((null arg) "")
+       ((stringp arg) (format " %s" arg))
+       ((numberp arg) (format " (%s)" arg))))
+
+(defun eepitch-do (program-and-args &optional suffix)
+  (eepitch-comint (format "%s%s" (ee-unsplit program-and-args)
+                         (eepitch-make-suffix suffix))
+                 program-and-args))
+
+
 ;;;                      _       _                  _           
 ;;;   ___ ___  _ __ ___ (_)_ __ | |_       ___  ___| |__   ___  
 ;;;  / __/ _ \| '_ ` _ \| | '_ \| __|____ / _ \/ __| '_ \ / _ \ 
@@ -689,15 +764,19 @@ This is useful for for running processes that use pagers 
like
 
 
 
+
 ;;;  _                                                  
 ;;; | |    __ _ _ __   __ _ _   _  __ _  __ _  ___  ___ 
 ;;; | |   / _` | '_ \ / _` | | | |/ _` |/ _` |/ _ \/ __|
 ;;; | |__| (_| | | | | (_| | |_| | (_| | (_| |  __/\__ \
 ;;; |_____\__,_|_| |_|\__, |\__,_|\__,_|\__, |\___||___/
 ;;;                   |___/             |___/           
+;;
+;; «eepitch-langs»  (to ".eepitch-langs")
+;; See: (find-eepitch-intro "2.5. `find-comintprocess'")
 
-;; Shells
-;; The first three are defined above.
+;; Shells:
+;; These three are commented out because they are defined above.
 ;; (defun eepitch-shell  () (interactive) (eepitch '(shell)))
 ;; (defun eepitch-shell2 () (interactive) (eepitch '(shell "*shell 2*")))
 ;; (defun eepitch-eshell () (interactive) (eepitch '(eshell)))
@@ -709,22 +788,24 @@ This is useful for for running processes that use pagers 
like
 (defun eepitch-zsh  () (interactive) (eepitch-comint-de "zsh" "zsh"))
 (defun eepitch-scsh () (interactive) (eepitch-comint "scsh" "scsh"))
 
-;; Main interpreted languages
+;; Main interpreted languages:
 (defun eepitch-lua51  () (interactive) (eepitch-comint "lua51"  "lua5.1"))
 (defun eepitch-lua52  () (interactive) (eepitch-comint "lua52"  "lua5.2"))
 (defun eepitch-lua53  () (interactive) (eepitch-comint "lua53"  "lua5.3"))
-(defun eepitch-python () (interactive) (eepitch-comint "python" "python"))
+(defun eepitch-julia  () (interactive) (eepitch-comint "julia"  "julia"))
+(defun eepitch-python  () (interactive) (eepitch-comint "python"  "python"))
+(defun eepitch-python3 () (interactive) (eepitch-comint "python3" "python3"))
 (defun eepitch-ruby   () (interactive) (eepitch-comint "ruby"   "irb"))
 (defun eepitch-ruby   () (interactive) (eepitch-comint "ruby"   "irb 
--simple-prompt"))
 (defun eepitch-perl () (interactive) (eepitch-comint "perl" "perl -d -e 42"))
 
-;; Tcl
+;; Tcl:
 (defun eepitch-tcl     () (interactive) (eepitch-comint "tclsh"   "tclsh"))
 (defun eepitch-tclsh   () (interactive) (eepitch-comint "tclsh"   "tclsh"))
 (defun eepitch-wish    () (interactive) (eepitch-comint "wish"    "wish"))
 (defun eepitch-expect  () (interactive) (eepitch-comint "expect"  "expect"))
 
-;; Lisps and Schemes
+;; Lisps and Schemes:
 ;; It would be better to run them in Slime.
 (defun eepitch-sbcl   () (interactive) (eepitch-comint "sbcl" "sbcl"))
 (defun eepitch-gcl    () (interactive) (eepitch-comint "gcl"  "gcl"))
@@ -736,7 +817,7 @@ This is useful for for running processes that use pagers 
like
   (eepitch-comint "tinyscheme" "tinyscheme"))
 
 
-;; Haskell, ML, Erlang, Coq
+;; Haskell, ML, Erlang, Coq:
 (defun eepitch-hugs   () (interactive) (eepitch-comint "hugs" "hugs"))
 (defun eepitch-hugs98 () (interactive) (eepitch-comint "hugs" "hugs -98"))
 (defun eepitch-ghci   () (interactive) (eepitch-comint "ghci" "ghci"))
@@ -746,25 +827,25 @@ This is useful for for running processes that use pagers 
like
 (defun eepitch-erl    () (interactive) (eepitch-comint "erl" "erl"))
 (defun eepitch-coqtop () (interactive) (eepitch-comint "coqtop" "coqtop"))
 
-;; Forth
+;; Forth:
 (defun eepitch-gforth () (interactive) (eepitch '(run-forth "gforth")))
 (defun eepitch-gforth () (interactive) (eepitch-comint "gforth" "gforth"))
 (defun eepitch-pforth () (interactive) (eepitch-comint "pforth" "pforth"))
 (defun eepitch-yforth () (interactive) (eepitch-comint "yforth" "yforth"))
 
-;; Mathematics
+;; Mathematics:
 (defun eepitch-maxima () (interactive) (eepitch-comint "maxima" "maxima"))
 (defun eepitch-octave () (interactive) (eepitch-comint "octave" "octave"))
 (defun eepitch-R () (interactive)
   (eepitch '(ee-with-pager-cat (find-comintprocess "R" "R"))))
 
-;; Plotters.
+;; Plotters:
 ;; We force GhostScript's resolution to make its window fit on the screen.
 (defun eepitch-gs () (interactive) (eepitch-comint "gs" "gs -r45"))
 (defun eepitch-gs () (interactive) (eepitch-comint "gs" "gs -r60"))
 (defun eepitch-gnuplot () (interactive) (eepitch-comint "gnuplot" "gnuplot"))
 
-;; Java-based languages
+;; Java-based languages:
 (defun eepitch-bsh () (interactive)
   (eepitch-de '(find-comintprocess "bsh" "bsh")))
 (defun eepitch-scala () (interactive)
@@ -783,6 +864,7 @@ This is useful for for running processes that use pagers 
like
 ;; JavaScript
 ;; MozRepl is a Javascript REPL in a running Mozilla browser.
 ;; See: https://github.com/bard/mozrepl/wiki/tutorial
+(defun eepitch-nodejs () (interactive) (eepitch-comint "nodejs" "nodejs"))
 (defun eepitch-smjs () (interactive) (eepitch-comint "smjs" "smjs"))
 (defun eepitch-mozrepl () (interactive)
   (eepitch-comint "mozrepl" "telnet localhost 4242"))
@@ -807,6 +889,9 @@ This is useful for for running processes that use pagers 
like
 
 
 
+(provide 'eepitch)
+
+
 
 ;; Local Variables:
 ;; coding:            utf-8-unix
diff --git a/eev-audiovideo.el b/eev-audiovideo.el
index eae5415..f252ba5 100644
--- a/eev-audiovideo.el
+++ b/eev-audiovideo.el
@@ -19,7 +19,7 @@
 ;;
 ;; Author:     Eduardo Ochs <address@hidden>
 ;; Maintainer: Eduardo Ochs <address@hidden>
-;; Version:    2019aug12
+;; Version:    2019sep29
 ;; Keywords:   e-scripts
 ;;
 ;; Latest version: <http://angg.twu.net/eev-current/eev-audiovideo.el>
@@ -37,6 +37,7 @@
 ;;
 ;; but that needs to be rewritten...
 
+;; «.eev-avadj-mode»   (to "eev-avadj-mode")
 ;; «.find-mplayer»     (to "find-mplayer")
 ;; «.find-termplayer»  (to "find-termplayer")
 ;; «.find-mpv-video»   (to "find-mpv-video")
@@ -140,13 +141,6 @@
   (list ee-audiovideo-last time))
 
 
-;;;                                  _  _                           _      
-;;;   __ _     __   __      __ _  __| |(_)      _ __ ___   ___   __| | ___ 
-;;;  / _` |____\ \ / /____ / _` |/ _` || |_____| '_ ` _ \ / _ \ / _` |/ _ \
-;;; | (_| |_____\ V /_____| (_| | (_| || |_____| | | | | | (_) | (_| |  __/
-;;;  \__,_|      \_/       \__,_|\__,_|/ |     |_| |_| |_|\___/ \__,_|\___|
-;;;                                  |__/                                  
-;;
 (defun ee-time-from-bol-rerun (&optional arg)
   "Play the current audio or video starting at '(ee-time-from-bol)'.
 With a prefix of 0 just display what would be done. See:
@@ -159,6 +153,18 @@ With a prefix of 0 just display what would be done. See:
             (eval sexp)
             (message "%S" sexp)))))
 
+
+
+;;;                       _  _                           _      
+;;;   __ ___   ____ _  __| |(_)      _ __ ___   ___   __| | ___ 
+;;;  / _` \ \ / / _` |/ _` || |_____| '_ ` _ \ / _ \ / _` |/ _ \
+;;; | (_| |\ V / (_| | (_| || |_____| | | | | | (_) | (_| |  __/
+;;;  \__,_| \_/ \__,_|\__,_|/ |     |_| |_| |_|\___/ \__,_|\___|
+;;;                       |__/                                  
+;;
+;; «eev-avadj-mode»  (to ".eev-avadj-mode")
+;; See: (find-audiovideo-intro "2. `eev-avadj-mode'")
+;;
 (setq eev-avadj-mode-map (make-sparse-keymap))
 (define-key eev-avadj-mode-map "\M--" 'ee-time-from-bol-shift-)
 (define-key eev-avadj-mode-map "\M-=" 'ee-time-from-bol-shift)
@@ -176,17 +182,6 @@ See: (find-audiovideo-intro \"`eev-avadj-mode'\")"
 ;; (eev-avadj-mode 1)
 ;; 1:15 foo
 
-;; (find-eev "eev-mode.el")
-;; (find-code-video "thecompanyofwolves" 
"/sda5/torrents/The_Company_of_Wolves/The_Company_Of_Wolves.avi")
-;;      (code-video "thecompanyofwolves" 
"/sda5/torrents/The_Company_of_Wolves/The_Company_Of_Wolves.avi")
-
-;; 0:00 (ee-time-from-bol-shift -100)
-;; 0:00 (ee-time-from-bol-shift -10)
-;; 1:23 (if (ee-time-from-bol) (replace-match "abcd" t t)) 
-;; 1:23 (if (ee-time-from-bol) (save-excursion (replace-match "abcd" t t)))
-
-;; Ideally `M-1 M-x find-chomskyvideo' should use `ee-time-from-bol'...
-;; (find-elnode "Index" "* replace-match:")
 
 
 
diff --git a/eev-blinks.el b/eev-blinks.el
index e45ad95..ad1e66b 100644
--- a/eev-blinks.el
+++ b/eev-blinks.el
@@ -21,7 +21,7 @@
 ;;
 ;; Author:     Eduardo Ochs <address@hidden>
 ;; Maintainer: Eduardo Ochs <address@hidden>
-;; Version:    2019aug10
+;; Version:    2019oct16
 ;; Keywords:   e-scripts
 ;;
 ;; Latest version: <http://angg.twu.net/eev-current/eev-blinks.el>
@@ -318,10 +318,14 @@ then go to the position specified by POS-SPEC-LIST.\n
         "*Packages*" pos-spec-list))
 
 ;; Test: (find-epackage 'bdo)
+;; Note: `M-x find-epackage' currently doesn't work well.
+;;  See: (find-elnode "Interactive Codes" "S" "An interned symbol")
+;;       (find-elnode "Index" "* read-no-blanks-input:")
 ;;
 (defun find-epackage (&optional pkg-desc &rest pos-spec-list)
   "Hyperlink to the output of `describe-package'."
-  (interactive "P")
+  ;; (interactive "Spackage name: ")
+  (interactive (list (intern (read-no-blanks-input "Package name: " ""))))
   (apply 'find-wottb-call '(describe-package pkg-desc)
         "*Help*" pos-spec-list))
 
@@ -830,6 +834,17 @@ LIBRARY is converted to an absolute file name using 
`locate-library'."
 ;;   (find-etpat)
 ;;   (find-etpat0)
 
+;; Test: (find-esubstitutecommandkeys eev-mode-help)
+;;       (find-estring                eev-mode-help)
+;;       (find-esubstitutecommandkeys (documentation 'eev-mode 'raw))
+;;       (find-estring                (documentation 'eev-mode 'raw))
+;;       (find-estring                (documentation 'eev-mode))
+(defun find-esubstitutecommandkeys (string &rest pos-spec-list)
+  "Hyperlink to the result of running `substitute-command-keys' on STRING."
+  ;; To do: add buttons and links.
+  (apply 'find-estring (substitute-command-keys string)
+        pos-spec-list))
+
 ;; Test: (find-ekeymapdescr isearch-mode-map "toggle-regexp")
 (defun find-ekeymapdescr (keymap &rest pos-spec-list)
   "Hyperlink to the list of bindings in KEYMAP.
@@ -962,9 +977,10 @@ Hint: install the Debian package \"unicode-data\".")
   (apropos-internal "^eejump-[0-9]*\\*?$" 'fboundp))
 
 (defun ee-find-eejumps-header ()
-  ";; (find-eejumps)
-;; See: (find-eev-quick-intro \"7.1. `eejump'\")
+  ";; Generated by: (find-eejumps)
+;; See: (find-eev-quick-intro \"7.1. `eejump'\" \"`M-j'\")
 ;;      (find-emacs-keys-intro \"1. Basic keys (eev)\")
+;;      (find-emacs-keys-intro \"2. Key sequences\")
 ;; For example,
 ;;     M-1 M-j  runs:  (find-fline \"~/TODO\")
 ;;     M-2 M-j  runs:  (find-emacs-keys-intro)
diff --git a/eev-brxxx.el b/eev-brxxx.el
index 628c338..b091731 100644
--- a/eev-brxxx.el
+++ b/eev-brxxx.el
@@ -19,7 +19,7 @@
 ;;
 ;; Author:     Eduardo Ochs <address@hidden>
 ;; Maintainer: Eduardo Ochs <address@hidden>
-;; Version:    2019mar29
+;; Version:    2019oct27
 ;; Keywords:   e-scripts
 ;;
 ;; Latest version: <http://angg.twu.net/eev-current/eev-brxxx.el>
@@ -313,7 +313,9 @@ This should be made smarter - file:// urls should be 
returned unchanged."
 ;;;  \___\___/ \__,_|\___|     |_.__/|_|  /_/\_\/_/\_\/_/\_\___/
 ;;;                                                             
 ;; «code-brxxxs» (to ".code-brxxxs")
-;; See: (find-eev "eev-pdflike.el" "code-brxxxs")
+;; See: (find-eev-quick-intro "3.1. Non-elisp hyperlinks")
+;;      (find-eev-quick-intro "3.1. Non-elisp hyperlinks" "brg")
+;;      (find-eev "eev-pdflike.el" "code-brxxxs")
 ;;      (find-eev "eev-blinks.el" "find-w3m")
 ;;      (find-efile "net/browse-url.el")
 
@@ -329,6 +331,8 @@ This should be made smarter - file:// urls should be 
returned unchanged."
 (code-brurl 'find-googlechrome     :remote 'brg  :local 'brgl  :dired 'brgd)
 (code-brurl 'find-w3m              :remote 'brw  :local 'brwl  :dired 'brwd)
 
+(code-brurl 'find-wget             :remote 'brwget)
+
 (code-brfile 'find-fline                         :local 'brfl)
 
 
diff --git a/eev-edit.el b/eev-edit.el
index 53bc716..218467f 100644
--- a/eev-edit.el
+++ b/eev-edit.el
@@ -19,7 +19,7 @@
 ;;
 ;; Author:     Eduardo Ochs <address@hidden>
 ;; Maintainer: Eduardo Ochs <address@hidden>
-;; Version:    2019aug29
+;; Version:    2019sep27
 ;; Keywords:   e-scripts
 ;;
 ;; Latest version: <http://angg.twu.net/eev-current/eev-edit.el>
@@ -138,7 +138,8 @@ With a prefix argument run 
`ee-copy-preceding-tag-to-kill-ring' instead."
 
 ;; Experimental, 2019aug29
 ;; (defun ee-tag-re () (ee-tolatin1 "«\\([!-~]+\\)»"))
-(defun ee-tag-re () "«\\([!-~]+\\)»")
+(defvar ee-tag-re-utf-8 "«\\([!-~]+\\)»")
+(defun  ee-tag-re () ee-tag-re-utf-8)
 
 (defun ee-copy-preceding-tag-to-kill-ring ()
   "Copy the preceding tag to the kill ring and highlight (\"flash\") it.
diff --git a/eev-elinks.el b/eev-elinks.el
index 50dd5f5..5852631 100644
--- a/eev-elinks.el
+++ b/eev-elinks.el
@@ -19,7 +19,7 @@
 ;;
 ;; Author:     Eduardo Ochs <address@hidden>
 ;; Maintainer: Eduardo Ochs <address@hidden>
-;; Version:    2019aug06
+;; Version:    2019oct04
 ;; Keywords:   e-scripts
 ;;
 ;; Latest version: <http://angg.twu.net/eev-current/eev-elinks.el>
@@ -73,6 +73,7 @@
 ;; «.ee-hyperlink-prefix»      (to "ee-hyperlink-prefix")
 ;; «.find-eface-links»         (to "find-eface-links")
 ;; «.find-color-links»         (to "find-color-links")
+;; «.find-epackage-links»      (to "find-epackage-links")
 
 ;; «.find-here-links»          (to "find-here-links")
 ;; «.find-here-links-beginner» (to "find-here-links-beginner")
@@ -259,6 +260,8 @@ This is an internal function used by `find-efunction-links' 
and
     (where-is ',f)
     (symbol-file ',f 'defun)
     (find-fline (symbol-file ',f 'defun))
+    (find-epp (assoc (symbol-file ',f 'defun) load-history))
+    (find-estring (mapconcat 'identity (mapcar 'car load-history) "\n"))
     (find-estring (documentation ',f))
     (find-estring (documentation ',f t))
     (describe-function ',f)
@@ -1093,6 +1096,67 @@ This needs a temporary directory; see: 
(find-prepared-intro)"
 
 
 
+;;;   __ _           _                             _                          
_ 
+;;;  / _(_)_ __   __| |       ___ _ __   __ _  ___| | ____ _  __ _  ___      | 
|
+;;; | |_| | '_ \ / _` |_____ / _ \ '_ \ / _` |/ __| |/ / _` |/ _` |/ _ \_____| 
|
+;;; |  _| | | | | (_| |_____|  __/ |_) | (_| | (__|   < (_| | (_| |  __/_____| 
|
+;;; |_| |_|_| |_|\__,_|      \___| .__/ \__,_|\___|_|\_\__,_|\__, |\___|     
|_|
+;;;                              |_|                         |___/             
 
+;;
+;; «find-epackage-links»  (to ".find-epackage-links")
+;; Tests: (find-epackage-links "eev")
+;;        (find-estring (ee-find-epackage-links0 "0x0"))
+;;
+(defun find-epackage-links (&optional pkgname &rest pos-spec-list)
+"Visit a temporary buffer containing hyperlinks for an Emacs package."
+  (interactive)
+  (setq pkgname (or pkgname "{pkgname}"))
+  (apply 'find-elinks
+   `((find-epackage-links ,pkgname ,@pos-spec-list)
+     ;; Convention: the first sexp always regenerates the buffer.
+     (find-efunction 'find-epackage-links)
+     (find-elpafile "")
+     ""
+     ,(ee-find-epackage-links0 pkgname)
+     )
+   pos-spec-list))
+
+(defun ee-find-epackage-links0 (pkgname)
+  "This is an internal function used by `find-epackage-links'."
+  (let* ((spkgname (format "\n  %s " pkgname))
+        (pattern (format "%s%s-*" ee-elpadir pkgname))
+        (fnames (ee-file-expand-wildcards-slash pattern))
+        (sexps (mapcar (lambda (s) (list 'find-elpafile s)) fnames))
+        (sexps (reverse sexps))
+        (lines (mapconcat 'ee-HS sexps "\n"))
+        )
+    (ee-template0 "\
+# (find-epackages {(ee-S spkgname)})
+# (find-epackage '{pkgname})
+{lines}
+
+# http://elpa.gnu.org/packages/{pkgname}.html
+# http://melpa.org/#/{pkgname}
+")))
+
+
+(defun ee-file-name-nondirectory-slash (fname)
+  "Like `file-name-nondirectory', but appends a / to FNAME if it is a 
directory.
+This is an internal function used by `ee-find-epackage-links'."
+  (concat (file-name-nondirectory fname)
+         (if (file-directory-p fname) "/" "")))
+
+(defun ee-file-expand-wildcards-slash (pattern)
+  "Like `file-expand-wildcards' but with `ee-file-name-nondirectory-slash' & 
sort.
+This is an internal function used by `ee-find-epackage-links'."
+  (let* ((fnames0 (file-expand-wildcards pattern))
+        (fnames1 (mapcar 'ee-file-name-nondirectory-slash fnames0))
+        (fnames2 (sort fnames1 'string<)))
+    fnames2))
+
+
+
+
 
 ;;;   __ _           _       _                         _ _       _        
 ;;;  / _(_)_ __   __| |     | |__   ___ _ __ ___      | (_)_ __ | | _____ 
@@ -1176,8 +1240,7 @@ This needs a temporary directory; see: 
(find-prepared-intro)"
 (defun  ee-epackage-bufferp () (ee-buffer-help ee-epackage-re 1))
 (defun  ee-find-epackage-links ()
   (let ((p (ee-epackage-bufferp)))
-    `((find-epackages ,(format "\n  %s " p) t)
-      (find-epackage ',p))))
+    (list (ee-find-epackage-links0 p))))
 
 ;; By buffer name (when the mode is man)
 (defvar ee-man-re "^\\*Man \\(.*\\)\\*$")
diff --git a/eev-intro.el b/eev-intro.el
index 43056b4..92e6d8b 100644
--- a/eev-intro.el
+++ b/eev-intro.el
@@ -19,7 +19,7 @@
 ;;
 ;; Author:     Eduardo Ochs <address@hidden>
 ;; Maintainer: Eduardo Ochs <address@hidden>
-;; Version:    2019aug16
+;; Version:    2019nov04
 ;; Keywords:   e-scripts
 ;;
 ;; Latest version: <http://angg.twu.net/eev-current/eev-intro.el>
@@ -273,6 +273,7 @@ More intros:  (find-emacs-keys-intro)
               (find-eev-intro)
               (find-here-links-intro)
               (find-refining-intro)
+              (find-eepitch-intro)
               (find-pdf-like-intro)
 This buffer is _temporary_ and _editable_.
 It is meant as both a tutorial and a sandbox.
@@ -793,9 +794,10 @@ and pasting. The module of eev that controls shell-like 
programs - it
 is called \"eepitch\" - uses `<F8>' and `M-T'. Note that it is
 `alt-shift-t', to not interfere with Emacs's `M-t'.
 
-The sections below were adapted from:
+For more details see:
 
-  (find-eepitch-intro \"The main key: <F8>\")
+  (find-eepitch-intro)
+  (find-wrap-intro \"2. <M-T>: produce an eepitch block\")
 
 
 
@@ -1773,13 +1775,13 @@ Some other keys that create buffers with elisp 
hyperlinks:
 2. Key sequences and how to abort them
 ======================================
 See: (find-enode \"Keys\" \"key sequence\")
-     (find-enode \"User Input\" \"`Control-a'\" \"usually written `C-a'\")
+     (find-enode \"User Input\" \"Control-a\" \"C-a\")
      (find-enode \"User Input\" \"<META> key\")
      (find-enode \"Completion\" \"<TAB>\")
      (find-enode \"Minibuffer History\" \"<UP>\" \"<DOWN>\")
 
 <ESC> <ESC> <ESC>                (find-enode \"Quitting\")
-C-g   keyboard-quit              (find-enode \"Quitting\" \"`C-g'\")
+C-g   keyboard-quit              (find-enode \"Quitting\" \"C-g\")
 M-x   execute-extended-command   (find-enode \"M-x\" \"Running Commands by 
Name\")
 
 More about the minibuffer:       (find-enode \"Minibuffer\")
@@ -1790,6 +1792,12 @@ More about modes:                (find-enode \"Major 
Modes\")
                                  (find-enode \"Minor Modes\")
                                  (find-enode \"Dired\")
 
+See also: (find-enode \"Mode Line\" \"(MAJOR MINOR)\")
+          (find-enode \"Mode Line\" \" MAJOR is the name\")
+          (find-enode \"Mode Line\" \" MINOR is a list\")
+          (find-enode \"Mode Line\" \" BUF \")
+          (find-enode \"Mode Line\" \" BUF \" \"name of the buffer\")
+
 
 
 3. Cutting & pasting
@@ -1920,56 +1928,76 @@ It is meant as both a tutorial and a sandbox.
 
 
 
-The installation instructions in
+Note: this intro contains lots of very technical information!
+If you're a beginner you should skip this - but if you use
+Windows then this page may be relevant to you:
+  http://angg.twu.net/installing-eev-on-windows.html
+
+
+
+
+1. Beginners and experts
+========================
+When I teach Emacs and eev to beginners in workshops I install
+Emacs and eev in their machines using a \"beginners setup\" like
+the one described here,
 
   (find-eev-quick-intro \"1. Installing eev\")
 
-describe a way to install eev that uses the directory \"~/eev2/\"
-for elisp files and that creates a secript \"~/eev\" that starts
-Emacs, loads eev, and runs `(find-eev-quick-intro)'. Here we
-describe several ways to install eev in other places and how to
-change your .emacs to make it load eev at startup, but lots of
-things are obsolete or incomplete in this intro - many things
-have changed since eev become an ELPA package!
+that lets them start Emacs displaying the main eev tutorial and
+with eev-mode on; then I teach them how to use `M-e' to follow
+elisp hyperlinks, and I show them that if they type just `M-j'
+they get a page with some nice & important hyperlinks at its
+header... then usually in less that five minutes - with a bit of
+help - they figure out how to navigate the documentation and how
+to do the exercises.
+
+When I show eev to long-time Emacs users I recommend them to
+install eev using an \"expert setup\" that is very non-intrusive,
+and that does not turn eev-mode on. With eev installed but
+eev-mode off all elisp hyperlinks functions are still available,
+even the ones that define \"shorter hyperlinks\", like the ones
+described in these sections,
 
+  (find-eev-quick-intro \"9. Shorter hyperlinks\")
+  (find-pdf-like-intro \"7. Shorter hyperlinks to PDF files\")
 
+and people can execute sexps with `C-x C-e'. People using the
+expert setup can turn eev-mode on and off - i.e., activate and
+disactivate its keybindings - with `M-x eev-mode', and when
+`eev-mode' is on they can go to the main tutorials with:
 
+  `M-5 M-j'  -  (find-eev-quick-intro)
+  `M-2 M-j'  -  (find-emacs-keys-intro)
 
-1. Installing eev by hand
-=========================
-If you have unpacked eev in a certain directory - for example in
-~/eev2/, with:
+or by following the links at the header of the page displayed by
+`M-j'. Try:
 
-  rm -Rv ~/eev2/
-  mkdir  ~/eev2/
-  cd     ~/eev2/
-  rm -fv eev2.tgz
-  wget http://angg.twu.net/eev-current/eev2.tgz
-  tar -xvzf eev2.tgz
+      `M-j'  -  (find-eejumps)
 
-then you can try it with:
+I try to assume that long-time Emacsers are too busy with their
+other things, and that it's ok if they only spend 5 minutes per
+month playing with the eev tutorials.
 
-  (add-to-list 'load-path \"~/eev2/\")
-  (require 'eev-load)                 ; (find-eev \"eev-load.el\")
-  (eev-mode 1)                        ; (find-eev \"eev-mode.el\")
 
-and you can install it permanently by copying the three lines
-above to your .emacs. Note that eev-mode.el has this commentary:
 
-  ;; Turning on eev-mode simply activates the eev-mode-map keymap, and
-  ;; adds an \"eev\" to the mode line to remind you this. Turning off
-  ;; eev-mode deactivates the keymap and the reminder. 
 
-If you prefer to start with eev-mode off, omit the
-line `(eev-mode 1)' above or change it to `(eev-mode 0)'. To
-toggle eev-mode on and off, use `M-x eev'. The keybindings in
-eev-mode are listed here:
 
-  (find-eev \"eev-mode.el\" \"eev-mode-map-set\")
+2. The expert setup
+===================
+The \"expert setup\" described above corresponds to downloading
+eev and then running something equivalent to this:
 
-Years ago eev was a very invasive package that changed several
-global settings; now it's the opposite. If you load eev the only
-things that happen are:
+  (add-to-list 'load-path \"~/path-to-the-eev-source/\")
+  (require 'eev-load)
+
+If you installed eev with `M-x list-packages' - see:
+
+  (find-enode \"Packages\")
+
+then the line that adjusts the load-path should not be needed.
+
+Here's what `(require 'eev-load)' does:
 
   1) Several functions and variables become defined. They ALL
      have the prefixes \"find-\", \"ee\", \"code-\" or \"br\",
@@ -1986,64 +2014,107 @@ things that happen are:
 
        (find-eev \"eev-blinks.el\" \"find-man\")
 
+Eev has very few autoloads, so eev-load.el loads all source files
+except for eev-beginner.el. See:
 
+  (find-eev \"eev-load.el\")
+  (find-eev \"eev-load.el\" \"autoloads\")
 
 
 
-2. Running `(find-eev-install-links)'
-=====================================
-The shell commands in
+
+3. The beginner setup
+=====================
+The \"beginner setup\" corresponds to the expert setup plus this:
+
+  (eev-beginner)
+
+where `eev-beginner' turns eev-mode on and runs:
+
+  (find-eev-quick-intro)
+
+See:
+
+  (find-eev \"eev-beginner.el\")
+  
+If you have installed eev by following these instructions
 
   (find-eev-quick-intro \"1. Installing eev\")
 
-and the previous section can be obtained by running
-`find-eev-install-links' with these arguments:
+then the script \"~/eev\" will run `(eev-beginner)' for you.
 
-  (find-eev-install-links \"~/eev2/\" \"~/eev\")
+In the beginner setup for Windows people have to execute `M-x
+eev-beginner' by hand when they start Emacs.
 
-Note that `(find-eev-install-links)' is somehow similar to this,
 
-  (find-eev-quick-intro \"7.3. `find-latex-links'\")
 
-and follows most of the same conventions.
 
-If you want to install eev in a more permanent place the default
-way is to run `(find-eev-install-links)' with these arguments,
+4. `eev-mode'
+=============
+Turning on eev-mode simply activates the eev-mode-map keymap, and
+adds an \"eev\" to the mode line to remind you this. Turning off
+eev-mode deactivates the keymap and the reminder.
 
-  (find-eev-install-links \"~/eev2/\" \"~/eev\" \"#\")
+See:
 
-and execute its eepitch block.
+  (find-eev \"eev-mode.el\")
+  (find-eev \"eev-mode.el\" \"eev-mode\")
+  (find-efunctiondescr        'eev-mode)
+  (find-eminormodekeymapdescr 'eev-mode)
+  (find-efunctiondescr        'eev-avadj-mode)
+  (find-eminormodekeymapdescr 'eev-avadj-mode)
 
 
 
 
-3. Changing your .emacs
+5. Ways to download eev
 =======================
-See:
+These are the current ways to download and install eev:
 
-  (find-elnode \"Init File\" \".emacs\")
-  (find-elnode \"Init Examples\")
-  (find-elnode \"Init File Examples\")
-  (find-eev-install-links \"~/eev2/\" \"~/eev\" \"\" 2 \".emacs\")
+  1. as an Emacs package, with `M-x list-packages';
 
+  2. as an Emacs package, by downloading a file named
+     eev-YYYYMMDD.tar from either ELPA or angg.twu.net using
+     links like these ones,
 
+       http://elpa.gnu.org/packages/eev.html
+       http://elpa.gnu.org/packages/eev-20191003.tar
+       http://angg.twu.net/eev-current/
+       http://angg.twu.net/eev-current/eev-20191003.tar
 
-3.1. Adding directories to the load-path
-----------------------------------------
+     and then running `M-x package-install-file';
 
-3.2. `package-initialize'
--------------------------
-  (find-es \"emacs\" \"package-initialize\")
+  3. by using the script in section 1, that downloads a .tgz from
 
-3.3. Keeping both the git and the ELPA versions
------------------------------------------------
+       http://angg.twu.net/eev-current/eev2.tgz ,
 
+     unpacks it in the directory ~/eev/ and creates a script
+     called \"~/eev\" that starts Emacs loading eev and opening
+     the main tutorial,
 
+  4. by downloading the .tgz above and unpacking it, and then
+     running these lines yourself:
 
+       (add-to-list 'load-path \"~/path-to-the-eev-source/\")
+       (require 'eev-load)
+       (eev-mode 1)               ; optional
 
-4. Using the git repository
-===========================
-Eev has a git repository at:
+  5. by downloading the git repo from
+
+       https://github.com/edrx/eev.git
+
+     and then running this:
+
+       (add-to-list 'load-path \"~/path-to-the-eev-source/\")
+       (require 'eev-load)
+       (eev-mode 1)               ; optional
+
+
+
+
+5.1. Using the git repository
+-----------------------------
+The git repository for eev is at:
 
   https://github.com/edrx/eev.git
 
@@ -2052,18 +2123,18 @@ Try this:
  (eepitch-shell)
  (eepitch-kill)
  (eepitch-shell)
-rm -Rfv /tmp/eev2
-mkdir   /tmp/eev2/
-cd      /tmp/eev2/ && git clone https://github.com/edrx/eev.git .
-cd      /tmp/eev2/
-# (find-gitk \"/tmp/eev2/\")
-{
-  echo '#!/bin/sh'
-  echo 'cd /tmp/eev2/ && emacs -l eev-readme.el 
--eval=\"(find-eev-quick-intro)\"'
-} > /tmp/eev
-chmod 755 /tmp/eev
+  rm -Rfv /tmp/eev2
+  mkdir   /tmp/eev2/
+  cd      /tmp/eev2/ && git clone https://github.com/edrx/eev.git .
+  cd      /tmp/eev2/
+  # (find-gitk \"/tmp/eev2/\")
+  {
+    echo '#!/bin/sh'
+    echo 'cd /tmp/eev2/ && emacs -l eev-readme.el 
--eval=\"(find-eev-quick-intro)\"'
+  } > /tmp/eev
+  chmod 755 /tmp/eev
 
-and run the script in /tmp/eev if you want to.
+  /tmp/eev
 
 Note the \"cd ... && git clone URL .\". This is needed because if
 we don't specify a directory after the URL in \"git clone\" then
@@ -2073,8 +2144,46 @@ incompatible with our convention of creating a script 
called
 
 
 
+5.2. Installation quirks
+------------------------
+There were a couple of situations around may/2019 which I was
+helping friends who had installed eev on Windows with `M-x
+list-packages' and we found out that we had to add
+a `(package-initialize)' to their \".emacs\"s to make things
+work... I still need to understand this. See:
+
+  (find-es \"emacs\" \"package-initialize\")
+
+If you have installed both an eev from ELPA and an eev from the
+.tgz or from the git repo then one of them will be found first in
+the load-path. Check with one.
+
+
+
+
+
+6. `find-eev-install-links'
+===========================
+There is this,
 
-5. Eev as an ELPA/MELPA package
+  (find-eev-install-links)
+
+but I sort of forgot it, and I haven't updated it recently...
+note that it is somehow similar to this,
+
+  (find-eev-quick-intro \"7.5. `find-latex-links'\")
+
+and follows most of the same conventions. See:
+
+  (find-elnode \"Init File\" \".emacs\")
+  (find-elnode \"Init Examples\")
+  (find-elnode \"Init File Examples\")
+  (find-eev-install-links \"~/eev2/\" \"~/eev\" \"\" 2 \".emacs\")
+
+
+
+
+7. Eev as an ELPA/MELPA package
 ===============================
 In march 2019 I prepared a first version of an emacs package for
 eev to make it installable by `M-x list-packages' - see:
@@ -2109,7 +2218,7 @@ quirks!!! Its ELPA page is here:
 
 
 
-5.1. Byte-compilation
+7.1. Byte-compilation
 ---------------------
 In standard packages all elisp files should be byte-compilable
 unless there is a very strong reason - but all eev source files
@@ -2197,7 +2306,7 @@ Here is an excerpt of one of my e-mails to Stefan:
 
 
 
-5.2. Dynamic binding
+7.2. Dynamic binding
 --------------------
 Dependency on dynamic binding should be avoided - see:
 
@@ -2213,7 +2322,7 @@ in its source file:
 
 
 
-5.3. Autoloads
+7.3. Autoloads
 --------------
 I decided to mark only one function in eev as autoloadable -
 instead of hundreds - and this is very non-standard. See the
@@ -2225,6 +2334,11 @@ and also:
 
   (find-eev \"README\")
   (find-eev \"eev-beginner.el\")
+
+See:
+  (find-eev \"eev-load.el\")
+  (find-eev \"eev-mode.el\")
+
 " pos-spec-list)))
 
 ;; (find-eev-install-intro)
@@ -2270,55 +2384,57 @@ recommended reading order. These are the basic ones:
    0. (find-eev-quick-intro)
    1. (find-emacs-keys-intro)
    2. (find-eev-intro)
-   3. (find-eev-install-intro)
-   4. (find-here-links-intro)
-   5. (find-refining-intro)
-   6. (find-pdf-like-intro)
+   3. (find-here-links-intro)
+   4. (find-refining-intro)
+   5. (find-pdf-like-intro)
+   6. (find-eepitch-intro)
+   7. (find-audiovideo-intro)
+   8. (find-rcirc-intro)
+   9. (find-eev-install-intro)
 
 These ones explain ideas, conventions, and usage patterns:
 
-   7. (find-escripts-intro)
-   8. (find-links-conv-intro)
+  10. (find-escripts-intro)
+  11. (find-links-conv-intro)
 
 These are older and more technical versions of sections of the
 eev-quick-intro:
 
-   9. (find-eval-intro)
-  10. (find-links-intro)
-  11. (find-brxxx-intro)
-  12. (find-eepitch-intro)
-  13. (find-wrap-intro)
-  14. (find-eejump-intro)
-  15. (find-anchors-intro)
-  16. (find-code-c-d-intro)
-  17. (find-psne-intro)
+  12. (find-eval-intro)
+  13. (find-links-intro)
+  14. (find-brxxx-intro)
+  15. (find-wrap-intro)
+  16. (find-eejump-intro)
+  17. (find-anchors-intro)
+  18. (find-code-c-d-intro)
+  19. (find-psne-intro)
 
 These are etcs:
 
-  18. (find-multiwindow-intro)
-  19. (find-audiovideo-intro)
-  20. (find-rcirc-intro)
+  20. (find-multiwindow-intro)
   21. (find-templates-intro)
-  22. (find-videos-intro)
+  22. (find-org-intro)
+  23. (find-videos-intro)
+  24. (find-what-sexps-can-do-intro)
 
 These ones explain advanced features that require extra setup:
 
-  23. (find-prepared-intro)
-  24. (find-bounded-intro)
-  25. (find-channels-intro)
+  25. (find-prepared-intro)
+  26. (find-bounded-intro)
+  27. (find-channels-intro)
 
 This one is used in a video:
 
-  26. (find-three-main-keys-intro)
+  28. (find-three-main-keys-intro)
 
 These ones are obsolete:
 
-  27. (find-emacs-intro)
-  28. (find-defun-intro)
+  29. (find-emacs-intro)
+  30. (find-defun-intro)
 
-Item 22 is an index of the (old) video tutorials, with scripts
-for downloading local copies of them and links to important
-positions in the videos.
+Item 23 is an index of old video tutorials, with scripts for
+downloading local copies of them and links to important positions
+in the videos.
 
 
 
@@ -2364,10 +2480,18 @@ things that happen are:
 
        (find-eev \"eev-blinks.el\" \"find-man\")
 
+TODO: update the text above! I rewrote most
+of `(find-eev-install-intro)' in 2019sep29... See:
+
+  (find-eev-install-intro \"1. Beginners and experts\")
+  (find-eev-install-intro \"2. The expert setup\" \"Here's what\")
+  (find-eev-install-intro \"4. `eev-mode'\")
+
 
 
 
-2. The keybindings
+
+3. The keybindings
 ==================
 `eev-mode' defines its own meanings for lots of meta-shift-letter
 key combinations - which are not normally used by Emacs - and,
@@ -2381,6 +2505,7 @@ besides that, only for:
 
 For the full lists of keybindings, see:
 
+  (find-eev \"eev-mode.el\" \"eev-mode\")
   (find-efunctiondescr        'eev-mode)
   (find-eminormodekeymapdescr 'eev-mode)
   (find-efunctiondescr        'eev-avadj-mode)
@@ -4383,53 +4508,461 @@ A sexp like `(ee-copy-rest ...)' does several things:
   3) it runs CODE to open its target in a window at the right
      side (like as with `M-3 M-e')
 
-\[To do: add examples - including examples that let us create Lua
-scripts etc\]
+\[To do: add examples - including examples that let us create Lua
+scripts etc\]
+
+
+" rest)))
+
+;; (find-links-intro)
+
+;; (find-eevfile "eev-template.el" "defun find-efunction-links")
+
+
+
+
+
+;;;                  _ _       _     
+;;;   ___  ___ _ __ (_) |_ ___| |__  
+;;;  / _ \/ _ \ '_ \| | __/ __| '_ \ 
+;;; |  __/  __/ |_) | | || (__| | | |
+;;;  \___|\___| .__/|_|\__\___|_| |_|
+;;;           |_|                    
+;;
+;; «find-eepitch-intro»  (to ".find-eepitch-intro")
+;; (find-intro-links "eepitch")
+;; (find-eev "eepitch.readme")
+
+(defun find-eepitch-intro (&rest rest) (interactive)
+  (let ((ee-buffer-name "*(find-eepitch-intro)*"))
+    (apply 'find-eintro "\
+\(Re)generate: (find-eepitch-intro)
+Source code:  (find-eev \"eev-intro.el\" \"find-eepitch-intro\")
+More intros:  (find-eev-quick-intro)
+              (find-eval-intro)
+              (find-wrap-intro)
+This buffer is _temporary_ and _editable_.
+It is meant as both a tutorial (for eepitch) and a sandbox.
+
+
+
+
+This intro _complements_ the material in:
+  (find-eev-quick-intro \"6. Controlling shell-like programs\")
+
+This (old) video shows a demo like the one in section 1.3:
+  https://www.youtube.com/watch?v=Lj_zKC5BR64&t=16s
+The relevant part is from t=16s to t=25s.
+
+In this intro we suppose that the reader knows what is a terminal
+and what is a shell. In Unix-like systems the terminal and the
+shell are clearly different programs, and it's easy to understand
+how a terminal can be used to run other programs that are not
+shells (e.g., a Python interpreter; see \"REPL\" below); in
+Windows most people don't know that the \"DOS window\" is in fact
+a Windows console running cmd.exe. Some links:
+  https://en.wikipedia.org/wiki/Pipeline_(Unix)
+  https://en.wikipedia.org/wiki/Unix_philosophy
+  https://en.wikipedia.org/wiki/Unix-like
+  https://en.wikipedia.org/wiki/Shell_(computing)
+  https://en.wikipedia.org/wiki/Shell_(computing)#Text_(CLI)_shells
+  https://en.wikipedia.org/wiki/Shell_script
+  https://en.wikipedia.org/wiki/Command-line_interface
+  https://en.wikipedia.org/wiki/Command-line_interface#Command-line_interpreter
+  https://en.wikipedia.org/wiki/Read-eval-print_loop (\"REPL\")
+  https://en.wikipedia.org/wiki/Terminal_emulator
+  https://en.wikipedia.org/wiki/Text_terminal
+  https://en.wikipedia.org/wiki/MS-DOS#Windows_command-line_interface
+  https://en.wikipedia.org/wiki/Windows_Console
+  https://en.wikipedia.org/wiki/Cmd.exe
+
+
+
+
+
+1. Some demos
+=============
+Let's start with the simplest case. If you put the cursor on the
+first line that starts with a red star below and type the key
+<f8> six times,
+
+ (eepitch-shell)
+ (eepitch-kill)
+ (eepitch-shell)
+echo \"We are at: $PWD\"
+cd /tmp/
+echo \"We changed to: $(pwd)\"
+
+you will notice that each <f8> does something with the current
+line and move the cursor to the next line; first three <f8>s - on
+the lines that start with red stars - create a window setting
+like this,
+
+   ________________________________
+  |                |               |
+  |     notes      |    target     |
+  |     buffer     |    buffer     |
+  |  (this intro)  |  (\"*shell*\")  |
+  |                |               |
+  |________________|_______________|
+  
+and the last three <f8>s - on \"non-red star lines\" - send the
+lines
+
+  echo \"We are at: $PWD\"
+  cd /tmp/
+  echo \"We changed to: $(pwd)\"
+
+to the \"target buffer\", that in this case is the buffer with a
+terminal running a shell; the shell behaves exactly is if the the
+user had typed those three lines at its prompt.
+
+
+
+
+1.1. Another target
+-------------------
+If you put the cursor at the first red star line below and type
+<f8> six times you will get something very similar to the example
+above,
+
+ (eepitch-python)
+ (eepitch-kill)
+ (eepitch-python)
+1 + 2
+print(\"Hello \" +
+      \"world\")
+
+but now the window setting will be like this:
+
+   ________________________________
+  |                |               |
+  |     notes      |     target    |
+  |     buffer     |     buffer    |
+  |  (this intro)  |  (\"*python*\") |
+  |                |               |
+  |________________|_______________|
+
+and the target buffer will be called \"*python*\", and it
+contains a terminal running a Python interpreter.
+
+
+
+
+1.2. Two targets
+----------------
+The demo below uses an advanced feature - the function
+`find-3EE', explained at:
+
+  (find-multiwindow-intro \"find-3EE\")
+
+to create a 3-window setup like this:
+
+   _______________________
+  |          |            |
+  |          |  *shell*   |
+  |  notes   |____________|
+  |  buffer  |            |
+  |          |  *python*  |
+  |__________|____________|
+
+Some non-red star lines in it send the current line to the
+\"*shell*\" buffer, and some send the current line to the
+\"*python*\" buffer. The red star lines with \"(eepitch-shell)\"
+set the target to \"*shell*\", and the red star lines with with
+\"(eepitch-python)\" set the target to \"*python*\". Try it! Put
+the cursor on the first red star line below, then type <f8>
+twelve times:
+
+ (find-3EE '(eepitch-shell) '(eepitch-python))
+ (eepitch-shell)
+echo Hello... > /tmp/o
+
+ (eepitch-python)
+print(open(\"/tmp/o\").read())
+
+ (eepitch-shell)
+echo ...and bye >> /tmp/o
+
+ (eepitch-python)
+print(open(\"/tmp/o\").read())
+
+
+
+
+1.3. Two targets, two windows
+-----------------------------
+The demo below is similar to the one with three windows in the
+previous section, but it uses just two windows - and the window
+at the right alternates between \"*shell*\" and \"*python*\":
+
+ (eepitch-shell)
+ (eepitch-kill)
+ (eepitch-shell)
+echo Hello... > /tmp/o
+
+ (eepitch-python)
+ (eepitch-kill)
+ (eepitch-python)
+print(open(\"/tmp/o\").read())
+
+ (eepitch-shell)
+echo ...and bye >> /tmp/o
+
+ (eepitch-python)
+print(open(\"/tmp/o\").read())
+
+
+
+
+
+
+2. How <f8> works
+=================
+The key <f8> works in one way when the cursor is on a line that
+starts with a red star - it executes everything at the right of
+the \"\" as Lisp code, and then moves down - and in a totally
+different way on non-red star lines: on non-red star lines it
+makes sure that the target buffer is being displayed, then sends
+the current line to the target buffer \"as if the user had typed
+it\", then moves down.
+
+
+
+
+2.1. Eepitch blocks
+-------------------
+A block of three red star lines like
+
+ (eepitch-shell)
+ (eepitch-kill)
+ (eepitch-shell)
+
+or
+
+ (eepitch-python)
+ (eepitch-kill)
+ (eepitch-python)
+
+is called an \"eepitch block\". The _final effect_ of typing <f8>
+thrice on an eepitch block like this
+
+ (eepitch-shell)
+ (eepitch-kill)
+ (eepitch-shell)
+
+is easy to describe: after the third <f8> we get a window setting
+like this,
+
+   ________________________
+  |          |             |
+  |  notes   |    target   |
+  |  buffer  |    buffer   |
+  |          | (\"*shell*\") |
+  |          |             |
+  |__________|_____________|
+
+where the target buffer is running a _new_ shell...
+
+
+
+2.2. `(eepitch-kill)'
+---------------------
+The effect of running <f8> on a line like
+
+ (eepitch-kill)
+
+is to kill the current target. More precisely, `(eepitch-kill)'
+kills a buffer with the name stored in the variable
+`eepitch-buffer-name', if a buffer with that name exists; in the
+examples above the target buffer names are always either
+\"*shell*\" or \"*python*\". If we are in a window setting like
+this and the target is \"*shell*\"
+
+   ________________________
+  |          |             |
+  |  notes   |    target   |
+  |  buffer  |    buffer   |
+  |          | (\"*shell*\") |
+  |          |             |
+  |__________|_____________|
+
+and we run `(eepitch-kill)' the window setting becomes this:
+
+   _____________________
+  |          |          |
+  |  notes   |   some   |
+  |  buffer  |  other   |
+  |          |  buffer  |
+  |          |          |
+  |__________|__________|
+
+which may be confusing...
+
+
+
+
+2.2. `(eepitch-shell)'
+----------------------
+The effect of running <f8> on a line like
+
+ (eepitch-shell)
+
+can be *roughly* described as:
+
+  a) Set the name of the target buffer to \"*shell*\".
+
+  b) If the target buffer does not exist, create it - by
+     running `(shell)'.
+
+  c) If the target buffer is not being display then display it -
+     by creating a two-window setting with the target buffer at
+     the right.
+
+This is a simplification, though... the sexp
+
+  (eepitch-shell)
+
+runs this,
+
+  (eepitch '(shell))
+
+and the name of the target buffer is obtained from the
+sexp `(shell)' by running it in a certain way.
+
+
+
+
+2.3. `eepitch'
+--------------
+The documentation for `eepitch' says:
+
+  (eepitch CODE)
+
+  Set up a target for eepitch and make sure it is displayed in
+  another window.
+  The argument CODE must be a \"shell-like sexp\", i.e., one that
+  when evaluated always switches to a buffer with a fixed name,
+  and when that buffer does not exists it creates it.
+
+For example, running `(shell)' switches to a buffer whose name is
+\"*shell*\"; the name of the target buffer can obtained
+from the sexp `(shell)' by running this:
+
+  (save-window-excursion
+    (shell)
+    (setq eepitch-buffer-name
+         (buffer-name (current-buffer))))
+
+
+
+
+2.4. `(eepitch-python)'
+-----------------------
+The effect of running <f8> on a line like
+
+ (eepitch-python)
+
+is very similar to `(eepitch-shell)', but it uses \"*python*\" as
+the name of the target buffer. `(eepitch-python)' is defined as:
+
+  (eepitch '(find-comintprocess \"python\" \"python\"))
+
+
+
+
+2.5. `find-comintprocess'
+-------------------------
+The sexp
+
+  (find-comintprocess \"buffer name\" \"program and args\")
+
+switches to a buffer called \"*buffer name*\" and if that buffer
+does not have an associated process then it runs \"program and
+args\" there in comint mode.
+
+The sexp
+
+  (eepitch-comint \"buffer name\" \"program and args\")
+
+works as an abbreviation for:
+
+  (eepitch '(find-comintprocess \"buffer name\" \"program and args\"))
+
+Most `eepitch-<lang>' functions are defined using
+`eepitch-comint'. See:
+
+  (find-eev \"eepitch.el\" \"eepitch-langs\")
+  (find-eev \"eepitch.el\" \"find-comintprocess\")
+  (find-eev \"eepitch.el\" \"find-comintprocess\" \"defun eepitch-comint \")
+
+
+
+
+3. Test blocks
+==============
+Suppose that we have a file \"foo.py\" containing this (without
+the indentation):
+
+  def square (x):
+      return x*x
+
+  \"\"\"
+   (eepitch-python)
+   (eepitch-kill)
+   (eepitch-python)
+  execfile(\"foo.py\", globals())
+  print(square(5))
+
+  \"\"\"
 
+Python treats everything between the first and the second
+`\"\"\"'s as a multiline comment, and ignores it - but for us
+this multiline comment contains an eepitch block that starts a
+Python interpreter, then a line that loads \"foo.py\" in it, then
+a line that tests the function \"square\" defined in foo.py. We
+call the block between the `\"\"\"'s a \"test block\".
 
-" rest)))
+A \"test block\" is a multiline comment in a Python script, a Lua
+script, or in a script in one of the other supported languages -
+we call them the \"ambient script\" and the \"ambient language\"
+- that contains at least:
 
-;; (find-links-intro)
+  1) an eepitch block that runs an interpreter for the ambient
+     language,
 
-;; (find-eevfile "eev-template.el" "defun find-efunction-links")
+  2) a line that loads the ambient script in that interpreter,
 
+  3) code that tests functions defined in the ambient script.
 
+We can insert a test block in the current buffer by running `M-x
+ee-insert-test-python', `M-x ee-insert-test-lua', etc... for the
+list of supported languages, see:
 
+  (find-eev \"eev-testblocks.el\" \"ee-insert-test\")
 
+These `ee-insert-test-<lang>'s use the name of the current buffer
+in the line that loads the ambient script into in the
+interpreter.
 
-;;;                  _ _       _     
-;;;   ___  ___ _ __ (_) |_ ___| |__  
-;;;  / _ \/ _ \ '_ \| | __/ __| '_ \ 
-;;; |  __/  __/ |_) | | || (__| | | |
-;;;  \___|\___| .__/|_|\__\___|_| |_|
-;;;           |_|                    
-;;
-;; «find-eepitch-intro»  (to ".find-eepitch-intro")
-;; (find-intro-links "eepitch")
-;; (find-eev "eepitch.readme")
+The command `M-x eeit' runs `ee-insert-test', that tries to
+detect the ambient language from major mode and then runs the
+correct `ee-insert-test-<lang>' based on it. `M-x eeit' is
+currently not very smart - see the source:
 
-(defun find-eepitch-intro (&rest rest) (interactive)
-  (let ((ee-buffer-name "*(find-eepitch-intro)*"))
-    (apply 'find-eintro "\
-\(Re)generate: (find-eepitch-intro)
-Source code:  (find-eev \"eev-intro.el\" \"find-eepitch-intro\")
-More intros:  (find-eev-quick-intro)
-              (find-eval-intro)
-              (find-wrap-intro)
-This buffer is _temporary_ and _editable_.
-It is meant as both a tutorial (for eepitch) and a sandbox.
+  (find-eev \"eev-testblocks.el\" \"ee-insert-test\")
 
 
 
-Note: this intro needs to be rewritten!
-Ideally it should _complement_ the material in:
-  (find-eev-quick-intro \"6. Controlling shell-like programs\")
 
 
+-=-=-=-=-
+Old stuff:
 
 
-The motivation for eepitch: taking notes and redoing
-====================================================
+
+1. Motivation
+=============
 Suppose that we have to do some reasonably complex task using a
 shell, and that we want to take notes of what we do because we
 might have to do something similar later.
@@ -4467,8 +5000,10 @@ explained later.
 
 
 
-The main key: <F8>
-==================
+
+
+2. The main key: <F8>
+=====================
 Emacs can run a shell in a buffer, and it can split its frame
 into windows, like this:
    ___________________
@@ -4514,8 +5049,8 @@ echo \"We changed to: $(pwd)\"
 
 
 
-Other targets
-=============
+3. Other targets
+================
 Just like `(eepitch-shell)' creates a shell buffer and sets the
 eepitch target to it, `(eepitch-python)' creates a buffer with a
 Python interpreter and uses it as the eepitch target. Try:
@@ -4557,8 +5092,8 @@ print(open(\"/tmp/o\").read())
 
 
 
-More on eepitch-kill
-====================
+4. More on eepitch-kill
+=======================
 Note that `(eepitch-kill)' kills the _current_ target, that may
 or may not be a shell buffer, a Python interaction buffer, etc...
 That explains the first line in blocks like:
@@ -4582,8 +5117,8 @@ erasing all definitions done in previous sessions.
 
 
 
-Creating eepitch blocks: `M-T'
-==============================
+5. Creating eepitch blocks: `M-T'
+=================================
 Write just \"shell\" or \"python\" in a line, then type
 `M-T' (i.e., meta-shift-t) there. The line will be turned into
 three - an \" (eepitch-xxx)\", an \" (eepitch-kill)\", and an
@@ -4599,8 +5134,8 @@ pwd
 
 
 
-Red stars
-=========
+6. Red stars
+============
 Eepitch.el sets the glyph for the char 15 to a red star in the
 standard display table. In layman's terms: eepitch.el tells Emacs
 that the character 15 should be displayed as a red star. The
@@ -4610,8 +5145,8 @@ literal ^O in a buffer by typing `C-q C-o'.
 
 
 
-For more information
-====================
+7. For more information
+=======================
 On hyperlinks:               (find-eval-intro)
 On keys similar to `M-T':    (find-wrap-intro)
 An older text about eepitch:
@@ -5934,16 +6469,21 @@ that page of the book!
 \(Re)generate: (find-brxxx-intro)
 Source code:  (find-eev \"eev-intro.el\" \"find-brxxx-intro\")
 More intros:  (find-eev-quick-intro)
-              (find-eval-intro)
-              (find-eepitch-intro)
+              (find-eev-intro)
+              (find-psne-intro)
+              (find-pdf-like-intro)
 This buffer is _temporary_ and _editable_.
 It is meant as both a tutorial and a sandbox.
 
 
 
-Note: this intro needs to be rewritten!
-It expands an idea that was mentioned briefly at:
+This intro expands an idea that was mentioned briefly at:
   (find-eev-quick-intro \"3.1. Non-elisp hyperlinks\")
+and combines it with the idea of \"local copies\" from:
+  (find-psne-intro \"the second way\")
+  (find-psne-intro \"1. Local copies of files from the internet\")
+  (find-psne-intro \"5. `browse-url' and friends\")
+
 
 
 
@@ -5951,10 +6491,175 @@ It expands an idea that was mentioned briefly at:
 ===============
 We saw in
 
+  (find-eev-quick-intro \"3.1. Non-elisp hyperlinks\")
+
+that eev defines some functions with names starting with `br'
+that are similar to `browse-url', and we saw in
+
+  (find-psne-intro \"the second way\")
+  (find-psne-intro \"1. Local copies of files from the internet\")
+  (find-psne-intro \"3. The new way: M-x brep\")
+
+how to create local copies of files; after downloading a local
+copy of, say,
+
+  http://www.gnu.org/software/emacs/emacs-paper.html
+
+into
+
+  $S/http/www.gnu.org/software/emacs/emacs-paper.html
+
+you can open the local copy by running `M-x browse-url', `M-x brg'
+or `M-x brff' on the \"file:///\" URL below,
+
+  file:///home/edrx/snarf/http/www.gnu.org/software/emacs/emacs-paper.html
+
+but note that the \"file:///\" URL has an \"edrx\" - my username
+- in the middle of the file name, so this only works without
+changes if you use \"edrx\" as your username...
+
+
+
+
+2. The `l' variants
+===================
+After creating `brg' and `brff' I created variants of them that
+would open the local copy of the URL at point instead of the
+original URL - or, more precisely, that would open the result of
+applying `ee-url-to-local-url' to the original URL. Try:
+
+  (ee-url-to-local-url
+   \"http://www.gnu.org/software/emacs/emacs-paper.html\";)
+
+These variants were called `brgl' and `brffl' - I used the
+convention that the suffix `l' meant \"use the local copy\".
+
+
+
+3. The `d' variants
+===================
+After creating `brgl' and `brffl' I realized that it would be
+easy to create variants of them that would work in dired mode.
+If we visit a directory - for example, this one,
+
+  (find-fline \"$S/http/www.gnu.org/software/emacs/\")
+
+and we put the point in a line with an HTML on it - for example,
+on the line with the \"emacs-paper.html\" - then typing `M-x
+brgd' there converts the full pathname of the file at point to a
+\"file:///\" URL, like this,
+
+                          $S/http/www.gnu.org/software/emacs/emacs-paper.html
+  -> file:///home/edrx/snarf/http/www.gnu.org/software/emacs/emacs-paper.html
+
+and opens the resulting \"file:///\" url with `brg'.
+
+The suffix `d' means \"use the file in this line in dired\".
+
+
+
+
+4. `brxxx'-functions
+====================
+`browse-url' has several variants, with names like
+`browse-url-firefox' and `browse-url-chromium', that open the URL
+at point using specific programs. See:
+
+  (find-epackage 'browse-url)
+  (find-enode \"Browse-URL\")
+
+We say that `brg', `brgl' and `brgd' are \"`brxxx'-functions\"
+with \"base function\" `find-googlechrome'; `brgl' is the `l' (or
+\"local\") variant, and `brgd' is the `d' (or \"dired\") variant;
+`brg' is sometimes called the \"remote\" variant.
+
+
+
+
+5. `code-brurl'
+===============
+Remember that `code-c-d' generates lisp code and executes it, and
+that `find-code-c-d' generates the same lisp code as `code-c-d'
+but displays it instead of executing it; this was explained, with
+examples, here:
+
+  (find-eev-quick-intro \"9.1. `code-c-d'\")
+  (find-eev-quick-intro \"9.1. `code-c-d'\" \"find-code-c-d\")
+
+Eev has a function called `code-brurl' that works like `code-c-d'
+and that creates several `brxxx'-functions with the same base
+function. To understand what the `code-brurl' sexp below does,
+
+  ;; From:
+  ;; (find-eev \"eev-brxxx.el\" \"code-brxxxs\")
+  ;; (find-eev \"eev-brxxx.el\" \"code-brxxxs\" \"brg\")
+
+  (code-brurl 'find-googlechrome  :remote 'brg  :local 'brgl  :dired 'brgd)
+
+We run:
+
+  (find-code-brurl 'find-googlechrome  :remote 'brg  :local 'brgl  :dired 
'brgd)
+
+Note that the base function in this example is
+`find-googlechrome', that is a function that expects a URL.
+
+
+
+
+6. `code-brfile'
+================
+We saw how to create `brxxx'-functions using `find-googlechrome'
+as the base function; remember that `find-googlechrome' is a
+function that expects a URL.
+
+If we download a local copy of a PDF, like we did here,
+
+  (find-pdf-like-intro \"2. Preparation\")
+
+      https://tannerlectures.utah.edu/_documents/a-to-z/c/Coetzee99.pdf
+  -> $S/https/tannerlectures.utah.edu/_documents/a-to-z/c/Coetzee99.pdf
+
+then it makes sense to have a `brxxx'-function, called `brpdfl',
+that we can run on the \"https://\"; URL above, and that will open
+the \"$S/https/\" file corresponding to the URL using
+`find-pdf-page'... but `find-pdf-page' is a function that expects
+a filename, not a URL, so `code-brurl' wouldn't work...
+
+What we want can be done by the sexp below:
+
+  ;; From:
+  ;; (find-eev \"eev-pdflike.el\" \"code-brxxxs\")
+  ;; (find-eev \"eev-pdflike.el\" \"code-brxxxs\" \"brpdfl\")
+  (code-brfile 'find-pdf-page  :local 'brpdfl  :dired 'brpdfd)
+
+To understand what it does, run:
+
+  (find-code-brfile 'find-pdf-page  :local 'brpdfl  :dired 'brpdfd)
+
+and read the docstrings.
+
+Note that in the previous section we had a \":remote 'brg\", that
+defined a remote variant. It doesn't make sense to apply
+`find-pdf-page' to a remote URL, so we don't have a \":remote\"
+here.
+
+
+
+
+Old stuff:
+(TODO: revise it!)
+
+
+
+
+7. Old introduction
+===================
+We saw in
+
   (find-psne-intro)
   (find-psne-intro \"M-x brep\")
   (find-psne-intro \"M-x brfl\")
-  (find-psne-intro \"`browse-url' and friends\")
+  (find-psne-intro \"5. `browse-url' and friends\")
 
 that we can use `M-x brep' to download local copies of files from
 the internet, and that `M-x brfl' on a URL runs `find-fline' on
@@ -5976,7 +6681,7 @@ brxxx-functions from base functions.
 
 
 
-2. A first example
+8. A first example
 ==================
 Let's define two trivial base functions, one that expects a URL,
 and another one that expects a file name:
@@ -6034,7 +6739,7 @@ to that URL.
 
 
 
-3. The conversions
+9. The conversions
 ==================
 One underlying idea behind all this is that we have two
 conversion functions, one from URLs to file names, and another
@@ -6062,8 +6767,8 @@ execute:
 
 
 
-4. Naming conventions for brxxx-functions
-=========================================
+10. Naming conventions for brxxx-functions
+==========================================
 By convention, each name for a brxxx-function is composed of a
 prefix, a stem, and a suffix. The prefix is always \"br\", the
 stem is a mnemonic for the base function, and the suffix is
@@ -6102,8 +6807,8 @@ In our example with `foo-url' and `foo-file' we had:
 
 
 
-5. Calling `code-brurl' and `code-brfile'
-=========================================
+11. Calling `code-brurl' and `code-brfile'
+==========================================
 
   (code-brurl '<U-function>
                    :remote 'br<stem>   :local 'br<stem>l   :dired 'br<stem>d)
@@ -6126,8 +6831,8 @@ curious about the inspirations behind it, here they are:
 
 
 
-6. The dired variation
-======================
+12. The dired variation
+=======================
 
 In dired mode each line corresponds to a file
 
@@ -6165,10 +6870,21 @@ It is meant as both a tutorial and a sandbox.
 
 
 
-Note: this intro needs to be rewritten!
-It expands an idea that was mentioned briefly at:
-  (find-eev-quick-intro \"9.3. Hyperlinks to PDF files\")
-  (find-eev-quick-intro \"9.3. Hyperlinks to PDF files\" \"local copies\")
+
+Note: this intro is being rewritten!
+We mentioned briefly in
+
+  (find-pdf-like-intro \"2. Preparation\")
+
+that there are two \"natural\" ways to store a local copy of a
+file from the internet... here we will discuss the second way, in
+which the conversion from URL to a local file name works like
+this:
+
+      https://tannerlectures.utah.edu/_documents/a-to-z/c/Coetzee99.pdf
+  -> $S/https/tannerlectures.utah.edu/_documents/a-to-z/c/Coetzee99.pdf
+
+
 
 
 
@@ -6561,6 +7277,55 @@ each call to a short hyperlink of the form 
`find-xxxaudio' or
 
 
 
+4.3. A demo
+-----------
+Here's some code to test `find-video' and `code-video'. Make sure
+that you have mpv installed, and run this escript block:
+
+ (eepitch-shell)
+ (eepitch-kill)
+ (eepitch-shell)
+  # http://www.youtube.com/watch?v=K6LmZ0A1s9U
+  # http://angg.twu.net/eev-videos/Punch_and_Judy_Mark_Poulton-K6LmZ0A1s9U.mp4
+  mkdir ~/eev-videos/
+  cd    ~/eev-videos/
+  wget -nc 
http://angg.twu.net/eev-videos/Punch_and_Judy_Mark_Poulton-K6LmZ0A1s9U.mp4
+
+It will download a copy of a video from youtube; I prepared the
+.mp4 by running \"youtube-dl -f 18\" on the youtube URL and
+renaming the result.
+
+Then try:
+
+  (find-video \"~/eev-videos/Punch_and_Judy_Mark_Poulton-K6LmZ0A1s9U.mp4\")
+  (code-video \"punchandjudyvideo\" 
\"~/eev-videos/Punch_and_Judy_Mark_Poulton-K6LmZ0A1s9U.mp4\")
+  (find-punchandjudyvideo)
+  (find-punchandjudyvideo \"0:00\")
+  (find-punchandjudyvideo \"0:10\" \"calls the baby\")
+  (find-punchandjudyvideo \"0:40\" \"where's the baby\")
+  (find-punchandjudyvideo \"1:04\" \"right position\")
+  (find-punchandjudyvideo \"1:17\" \"he will sing the baby to sleep\")
+  (find-punchandjudyvideo \"1:33\" \"1-2-3\")
+  (find-punchandjudyvideo \"1:48\" \"baby downstairs\")
+  (find-punchandjudyvideo \"3:12\" \"slaps\")
+  (find-punchandjudyvideo \"3:50\" \"1-2-3\")
+  (find-punchandjudyvideo \"4:34\" \"you keep an eye on mr Punch\")
+  (find-punchandjudyvideo \"4:46\" \"hat\")
+  (find-punchandjudyvideo \"5:03\" \"hat\")
+  (find-punchandjudyvideo \"5:25\" \"did you see him?\")
+  (find-punchandjudyvideo \"5:55\" \"clown\")
+  (find-punchandjudyvideo \"6:14\" \"slaps\")
+  (find-punchandjudyvideo \"6:52\" \"sausages\")
+  (find-punchandjudyvideo \"7:24\" \"crocodile\")
+  (find-punchandjudyvideo \"8:07\" \"crocodile + sausages\")
+  (find-punchandjudyvideo \"8:32\" \"another scene\")
+  (find-punchandjudyvideo \"8:39\" \"fight\")
+  (find-punchandjudyvideo \"9:03\" \"clown\")
+  (find-punchandjudyvideo \"9:45\" \"mr punch\")
+
+
+
+
 5. Passing options to mplayer
 =============================
 By default mplayer is called with just a few command-line options,
@@ -7049,7 +7814,7 @@ and the letter \"E\" is a variant of \"e\" that uses
 variant of `find-3ee' that restarts both targets. Let's adapt
 this example,
 
-  (find-eepitch-intro \"Other targets\")
+  (find-eepitch-intro \"3. Other targets\")
 
 to make it show the two eepitch targets at once in a three-window
 settings. It becomes:
@@ -7159,6 +7924,10 @@ moves down, to create tutorials for Emacs modes. An 
example:
 
 10. A tutorial for Info mode
 ============================
+Note: this is obsolete! It was superseded by:
+
+  (find-eev-quick-intro \"5.1. Navigating the Emacs manuals\")
+
 Here's a mini-tutorial for Info mode, demonstrating how to
 navigate in Info using the usual movement keys, plus TAB,
 <backtab>, RET, l (last), u (up), n (next), p (prev), q (quit),
@@ -9053,46 +9822,138 @@ It is meant as both a tutorial and a sandbox.
 
 
 
-Google Tech talk by Carsten Dominik (2008)
-==========================================
-http://orgmode.org/talks.html
-http://orgmode.org/worg/org-tutorials/org-screencasts/org-mode-google-tech-talk.html
-http://www.youtube.com/watch?v=oJTwQvgfgMM Emacs Org-mode - a system for 
note-taking and project planning
-\(find-youtubedl-links \"/sda5/videos/\" 
\"Emacs_Org-mode_-_a_system_for_note-taking_and_project_planning\" 
\"oJTwQvgfgMM\" \".flv\" \"carsten2008\")
-                     (ee-youtubedl-hash-to-fname \"oJTwQvgfgMM\")
-\(setq ee-carsten2008 (ee-youtubedl-hash-to-fname \"oJTwQvgfgMM\"))
-\(code-mplayer \"carsten2008\" ee-carsten2008)
-\(find-carsten2008 \"0:00\")
+Eev does some things similar to Org, but using a different
+approach and different design principles. This sandboxed tutorial
+is a _first attempt_ to show to Org users how to use Org and eev
+at the same time, in the same files (or buffers).
+
+Note: I wrote this after giving a presentation about eev in the
+EmacsConf 2019 and getting some help from Org users there (mainly
+Amin Bandali). Link:
+
+  http://angg.twu.net/emacsconf2019.html
+
+
+
+
+1. Preparation
+==============
+Run these sexps:
+
+  (code-c-d \"org\" (ee-locate-library \"org.el\") \"org\" :gz)
+  (require 'org)
+  (require 'ob-sh)
+  ;; or: (require 'ob-shell)
+  (require 'ob-python)
+
+
+
+2. Toggling org-mode on and off
+===============================
+Use these sexps,
+
+  (org-mode)
+  (fundamental-mode)
+
+or `M-x org-mode' and `M-x fundamental-mode'.
+
+
+
+3. Comment blocks
+=================
+If you are using an org file that is meant for exporting you can
+mark as comments the more eev-ish parts in it, like this...
+
+# (find-orgnode \"Comment lines\")
+# (find-orgnode \"Exporting\")
+
+#+BEGIN_COMMENT
+# Run the eepitch block below to download a copy of my messy
+# notes on org. See:
+# (find-eev-quick-intro \"6. Controlling shell-like programs\")
+
+ (eepitch-shell)
+ (eepitch-kill)
+ (eepitch-shell)
+cd /tmp/
+rm -fv org.e
+wget http://angg.twu.net/e/org.e
+
+#+END_COMMENT
+
+
+
+
+4. Running code from my org.e
+=============================
+The code in comments in the previous section downloads a local
+copy of my executable notes (i.e., my \"e-scripts\") on Org. Run
+it, and compare:
+
+# http://angg.twu.net/e/org.e.html#git
+# (find-anchor \"/tmp/org.e\" \"git\")
+
+The URL above points to my notes on downloading Org from git and
+compiling its docs. The sexp hyperlinks below it lets you execute
+these notes.
+
+
+
+
+5. Evaluating source blocks
+===========================
+You can execute a source block in Org and display its results
+with `C-c C-c'. See:
+
+# (find-orgnode \"Working With Source Code\")
+# (find-orgnode \"Evaluating code blocks\")
+
+Try it here:
+
+#+BEGIN_SRC sh
+seq 200 204
+#+END_SRC
+
+Compare that with:
+
+# (find-sh \"seq 200 204\")
+
+and compare
+
+#+BEGIN_SRC python
+def square (x):
+    return x*x
+
+print(square(5))
+#+END_SRC
+
+with:
+
+#+BEGIN_COMMENT
+ (eepitch-python)
+ (eepitch-kill)
+ (eepitch-python)
+def square (x):
+    return x*x
+
+print(square(5))
+
+#+END_COMMENT
+
+
+
+
+5. Sectioning
+=============
+Not yet!
+How do I mark a section as \"don't export this\"?
+
+  (find-orgnode \"Headlines\")
+  (find-orgnode \"Global and local cycling\")
+  (find-efunctiondescr 'org-mode \"TAB\" \"org-cycle\")
+  (find-efunctiondescr 'org-shifttab)
+
 
-\(eev-avadj-mode 1)
-\(find-carsten2008 t)
-
-1:20 Carsten Start
-1:50 History
-2:15 Working with Text Files
-3:58 Notes (not tasks) based project planning
-5:50 Outline mode - fixing
-9:56 Structure Editing
-11:00 Note taking other supports
-13:35 Meta data Intro
-14:57 tags
-15:26 Timeplanning
-15:53 Properties
-16:02 Meta data propagation
-16:49 Special Meta entry interfaces
-17:55 DateTime interface
-18:24 Column view
-19:20 Capture with remember
-23:02 Collect and Display
-23:52 Sparse tree
-25:47 Agenda view
-27:27 Exporting and publishing
-29:05 Tables
-31:34 Calc
-32:44 Radio tables
-34:53 Context sensitive keys
-38:13 How is org used
-40:55 Evolved Software software
 
 " pos-spec-list)))
 
diff --git a/eev-load.el b/eev-load.el
index 4275783..b6ddd2d 100644
--- a/eev-load.el
+++ b/eev-load.el
@@ -20,7 +20,7 @@
 ;;
 ;; Author:     Eduardo Ochs <address@hidden>
 ;; Maintainer: Eduardo Ochs <address@hidden>
-;; Version:    2019apr06
+;; Version:    2019sep29
 ;; Keywords:   e-scripts
 ;;
 ;; Supersedes: (find-eev "eev-all.el")
@@ -139,6 +139,7 @@
 (require 'eev-codings)        ; (find-eev "eev-codings.el")
 (require 'eev-env)            ; (find-eev "eev-env.el")
 (require 'eev-edit)            ; (find-eev "eev-edit.el")
+(require 'eev-testblocks)      ; (find-eev "eev-testblocks.el")
 ;;
 ;; Hyperlinks to audio, video, and IRC. Not well documented. See:
 ;;   (find-audiovideo-intro)
diff --git a/eev-mode.el b/eev-mode.el
index 417e3b2..8304f66 100644
--- a/eev-mode.el
+++ b/eev-mode.el
@@ -19,7 +19,7 @@
 ;;
 ;; Author:     Eduardo Ochs <address@hidden>
 ;; Maintainer: Eduardo Ochs <address@hidden>
-;; Version:    2019aug15
+;; Version:    2019oct16
 ;; Keywords:   e-scripts
 ;;
 ;; Latest version: <http://angg.twu.net/eev-current/eev-mode.el>
@@ -212,7 +212,7 @@ and: (find-eval-intro \"`M-k'\")"
 (defvar eev-mode-lighter " eev")
 (defvar eev-mode-help "Toggle eev mode, i.e, activate or deactivate the 
`eev-mode-map' keymap.
 With a prefix argument ARG, turn eev-mode on if positive, else off.
-See: (find-eev-intro)
+See: (find-emacs-keys-intro \"1. Basic keys (eev)\")
 \\<eev-mode-map>
 Commands to follow hyperlinks:
   \\[ee-eval-sexp-eol] -- go to the end of line, then do \\[ee-eval-last-sexp]
@@ -244,12 +244,6 @@ Commands to convert the current line into hyperlinks:
     See: (find-wrap-intro)
 Commands to generate pages with lists of hyperlinks:
   \\[find-here-links]  -- \"hyperlinks to here\", which supersedes all these:
-    \\[find-file-links]   -- hyperlinks to the current file
-    \\[find-find-eintro-or-einfo-links] -- hyperlinks to the current intro, or 
Info node
-    \\[find-grep-links] -- hyperlinks to `find-xxxgrep' sexps
-    \\[find-manpage-links] -- hyperlinks to a manpage (ask for name)
-    \\[find-last-manpage-links]   -- hyperlinks to a manpage (being viewed)
-    See: (find-links-intro \"`find-here-links'\")
   \\[find-efunction-links] -- hyperlinks to an Emacs function
   \\[find-ekey-links] -- hyperlinks to a key sequence and to the function
              associated to it
@@ -257,6 +251,8 @@ Commands to generate pages with lists of hyperlinks:
   \\[find-eface-links] -- hyperlinks to a face (default: face at point)
   \\[find-debpkg-links] -- hyperlinks about a Debian package
   \\[find-ecolor-links]   -- hyperlinks to a color
+  (find-eev-quick-intro \"4.2. `find-ekey-links' and friends\")
+  (find-here-links-intro)
 Commands to edit hyperlinks:
   \\[ee-duplicate-this-line] -- duplicate this line
   \\[ee-yank-pos-spec] -- yank into pos-spec-list
@@ -290,6 +286,14 @@ Other commands:
 
 ;; Deleted code:
 ;;
+;;  \\[find-here-links]  -- \"hyperlinks to here\", which supersedes all these:
+;;    \\[find-file-links]   -- hyperlinks to the current file
+;;    \\[find-find-eintro-or-einfo-links] -- hyperlinks to the current intro, 
or Info node
+;;    \\[find-grep-links] -- hyperlinks to `find-xxxgrep' sexps
+;;    \\[find-manpage-links] -- hyperlinks to a manpage (ask for name)
+;;    \\[find-last-manpage-links]   -- hyperlinks to a manpage (being viewed)
+;;    See: (find-links-intro \"`find-here-links'\")
+
 ;; Run the default bounded action (usually `eev-bounded'):
 ;; (define-key eev-mode-map [f3]   'eeb-default)
 ;; Steppers:
diff --git a/eev-pdflike.el b/eev-pdflike.el
index 9f00ea0..e1670e8 100644
--- a/eev-pdflike.el
+++ b/eev-pdflike.el
@@ -19,7 +19,7 @@
 ;;
 ;; Author:     Eduardo Ochs <address@hidden>
 ;; Maintainer: Eduardo Ochs <address@hidden>
-;; Version:    2019jul11
+;; Version:    2019oct03
 ;; Keywords:   e-scripts
 ;;
 ;; Latest version: <http://angg.twu.net/eev-current/eev-pdflike.el>
@@ -525,8 +525,10 @@ may want to put here code that cleans up that page 
information.")
 
 
 ;; «code-brxxxs» (to ".code-brxxxs")
-
+;; See: (find-brxxx-intro "6. `code-brfile'")
+(code-brfile 'find-pdf-page    :local 'brpdfl      :dired 'brpdfd)
 (code-brfile 'find-pdf-text    :local 'brpdftextl  :dired 'brpdftextd)
+
 (code-brfile 'find-djvu-text   :local 'brdjvutextl :dired 'brdjvutextd)
 (code-brfile 'find-xpdf-page   :local 'brxpdfl     :dired 'brxpdfd)
 (code-brfile 'find-evince-page :local 'brevincel   :dired 'brevinced)
diff --git a/eev-plinks.el b/eev-plinks.el
index b02346a..6936b76 100644
--- a/eev-plinks.el
+++ b/eev-plinks.el
@@ -242,9 +242,7 @@
 ;; «find-comintprocess» (to ".find-comintprocess")
 ;; `find-comintprocess-ne' and `find-comintprocess' are defined in
 ;; eepitch.el. See:
-;;   (find-eevfile "eepitch.el" "defun find-comintprocess-ne ")
-;;   (find-eevfile "eepitch.el" "defun find-comintprocess ")
-
+;;   (find-eev "eepitch.el" "find-comintprocess")
 
 
 
diff --git a/eev-testblocks.el b/eev-testblocks.el
new file mode 100644
index 0000000..538b921
--- /dev/null
+++ b/eev-testblocks.el
@@ -0,0 +1,138 @@
+;;; eev-testblocks.el - create "test blocks" using multiline comments.
+
+;; Copyright (C) 2019 Free Software Foundation, Inc.
+;;
+;; This file is part of GNU eev.
+;;
+;; GNU eev is free software: you can redistribute it and/or modify
+;; it under the terms of the GNU General Public License as published by
+;; the Free Software Foundation, either version 3 of the License, or
+;; (at your option) any later version.
+;;
+;; GNU eev is distributed in the hope that it will be useful,
+;; but WITHOUT ANY WARRANTY; without even the implied warranty of
+;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+;; GNU General Public License for more details.
+;;
+;; You should have received a copy of the GNU General Public License
+;; along with GNU Emacs.  If not, see <http://www.gnu.org/licenses/>.
+;;
+;; Author:     Eduardo Ochs <address@hidden>
+;; Maintainer: Eduardo Ochs <address@hidden>
+;; Version:    2019sep29
+;; Keywords:   e-scripts
+;;
+;; Latest version: <http://angg.twu.net/eev-current/eev-testblocks.el>
+;;       htmlized: <http://angg.twu.net/eev-current/eev-testblocks.el.html>
+;;       See also: <http://angg.twu.net/eev-current/eev-readme.el.html>
+;;                 <http://angg.twu.net/eev-intros/find-eev-intro.html>
+;;                 <http://angg.twu.net/eev-intros/find-links-intro.html>
+;;                                                (find-eev-intro)
+;;                                                (find-links-intro)
+
+;;; Commentary:
+
+;; A "test block" is a multiline comment that... see:
+;;
+;;   (find-eepitch-intro "3. Test blocks")
+
+
+
+
+;;;                  _                     _        _            _   
+;;;   ___  ___      (_)_ __  ___  ___ _ __| |_     | |_ ___  ___| |_ 
+;;;  / _ \/ _ \_____| | '_ \/ __|/ _ \ '__| __|____| __/ _ \/ __| __|
+;;; |  __/  __/_____| | | | \__ \  __/ |  | ||_____| ||  __/\__ \ |_ 
+;;;  \___|\___|     |_|_| |_|___/\___|_|   \__|     \__\___||___/\__|
+;;;                                                                  
+;; «ee-insert-test»  (to ".ee-insert-test")
+;; See: (find-eepitch-intro "3. Test blocks")
+;; Insert a "test block" in a Lua/Python/Ruby/shell/Tcl script.
+
+
+(defalias 'eeit 'ee-insert-test)
+
+(defun ee-insert-test ()
+  "Insert an \"test block\" - an eepitch block in a multiline comment."
+  (interactive)
+  (cond ((eq major-mode 'lua-mode)    (ee-insert-test-lua))
+        ((eq major-mode 'python-mode) (ee-insert-test-python))
+        ((eq major-mode 'ruby-mode)   (ee-insert-test-ruby))
+        ((eq major-mode 'sh-mode)     (ee-insert-test-sh))
+        ((eq major-mode 'tcl-mode)    (ee-insert-test-tcl))
+       (t (error "ee-insert-test: Unsupported major mode"))))
+
+(defun ee-insert-test-lua ()
+  (interactive)
+  (insert (format "
+--[[
+ (eepitch-lua51)
+ (eepitch-kill)
+ (eepitch-lua51)
+dofile \"%s\"
+
+--]]
+" (buffer-name))))
+
+(defun ee-insert-test-python ()
+  (interactive)
+  (insert (format "
+\"\"\"
+ (eepitch-python)
+ (eepitch-kill)
+ (eepitch-python)
+execfile(\"%s\", globals())
+
+\"\"\"
+" (buffer-name))))
+
+(defun ee-insert-test-ruby ()
+  (interactive)
+  (insert (format "
+=begin
+ (eepitch-ruby)
+ (eepitch-kill)
+ (eepitch-ruby)
+load \"%s\"
+
+=end
+" (buffer-name))))
+
+(defun ee-insert-test-sh ()
+  (interactive)
+  (insert (format "
+: <<'%%%%%%%%%%'
+ (eepitch-sh)
+ (eepitch-kill)
+ (eepitch-sh)
+. %s
+
+%%%%%%%%%%
+" (buffer-name))))
+
+(defun ee-insert-test-tcl ()
+  (interactive)
+  (insert (format "
+set COMMENTED_OUT {
+ (eepitch-tclsh)
+ (eepitch-kill)
+ (eepitch-tclsh)
+source %s
+
+}
+" (buffer-name))))
+
+
+
+
+
+(provide 'eev-testblocks)
+
+
+
+
+
+;; Local Variables:
+;; coding:            utf-8-unix
+;; no-byte-compile:   t
+;; End:
diff --git a/eev-tlinks.el b/eev-tlinks.el
index 98416d6..56b84e1 100644
--- a/eev-tlinks.el
+++ b/eev-tlinks.el
@@ -19,7 +19,7 @@
 ;;
 ;; Author:     Eduardo Ochs <address@hidden>
 ;; Maintainer: Eduardo Ochs <address@hidden>
-;; Version:    2019aug17
+;; Version:    2019oct14
 ;; Keywords:   e-scripts
 ;;
 ;; Latest version: <http://angg.twu.net/eev-current/eev-tlinks.el>
@@ -517,6 +517,8 @@ Try this: (find-debpkg-links \"bash\")"
 {ee-H}(find-sh \"grep-aptavail -P {pkgname}\")
 
 http://packages.debian.org/{pkgname}
+http://packages.debian.org/sid/{pkgname}
+http://packages.debian.org/source/sid/{pkgname}
 http://packages.debian.org/src:{pkgname}
 http://ftp.debian.org/debian/pool/main/{p}/{pkgname}/
 http://backports.org/debian/pool/main/{p}/{pkgname}/
@@ -882,6 +884,8 @@ Example:
     (if (>= (length hash) 11)
        (substring hash -11))))
 
+;; Test: (find-youtubedl-links nil nil "K6LmZ0A1s9U")
+;;
 (defun find-youtubedl-links (&optional dir title hash ext- stem &rest rest)
   "Visit a temporary buffer containing hyperlinks for youtube-dl."
   (interactive)
diff --git a/eev-wrap.el b/eev-wrap.el
index 70bbad3..01f80f6 100644
--- a/eev-wrap.el
+++ b/eev-wrap.el
@@ -19,7 +19,7 @@
 ;;
 ;; Author:     Eduardo Ochs <address@hidden>
 ;; Maintainer: Eduardo Ochs <address@hidden>
-;; Version:    2019mar29
+;; Version:    2019sep28
 ;; Keywords:   e-scripts
 ;;
 ;; Latest version: <http://angg.twu.net/eev-current/eev-wrap.el>
@@ -41,7 +41,6 @@
 ;; «.ee-S»                     (to "ee-S")
 ;; «.ee-this-line-wrapn»       (to "ee-this-line-wrapn")
 ;; «.find-eewrap-links»                (to "find-eewrap-links")
-;; «.ee-insert-test»           (to "ee-insert-test")
 
 
 (require 'eev-template0)      ; (find-eev "eev-template0.el")
@@ -526,92 +525,6 @@ cd     {dir}"))
 
 
 
-;;;                  _                     _        _            _   
-;;;   ___  ___      (_)_ __  ___  ___ _ __| |_     | |_ ___  ___| |_ 
-;;;  / _ \/ _ \_____| | '_ \/ __|/ _ \ '__| __|____| __/ _ \/ __| __|
-;;; |  __/  __/_____| | | | \__ \  __/ |  | ||_____| ||  __/\__ \ |_ 
-;;;  \___|\___|     |_|_| |_|___/\___|_|   \__|     \__\___||___/\__|
-;;;                                                                  
-;; «ee-insert-test»  (to ".ee-insert-test")
-;; Insert a "test block" in a Lua/Python/Ruby/shell/Tcl script.
-
-(defalias 'eeit 'ee-insert-test)
-
-(defun ee-insert-test ()
-  "Insert an \"test block\" - an eepitch block in a multiline comment."
-  (interactive)
-  (cond ((eq major-mode 'lua-mode)    (ee-insert-test-lua))
-        ((eq major-mode 'python-mode) (ee-insert-test-python))
-        ((eq major-mode 'ruby-mode)   (ee-insert-test-ruby))
-        ((eq major-mode 'sh-mode)     (ee-insert-test-sh))
-        ((eq major-mode 'tcl-mode)    (ee-insert-test-tcl))
-       (t (error "ee-insert-test: Unsupported major mode"))))
-
-(defun ee-insert-test-lua ()
-  (interactive)
-  (insert (format "
---[[
- (eepitch-lua51)
- (eepitch-kill)
- (eepitch-lua51)
-dofile \"%s\"
-
---]]
-" (buffer-name))))
-
-(defun ee-insert-test-python ()
-  (interactive)
-  (insert (format "
-\"\"\"
- (eepitch-python)
- (eepitch-kill)
- (eepitch-python)
-execfile(\"%s\", globals())
-
-\"\"\"
-" (buffer-name))))
-
-(defun ee-insert-test-ruby ()
-  (interactive)
-  (insert (format "
-=begin
- (eepitch-ruby)
- (eepitch-kill)
- (eepitch-ruby)
-load \"%s\"
-
-=end
-" (buffer-name))))
-
-(defun ee-insert-test-sh ()
-  (interactive)
-  (insert (format "
-: <<'%%%%%%%%%%'
- (eepitch-sh)
- (eepitch-kill)
- (eepitch-sh)
-. %s
-
-%%%%%%%%%%
-" (buffer-name))))
-
-(defun ee-insert-test-tcl ()
-  (interactive)
-  (insert (format "
-set COMMENTED_OUT {
- (eepitch-tclsh)
- (eepitch-kill)
- (eepitch-tclsh)
-source %s
-
-}
-" (buffer-name))))
-
-
-
-
-
-
 ;;;                                  _   
 ;;;   ___ ___  _ __ ___  _ __   __ _| |_ 
 ;;;  / __/ _ \| '_ ` _ \| '_ \ / _` | __|
diff --git a/eev.el b/eev.el
index ea2053d..2a188b0 100644
--- a/eev.el
+++ b/eev.el
@@ -6,7 +6,7 @@
 ;; Package-Requires: ((emacs "24.1"))
 ;; Keywords: lisp e-scripts
 ;; URL: http://angg.twu.net/#eev
-;; Version: 20190902
+;; Version: 20191105
 
 ;; This program is free software; you can redistribute it and/or modify
 ;; it under the terms of the GNU General Public License as published by



reply via email to

[Prev in Thread] Current Thread [Next in Thread]