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

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

[elpa] externals/eev 90678b4 4/4: Merge remote-tracking branch 'eev/UTF-


From: Stefan Monnier
Subject: [elpa] externals/eev 90678b4 4/4: Merge remote-tracking branch 'eev/UTF-8' into externals/eev
Date: Tue, 13 Oct 2020 23:39:56 -0400 (EDT)

branch: externals/eev
commit 90678b46c75a954a5962ad626290355f3fc6d539
Merge: 3f6b3ee b3eff28
Author: Stefan Monnier <monnier@iro.umontreal.ca>
Commit: Stefan Monnier <monnier@iro.umontreal.ca>

    Merge remote-tracking branch 'eev/UTF-8' into externals/eev
---
 ChangeLog         |  61 +++++
 VERSION           |   4 +-
 eejump.el         |   1 +
 eev-brxxx.el      | 112 +++++++---
 eev-elinks.el     | 272 +++++++++++++++--------
 eev-hlinks.el     |   2 +-
 eev-intro.el      | 651 +++++++++++++++++++++++++++++++++++++++++-------------
 eev-testblocks.el |  62 +++---
 eev-tlinks.el     | 346 +++++++++++++++++++----------
 eev-wrap.el       |   4 +
 eev.el            |   2 +-
 11 files changed, 1076 insertions(+), 441 deletions(-)

diff --git a/ChangeLog b/ChangeLog
index 8ed98cd..7d8ee38 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,64 @@
+2020-10-13  Eduardo Ochs  <eduardoochs@gmail.com>
+
+       * eev-intro.el (find-git-intro): new function.
+
+       * eev-tlinks.el (find-texlive-links): new function.
+       (find-pdflikedef-links): deleted.
+       (find-find-links-links): marked (informally) as obsolete.
+       (find-find-links-links-old): new alias.
+       (find-psne-links): use "wget -nc" by default.
+
+       * eev-brxxx.el: rewrote the comments in the beginning of the file.
+
+2020-10-12  Eduardo Ochs  <eduardoochs@gmail.com>
+
+       * eev-elinks.el (find-pdflike-page-links): rewrote using
+       `find-find-links-links-new'.
+
+2020-10-10  Eduardo Ochs  <eduardoochs@gmail.com>
+
+       * eev-testblocks.el (ee-insert-test-tuareg-mode): new function.
+       (ee-insert-test-idris-mode): deleted.
+
+       * eev-elinks.el (ee-package-dir): new function.
+       (ee-package-desc): new function.
+       (ee-package-findelpafiles): new function.
+       (ee-find-epackage-links0): total rewrite.
+       (find-epackage-links): total rewrite.
+
+2020-10-09  Eduardo Ochs  <eduardoochs@gmail.com>
+
+       * eev-tlinks.el (find-eeit-links): new function.
+
+       * eev-intro.el (find-eepitch-intro): new section: "3.1.
+       `find-eeit-links'".
+
+2020-10-06  Eduardo Ochs  <eduardoochs@gmail.com>
+
+       * eev-intro.el (find-windows-beginner-intro): added instructions
+       to run `M-x package-initialize'.
+       (find-templates-intro): added more references to
+       `find-find-links-links-new'.
+       (find-links-intro): marked as obsolete.
+       (find-eval-intro): moved the section on byte-compiled functions to
+       `(find-elisp-intro)'.
+       (find-elisp-intro): new sections: "11. Byte-compiled functions",
+       "11.1. Why eev avoids byte-compilation", and "11.2. How
+       `find-efunction' works". They were taken from `(find-eval-intro)'
+       and slightly rewritten.
+
+       * eev-tlinks.el (find-emacs-tangents-links): new function.
+       (find-intro-links): rewrote using `find-find-links-links-new'.
+
+       * eejump.el (eejump-50): new function - now `M-5 M-0 M-j' opens
+       `(find-eev-intro)'.
+
+2020-10-04  Eduardo Ochs  <eduardoochs@gmail.com>
+
+       * eev-intro.el (find-eev-quick-intro): added pointers to a new
+       video to the installation instructions and deleted the pointers to
+       very old videos.
+
 2020-10-02  Eduardo Ochs  <eduardoochs@gmail.com>
 
        * eev-intro.el (find-psne-intro): added two new sections, one on
diff --git a/VERSION b/VERSION
index 9b43c11..bc98dc0 100644
--- a/VERSION
+++ b/VERSION
@@ -1,2 +1,2 @@
-Sun Oct  4 09:22:54 GMT 2020
-Sun Oct  4 06:22:54 -03 2020
+Tue Oct 13 16:07:41 GMT 2020
+Tue Oct 13 13:07:41 -03 2020
diff --git a/eejump.el b/eejump.el
index 7d9440e..6aa7b52 100644
--- a/eejump.el
+++ b/eejump.el
@@ -103,6 +103,7 @@ See: (find-eejump-intro \"\\neejump\\n\")"
 (defun eejump-2   () (find-emacs-keys-intro))
 (defun eejump-3   () (find-windows-beginner-intro))
 (defun eejump-5   () (find-eev-quick-intro))
+(defun eejump-50  () (find-eev-intro))
 (defun eejump-6   () (find-escripts-intro))
 
 (defun eejump-10  () (set-frame-font "5x7"  t))
diff --git a/eev-brxxx.el b/eev-brxxx.el
index b091731..7d72d6a 100644
--- a/eev-brxxx.el
+++ b/eev-brxxx.el
@@ -19,7 +19,7 @@
 ;;
 ;; Author:     Eduardo Ochs <eduardoochs@gmail.com>
 ;; Maintainer: Eduardo Ochs <eduardoochs@gmail.com>
-;; Version:    2019oct27
+;; Version:    2020oct12
 ;; Keywords:   e-scripts
 ;;
 ;; Latest version: <http://angg.twu.net/eev-current/eev-brxxx.el>
@@ -34,47 +34,90 @@
 
 ;;; Commentary:
 
-;; See: (find-eev-quick-intro "3.1. Non-elisp hyperlinks")
-;;      (find-psne-intro "Local copies")
-;;      (find-brxxx-intro)
+;; The section
+;;
+;;   (find-eev-quick-intro "3.1. Non-elisp hyperlinks")
+;;
+;; of the main tutorial mentions the functions `brff' and `brg', that
+;; are eev-ish variants of `browse-url'. They are explained in more
+;; details here:
+;;
+;;   (find-brxxx-intro)
+;;
+;; These `brxxx's are "mass-produced" by the functions `code-brurl'
+;; and `code-brfile', that work similarly to `code-c-d'. Try these
+;; tests to see the code that they generate:
+;;
+;;   (find-code-brfile 'find-FOO                :local 'brFOOL :dired 'brFOOD)
+;;   (find-code-brurl  'find-QUX :remote 'brQUX :local 'brQUXL :dired 'brQUXD)
+;;
+;; The first argument of `code-brurl' and `find-code-brurl' is the
+;; name of a function that expects a URL; the first argument of
+;; `code-brfile' and `find-code-brfile' is the name of a function that
+;; expects a filename. The other arguments are pairs made of a keyword
+;; and a name of a function to define.
 ;;
-;; The main functions here are `code-brurl' and `code-brfile', that
-;; lets us mass-define "brxxx functions" based on a given function
-;; that expects urls - in the case of `code-brurl' - or on a function
-;; that expects file names - in the case of `code-brfile'.
+;; Here is a simple test. Let's define `find-FOO' as function that
+;; expects a filename and displays it in the right window, and
+;; `find-QUX' as a function that expects a URL and displays it in the
+;; right window:
 ;;
-;; Try these tests to see the kind of code that is generated:
+;;   (defun find-FOO (url)   (find-2a nil '(find-estring url)))
+;;   (defun find-QUX (fname) (find-2a nil '(find-estring fname)))
+;;   (find-FOO "/tmp/a-filename")
+;;   (find-QUX "http://some/url";)
 ;;
-;;   (find-code-brurl  'find-foo :remote 'brfoo :local 'brfool :dired 'brfood)
-;;   (find-code-brfile 'find-bar                :local 'brbarl :dired 'brbard)
+;; Now let's define the `brFOO*' and `brQUX*' functions:
 ;;
-;; The functions `brfoo', `brfool' and `brbarl' operate on the
-;; url-at-point, and the functions `brfood' and `brbard' operate on
-;; the file at the current line and only work in dired mode. The
-;; functions `brfool' and `brbarl' call `find-foo' and `find-bar' on
-;; the _local copy_ of the url that they receive, like this:
+;;   (find-code-brfile 'find-FOO                :local 'brFOOL :dired 'brFOOD)
+;;        (code-brfile 'find-FOO                :local 'brFOOL :dired 'brFOOD)
+;;   (find-code-brurl  'find-QUX :remote 'brQUX :local 'brQUXL :dired 'brQUXD)
+;;        (code-brurl  'find-QUX :remote 'brQUX :local 'brQUXL :dired 'brQUXD)
 ;;
-;;   (brfool "http://some/url";)
-;;     --> (find-foo (ee-url-to-local-url "http://some/url";))
-;;     --> (find-foo (concat "file://" (ee-expand "$S/http/some/url")))
+;; The function `brQUX', that was defined with `:remote', acts like
+;; `browse-url', but using `find-QUX' as its "browser": it calls
+;; `find-QUX' on a "remote" URL.
 ;;
-;;   (brbarl "http://some/url";)
-;;     --> (find-bar (ee-url-to-fname "http://some/url";))
-;;     --> (find-bar (ee-expand "$S/http/some/url"))
+;; The functions `brFOOL' and `brQUXL', that were defined with
+;; `:local', act on a "local copy" of the URL, in the sense of:
 ;;
-;; Try the sexps above with:
+;;   (find-psne-intro "1. Local copies of files from the internet")
 ;;
-;;   (defun find-foo (url)   (find-2a nil '(find-estring url)))
-;;   (defun find-bar (fname) (find-2a nil '(find-estring fname)))
-;;   (code-brurl  'find-foo :remote 'brfoo :local 'brfool :dired 'brfood)
-;;   (code-brfile 'find-bar                :local 'brbarl :dired 'brbard)
+;; You can try them either by typing `M-x brFOOL' and `M-x brQUXL' on
+;; the URLs below or by running the sexps with `M-e'. Their action is
+;; to show on the right window the argument that was passed to
+;; `find-FOO' and `find-QUX':
 ;;
-;; The idea of local copies is explained here:
+;;   (brFOOL "http://some/url";)
+;;   (brQUXL "http://some/url";)
+;; 
+;; that are that URL converted to a local file name in the first case,
+;; and that URL converted to a "file:///" URL corresponding that local
+;; file name in the second case. More precisely, what happens is:
 ;;
-;;   (find-psne-intro "Local copies")
+;;   (brFOOL "http://some/url";)
+;;   --> (find-FOO (ee-url-to-fname "http://some/url";))
+;;   --> (find-FOO (ee-expand      "$S/http/some/url"))
 ;;
+;;   (brQUXL "http://some/url";)
+;;   --> (find-QUX (ee-url-to-local-url          "http://some/url";))
+;;   --> (find-QUX (concat "file://" (ee-expand "$S/http/some/url")))
 ;;
+;; The functions `brFOOD' and `brQUXD' are intended to be called
+;; interactively from dired mode. If you call them on a dired buffer
+;; showing "/tmp/" and with the point on the line that shows a file
+;; called "a-filename" their actions would be the same as the sexps
+;; below:
 ;;
+;;   (brFOOL "/tmp/a-filename")
+;;    --> (find-FOO "/tmp/a-filename")
+;;
+;;   (brQUXL "/tmp/a-filename")
+;;   --> (find-QUX (ee-fname-to-url  "/tmp/a-filename"))
+;;   --> (find-QUX (concat "file://" "/tmp/a-filename"))
+;;
+
+
 ;; This file, i.e.: (find-eev "eev-brxxx.el")
 ;; supersedes:      (find-eev "eev-browse-url.el")
 ;; but eev-browse-url.el still has some nice comments that I would
@@ -180,7 +223,7 @@ This should be made smarter - file:// urls should be 
returned unchanged."
 ;;; | (_| (_) | (_| |  __/_____| |_) | |  | |_| | |  | |
 ;;;  \___\___/ \__,_|\___|     |_.__/|_|   \__,_|_|  |_|
 ;;;                                                     
-;; (find-tail-call-links "brurl" "f")
+;; Skel (broken): (find-tail-call-links "brurl" "f")
 
 ;; «code-brurl» (to ".code-brurl")
 ;; Test: (find-code-brurl  'find-foo :remote 'brfoo :local 'brfool :dired 
'brfood)
@@ -254,12 +297,11 @@ This should be made smarter - file:// urls should be 
returned unchanged."
 ;;; | (_| (_) | (_| |  __/_____| |_) | |  |  _| | |  __/
 ;;;  \___\___/ \__,_|\___|     |_.__/|_|  |_| |_|_|\___|
 ;;;                                                     
-;; (find-tail-call-links "brfile" "f")
-
 ;; «code-brfile» (to ".code-brfile")
-;; code-brfile: top-level functions
+;; `code-brfile': top-level functions.
 ;;
-;; Test: (find-code-brfile 'find-bar :local 'brbarl :dired 'brbard)
+;; Skel (broken): (find-tail-call-links "brfile" "f")
+;; Test: (find-code-brfile 'find-BAR :local 'brBARL :dired 'brBARD)
 ;;
 (defun      code-brfile (f &rest rest)
   "Define a family of brxxx functions from a function that operates on files"
@@ -273,7 +315,7 @@ This should be made smarter - file:// urls should be 
returned unchanged."
 ")  (ee-code-brfile-rest f rest)))
 
 ;; «ee-code-brfile-rest» (to ".ee-code-brfile-rest")
-;; Support for extra arguments
+;; `code-brfile': support for extra arguments.
 
 (defun ee-code-brfile-rest (f rest)
   (cond ((null rest) "")
diff --git a/eev-elinks.el b/eev-elinks.el
index edcd91d..0f6dc06 100644
--- a/eev-elinks.el
+++ b/eev-elinks.el
@@ -19,7 +19,7 @@
 ;;
 ;; Author:     Eduardo Ochs <eduardoochs@gmail.com>
 ;; Maintainer: Eduardo Ochs <eduardoochs@gmail.com>
-;; Version:    2020jul22
+;; Version:    2020oct11
 ;; Keywords:   e-scripts
 ;;
 ;; Latest version: <http://angg.twu.net/eev-current/eev-elinks.el>
@@ -76,6 +76,7 @@
 ;; «.find-eface-links»         (to "find-eface-links")
 ;; «.find-color-links»         (to "find-color-links")
 ;; «.find-epackage-links»      (to "find-epackage-links")
+;; «.ee-package-dir»           (to "ee-package-dir")
 
 ;; «.find-code-pdf-links»      (to "find-code-pdf-links")
 ;; «.find-pdf-links»           (to "find-pdf-links")
@@ -893,39 +894,36 @@ when this is true remove the prefix D from FNAME, and put 
the sexp
 ;;; | |_) | (_| |  _| | |   <  __/_____| |_) | (_| | (_| |  __/
 ;;; | .__/ \__,_|_| |_|_|_|\_\___|     | .__/ \__,_|\__, |\___|
 ;;; |_|                                |_|          |___/      
-
+;;
 ;; «find-pdflike-page-links» (to ".find-pdflike-page-links")
-;; (find-efunction 'count-lines)
+;; The function `find-pdflike-page-links' is called from
+;; `find-pdf-links' (`M-h M-p') when you call it in a buffer that is
+;; not in dired mode. See:
+;;   (to "find-pdf-links")
+;;   (find-pdf-like-intro "10. Generating a pair with the page number")
+;;   (find-pdf-like-intro "11. How `M-h M-p' guesses everything")
 ;;
-(defun ee-count-formfeeds (start end)
-  (save-excursion
-    (save-restriction
-      (narrow-to-region start end)
-      (goto-char (point-min))
-      (save-match-data
-       (let ((done 0))
-         (while (re-search-forward "[\f]" nil t 1)
-           (setq done (+ 1 done)))
-         done)))))
-
-(defun ee-current-page ()
-  (+ 1 (ee-count-formfeeds (point-min) (point))))
-
-(defun ee-last-kill ()
-  (if (stringp (car kill-ring))
-    (ee-no-properties (car kill-ring))))
-
-(defun ee-region ()
-  (if (region-active-p)
-      (buffer-substring-no-properties (point) (mark))))
-
-(defun ee-region-or-last-kill ()
-  (or (ee-region) (ee-last-kill)))
-
-;; Skel: (find-find-links-links-old "\\M-p" "pdflike-page" "page bufname 
offset")
-
-;; Moved to eev-mode.el:
-;; (define-key eev-mode-map "\M-h\M-p" 'find-pdflike-page-links)
+;; Skel: (find-find-links-links-new "pdflike-page" "page bufname offset" "")
+;;
+(defun find-pdflike-page-links (&optional page bufname offset &rest 
pos-spec-list)
+"Visit a temporary buffer containing hyperlinks to a pdf-like document.
+See: (find-pdf-like-intro)
+     (find-pdf-like-intro \"refining hyperlinks to pages\")"
+  (interactive)
+  (setq page    (or page (ee-current-page)))
+  (setq bufname (or bufname (buffer-name)))
+  (setq offset  (or offset ee-page-offset))
+  (apply
+   'find-elinks
+   `((find-pdflike-page-links ,page ,bufname ,offset ,@pos-spec-list)
+     ;; Convention: the first sexp always regenerates the buffer.
+     (find-pdf-like-intro "10. Generating a pair with the page number")
+     (find-pdf-like-intro "11. How `M-h M-p' guesses everything")
+     ;; (find-efunction 'find-pdflike-page-links)
+     ""
+     ,@(ee-pdflike-page-links page bufname offset)
+     )
+   pos-spec-list))
 
 (defun ee-pdflike-page-links (&optional page bufname offset)
   (setq page    (or page (ee-current-page)))
@@ -953,33 +951,37 @@ when this is true remove the prefix D from FNAME, and put 
the sexp
       ,(ee-HS bufname)
       )))
 
-(defun find-pdflike-page-links (&optional page bufname offset &rest rest)
-"Visit a temporary buffer containing hyperlinks to a pdf-like document.
-See: (find-pdf-like-intro)
-     (find-pdf-like-intro \"refining hyperlinks to pages\")"
-  (interactive)
-  (setq page    (or page (ee-current-page)))
-  (setq bufname (or bufname (buffer-name)))
-  (setq offset  (or offset ee-page-offset))
-  (apply 'find-elinks `(
-    (find-pdflike-page-links ,page ,bufname ,offset ,@rest)
-    ;; (find-efunction 'find-pdflike-page-links)
-    ;; (find-eev-quick-intro "10.4. Generating short hyperlinks to PDFs")
-    ;; (find-eev-quick-intro "11.1. `find-pdf-links'")
-    (find-pdf-like-intro "10. Generating a pair with the page number")
-    (find-pdf-like-intro "11. How `M-h M-p' guesses everything")
-    ""
-    ,@(ee-pdflike-page-links page bufname offset)
-    ) rest))
+;; These are internal functions used by `find-pdflike-page-links' and
+;; `ee-pdflike-page-links'.
+
+;; Based on: (find-efunction 'count-lines)
+;;
+(defun ee-count-formfeeds (start end)
+  (save-excursion
+    (save-restriction
+      (narrow-to-region start end)
+      (goto-char (point-min))
+      (save-match-data
+       (let ((done 0))
+         (while (re-search-forward "[\f]" nil t 1)
+           (setq done (+ 1 done)))
+         done)))))
+
+(defun ee-current-page ()
+  (+ 1 (ee-count-formfeeds (point-min) (point))))
+
+(defun ee-last-kill ()
+  (if (stringp (car kill-ring))
+    (ee-no-properties (car kill-ring))))
+
+(defun ee-region ()
+  (if (region-active-p)
+      (buffer-substring-no-properties (point) (mark))))
+
+(defun ee-region-or-last-kill ()
+  (or (ee-region) (ee-last-kill)))
+
 
-;; (find-pdflike-page-links)
-;; (find-angg ".emacs.papers" "kopkadaly")
-;; (code-pdftotext "kopkadaly4" 
"~/books/__comp/kopka_daly__a_guide_to_latex_4th_ed.pdf" 12)
-;; (find-code-pdftotext "kopkadaly4" 
"~/books/__comp/kopka_daly__a_guide_to_latex_4th_ed.pdf" 12)
-;; (ee-page-parameters "kopkadaly4" 12)
-;; (find-kopkadaly4page (+ 12 287) "13.1   The picture environment")
-;; (find-kopkadaly4text            "13.1   The picture environment")
-;; (find-kopkadaly4text)
 
 
 
@@ -1117,59 +1119,124 @@ This needs a temporary directory; see: 
(find-prepared-intro)"
 ;;;                              |_|                         |___/             
 
 ;;
 ;; «find-epackage-links»  (to ".find-epackage-links")
-;; Skel:  (find-find-links-links-new "epackage" "pkgname" "")
-;; Tests: (find-epackage-links "0x0")
-;;        (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}"))
+;; Skel: (find-find-links-links-new "epackage" "pkg c d" "")
+;; Test: (find-epackage-links 'lua-mode)
+;;       (find-epackage-links 'tetris)
+;;       (find-epackage-links 'foo)
+;;
+(defun find-epackage-links (&optional pkg c d &rest pos-spec-list)
+"Visit a temporary buffer containing hyperlinks for an Emacs package.
+PKG must be a symbol; C and D are arguments for `code-c-d'.
+If D is t then try to use `ee-package-dir' to get the directory."
+  (interactive (list (symbol-at-point)))
+  (setq pkg (or pkg "{pkg}"))
+  (setq c (or c (replace-regexp-in-string "[-]" "" (symbol-name pkg))))
+  (setq d (cond ((eq d t) (ee-package-dir pkg))
+               ((eq d nil) "{d}")
+               (t d)))
   (apply
    'find-elinks
-   `((find-epackage-links ,pkgname ,@pos-spec-list)
+   `((find-epackage-links ,(ee-add-quote pkg) ,c ,d ,@pos-spec-list)
+     (find-epackage-links ,(ee-add-quote pkg) ,c t ,@pos-spec-list)
      ;; Convention: the first sexp always regenerates the buffer.
      (find-efunction 'find-epackage-links)
      (find-elpafile "")
      ""
-     ,(ee-find-epackage-links0 pkgname)
+     ,(ee-find-epackage-links0 pkg c d)
      )
    pos-spec-list))
 
-(defun ee-find-epackage-links0 (pkgname)
+(defun ee-find-epackage-links0 (pkg c d)
   "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"))
+  (let* ((spkg (format "\n  %s " pkg))
+        (findelpafiles0 (ee-package-findelpafiles pkg))
+        (findelpafiles1 (reverse findelpafiles0))
+        (findelpafiles (mapconcat 'ee-HS findelpafiles1 "\n"))
         )
     (ee-template0 "\
-# (find-epackages {(ee-S spkgname)})
-# (find-epackage-links '{pkgname})
-# (find-epackage '{pkgname})
-{lines}
+# (find-epackages {(ee-S spkg)})
+# (find-epackage-links '{pkg})
+# (find-epackage '{pkg})
+{findelpafiles}
 
-# http://elpa.gnu.org/packages/{pkgname}.html
-# http://melpa.org/#/{pkgname}
+# (ee-package-dir '{pkg})
+# (find-epp (ee-package-desc '{pkg}))
+
+# (code-c-d \"{c}\" \"{d}\")
+# (find-{c}file \"\")
+
+# http://elpa.gnu.org/packages/{pkg}.html
+# http://melpa.org/#/{pkg}
 ")))
 
 
-(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) "/" "")))
+
+;; Tests: (find-fline ee-elpadir)
+;;        (find-fline "~/.emacs.d/elpa/" "lua-mode-")
+;;        (ee-file-expand-wildcards-slash "~/.emacs.d/elpa/lua-mode-*")
+;;        (ee-package-findelpafiles "lua-mode")
+;;
+(defun ee-package-findelpafiles (pkgname)
+  "Convert a PKGNAME to a list of `(find-elpafile ...)' sexps."
+  (let* ((pattern (format "%s%s-*" ee-elpadir pkgname))
+        (fnames (ee-file-expand-wildcards-slash pattern)))
+    (mapcar (lambda (s) (list 'find-elpafile s)) fnames)))
 
 (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'."
+"Like `file-expand-wildcards' but with `ee-file-name-nondirectory-slash' & 
sort."
   (let* ((fnames0 (file-expand-wildcards pattern))
         (fnames1 (mapcar 'ee-file-name-nondirectory-slash fnames0))
         (fnames2 (sort fnames1 'string<)))
     fnames2))
 
+(defun ee-file-name-nondirectory-slash (fname)
+"Like `file-name-nondirectory', but appends a / to FNAME if it is a directory."
+  (concat (file-name-nondirectory fname)
+         (if (file-directory-p fname) "/" "")))
+
+
+
+
+;; «ee-package-dir»  (to ".ee-package-dir")
+;; This function converts a package name (a symbol) into the directory
+;; in which that package was installed (or nil), using functions from
+;; "package.el".
+;;
+;; Tests: (require 'package)
+;;        (package-initialize)
+;;        (ee-package-dir 'lua-mode)
+;;        (ee-package-dir 'tetris)
+;;        (ee-package-dir 'foo)
+;;        (ee-package-desc 'lua-mode)
+;;        (ee-package-desc 'tetris)
+;;        (ee-package-desc 'foo)
+;;
+;; WARNING: the function `ee-package-dir' and its dependency
+;; `ee-package-desc' use several functions from "package.el", and I
+;; don't understand package.el well enough!
+;;
+;; See: (find-efile "emacs-lisp/package.el" "(cl-defstruct (package-desc")
+;;      (find-efunction 'describe-package-1)
+;;      (find-efunction 'describe-package-1 "(let* ((desc ")
+;;
+(defun ee-package-dir (pkg)
+"Convert the name of the package PKG to the directory where it was installed."
+  (let* ((desc (ee-package-desc pkg))
+        (dir (and desc (package-desc-dir desc))))
+    (if (stringp dir)
+       (replace-regexp-in-string
+        "\\([^/]\\)$" "\\1/"
+        (ee-shorten-file-name dir)))))
+
+(defun ee-package-desc (pkg)
+"An internal function used by `ee-package-dir'.
+Convert PKG - a symbol - to a package-desc structure (or to nil)."
+  (or (if (package-desc-p pkg) pkg)
+      (cadr (assq pkg package-alist))
+      (let ((built-in (assq pkg package--builtins)))
+       (if built-in
+           (package--from-builtin built-in)
+         (cadr (assq pkg package-archive-contents))))))
 
 
 
@@ -1186,10 +1253,8 @@ This is an internal function used by 
`ee-find-epackage-links'."
 ;;; |_| |_|_| |_|\__,_|      \___\___/ \__,_|\___| \/       |_|_|_| 
|_|_|\_\___/
 ;;;                                                                            
 
 ;; «find-code-pdf-links»  (to ".find-code-pdf-links")
-;; Tests:
-;; (find-fline          "/usr/local/texlive/2018/texmf-dist/doc/latex/base/")
-;; (find-code-pdf-links 
"/usr/local/texlive/2018/texmf-dist/doc/latex/base/source2e.pdf")
-;; (find-code-pdf-links 
"/usr/local/texlive/2018/texmf-dist/doc/latex/base/source2e.pdf" "foo")
+;; See: (to "find-pdf-links")
+;;      (find-pdf-like-intro "9. Generating three pairs" "find-code-pdf-links")
 
 ;; See: (find-efunction 'ee-if-prefixp)
 (defun ee-shorten-file-name (fname)
@@ -1231,7 +1296,30 @@ This is an internal function used by 
`ee-find-epackage-links'."
        )
      pos-spec-list)))
 
+
+
 ;; «find-pdf-links»  (to ".find-pdf-links")
+;; This function - usually bound to `M-h M-p' - behaves in one way
+;; when invoked from dired buffers and in a totally different way when
+;; invoked from other buffers. In a dired buffer it supposes that the
+;; current line contains the name of a PDF, and it generates a buffer
+;; whose main part is a pair `code-pdf-page'/`code-pdf-text' that lets
+;; you define short hyperlinks to that PDF. See:
+;;
+;;   (find-pdf-like-intro "7. Shorter hyperlinks to PDF files")
+;;   (find-pdf-like-intro "9. Generating three pairs" "`M-h M-p' in Dired 
mode")
+;;
+;; When the current buffer is not in dired mode this function supposes
+;; that the buffer contains the "text" of a PDF, as explained here:
+;;
+;;   (find-pdf-like-intro "3. Hyperlinks to PDF files" "find-pdf-text")
+;;
+;; and it tries to generate short hyperlinks to the current page of
+;; it, making lots of guesses, and often guessing everything wrong.
+;; See:
+;;
+;;   (find-pdf-like-intro "10. Generating a pair with the page number")
+;;   (find-pdf-like-intro "11. How `M-h M-p' guesses everything")
 ;;
 (defun find-pdf-links ()
 "Run either `find-code-pdf-links' or `find-pdflike-page-links'."
diff --git a/eev-hlinks.el b/eev-hlinks.el
index 30abc4a..cbe303a 100644
--- a/eev-hlinks.el
+++ b/eev-hlinks.el
@@ -275,7 +275,7 @@
 (defun  ee-epackage-bufferp () (ee-buffer-help ee-epackage-re 1))
 (defun  ee-find-epackage-links ()
   (let ((p (ee-epackage-bufferp)))
-    (list (ee-find-epackage-links0 p))))
+    (list (ee-find-epackage-links0 p "{c}" "{d}"))))
 
 ;; By buffer name (when the mode is man)
 (defvar ee-man-re "^\\*Man \\(.*\\)\\*$")
diff --git a/eev-intro.el b/eev-intro.el
index 90fc7c5..d88a205 100644
--- a/eev-intro.el
+++ b/eev-intro.el
@@ -19,7 +19,7 @@
 ;;
 ;; Author:     Eduardo Ochs <eduardoochs@gmail.com>
 ;; Maintainer: Eduardo Ochs <eduardoochs@gmail.com>
-;; Version:    2020oct04
+;; Version:    2020oct13
 ;; Keywords:   e-scripts
 ;;
 ;; Latest version: <http://angg.twu.net/eev-current/eev-intro.el>
@@ -91,6 +91,7 @@
 ;; «.find-emacs-intro»         (to "find-emacs-intro")
 ;; «.find-org-intro»           (to "find-org-intro")
 ;; «.find-escripts-intro»      (to "find-escripts-intro")
+;; «.find-git-intro»           (to "find-git-intro")
 
 ;; «.find-windows-beginner-intro»      (to "find-windows-beginner-intro")
 
@@ -307,7 +308,7 @@ this video (from 2016!):
 
   http://angg.twu.net/eev-videos/video-eev-quick-0.mp4
 
-Open the page at
+To run it, open the page at
 
   http://angg.twu.net/eev-intros/find-eev-quick-intro.html
 
@@ -2149,9 +2150,9 @@ These are the current ways to download and install eev:
      links like these ones,
 
        http://elpa.gnu.org/packages/eev.html
-       http://elpa.gnu.org/packages/eev-20191003.tar
+       http://elpa.gnu.org/packages/eev-20201013.tar
        http://angg.twu.net/eev-current/
-       http://angg.twu.net/eev-current/eev-20191003.tar
+       http://angg.twu.net/eev-current/eev-20201013.tar
 
      and then running `M-x package-install-file';
 
@@ -2446,6 +2447,7 @@ Main intros:  (find-eev-quick-intro)
 Index to the source files: (find-eev \"eev-load.el\")
 This buffer is _temporary_ and _editable_.
 It is meant as both a tutorial and a sandbox.
+The quickest way to open or recreate this is with `M-5 M-0 M-j'.
 
 
 Here is a list of all the available sandbox-y tutorials that
@@ -2460,31 +2462,31 @@ recommended reading order. These are the basic ones:
    5. (find-pdf-like-intro)
    6. (find-eepitch-intro)
    7. (find-audiovideo-intro)
-   8. (find-rcirc-intro)
-   9. (find-elisp-intro)
-  10. (find-eev-install-intro)
+   8. (find-psne-intro)
+   9. (find-rcirc-intro)
+  10. (find-elisp-intro)
+  11. (find-eev-install-intro)
 
 This is a very basic tutorial intended mainly for M$ Windows
 users:
 
-  11. (find-windows-beginner-intro)
+  12. (find-windows-beginner-intro)
 
 These ones explain ideas, conventions, and usage patterns:
 
-  12. (find-escripts-intro)
-  13. (find-links-conv-intro)
+  13. (find-escripts-intro)
+  14. (find-links-conv-intro)
 
 These are older and more technical versions of sections of the
 eev-quick-intro:
 
-  14. (find-eval-intro)
-  15. (find-links-intro)
-  16. (find-brxxx-intro)
-  17. (find-wrap-intro)
-  18. (find-eejump-intro)
-  19. (find-anchors-intro)
-  20. (find-code-c-d-intro)
-  21. (find-psne-intro)
+  15. (find-eval-intro)
+  16. (find-links-intro)
+  17. (find-brxxx-intro)
+  18. (find-wrap-intro)
+  19. (find-eejump-intro)
+  20. (find-anchors-intro)
+  21. (find-code-c-d-intro)
 
 These are etcs:
 
@@ -2492,21 +2494,22 @@ These are etcs:
   23. (find-templates-intro)
   24. (find-org-intro)
   25. (find-videos-intro)
+  26. (find-git-intro)
 
 These ones explain advanced features that require extra setup:
 
-  26. (find-prepared-intro)
-  27. (find-bounded-intro)
-  28. (find-channels-intro)
+  27. (find-prepared-intro)
+  28. (find-bounded-intro)
+  29. (find-channels-intro)
 
 This one is used in a video:
 
-  29. (find-three-main-keys-intro)
+  30. (find-three-main-keys-intro)
 
 These ones are obsolete:
 
-  30. (find-emacs-intro)
-  31. (find-defun-intro)
+  31. (find-emacs-intro)
+  32. (find-defun-intro)
 
 Item 25 is an index of old video tutorials, with scripts for
 downloading local copies of them and links to important positions
@@ -3486,6 +3489,8 @@ are numbers or strings. Try:
 
 7. Pos-spec-lists
 =================
+[Moved to:] (find-refining-intro \"1. Pos-spec-lists\")
+
 The optional arguments that refine a hyperlink form what we call
 a \"pos-spec-list\". For example, the pos-spec-list here has two
 elements,
@@ -3670,128 +3675,6 @@ Try:
 
 
 
-10.1. Byte-compiled functions
------------------------------
-Most functions in Emacs are byte-compiled - which means that
-their function cells contain a \"byte-code\" instead of a lambda
-expression. These byte-codes are very hard for humans to read.
-See:
-
-  (find-elnode \"What Is a Function\" \"byte-code function\")
-  (find-elnode \"Byte-Code Type\")
-  (find-elnode \"Byte Compilation\")
-  (find-elnode \"Disassembly\")
-
-Here is an example:
-
-  (find-efunctiondescr 'find-file)
-  (find-efunction      'find-file)
-  (symbol-function     'find-file)
-  (find-efunctionpp    'find-file)
-  (find-efunctiond     'find-file)
-
-The `find-efunctionpp' link above takes the content of the
-function cell of `find-file' and \"pretty-prints\" it, i.e.,
-indents it in a nice way, but the result in this case is
-unreadable... and the `find-efunctiond' link shows a decompiled
-version of that byte-code, which is only slightly better. Both
-the `find-efunctionpp' and the `find-efunctiond' links show
-internal representations that are very different from the source
-code. Compare that with a case in which the function is not
-byte-compiled:
-
-  (find-efunctiondescr 'find-fline)
-  (find-efunction      'find-fline)
-  (symbol-function     'find-fline)
-  (find-efunctionpp    'find-fline)
-
-The `(find-efunctionpp 'find-fline)' shows a lambda expression
-that is very similar to the defun that defined `find-fline'.
-
-
-
-
-10.2. How `find-efunction' works
---------------------------------
-Eev defines hyperlink functions called `find-efunction',
-`find-evariable' and `find-eface' that are wrappers around the
-standard functions `find-function', `find-variable' and
-`find-face-definition'; the eev variants support pos-spec-lists.
-Try:
-
-  (find-efunction 'find-fline)
-  (find-function  'find-fline)
-  (find-evariable 'ee-hyperlink-prefix)
-  (find-variable  'ee-hyperlink-prefix)
-  (find-eface           'eepitch-star-face)
-  (find-face-definition 'eepitch-star-face)
-
-The Emacs functions are defined here:
-
-  (find-efile \"emacs-lisp/find-func.el\")
-
-Their inner workings are quite complex. They use `symbol-file',
-that works on the variable `load-history'. Here are some links to
-documentation and tests:
-
-  (find-efunctiondescr 'symbol-file)
-  (find-elnode \"Where Defined\")
-  (symbol-file 'find-fline          'defun)
-  (symbol-file 'ee-hyperlink-prefix 'defvar)
-  (symbol-file 'eepitch-star-face   'defface)
-  (find-epp (assoc (locate-library \"eepitch\") load-history))
-
-The functions in \"find-func.el\" use `symbol-file' to find the
-file where a given symbol was defined, and then search a defun,
-defvar of defface in it that _may be_ the definition that we are
-looking for. The eev variants use the functions
-`find-function-noselect', `find-variable-noselect' and
-`find-definition-noselect' from \"find-func.el\", that return a
-pair (BUFFER . POS). Try:
-
-  (find-efunctiondescr 'find-function-noselect)
-  (find-efunctiondescr 'find-variable-noselect)
-  (find-efunctiondescr 'find-definition-noselect)
-
-  (find-ebufferandpos (find-function-noselect 'find-fline)
-   )
-  (find-ebufferandpos (find-variable-noselect 'ee-hyperlink-prefix)
-   )
-  (find-ebufferandpos (find-definition-noselect 'eepitch-star-face 'defface)
-   )
-
-These `find-*-select' functions work quite well but are not 100%
-reliable - for example, if an elisp file has several definitions
-for the same function, variable, or face, the `find-*-select's
-don't know which ones were executed, neither which one was
-executed last, overriding the other ones... and it may return the
-position of a defun, defvar, or defface that is not the
-\"active\" one.
-
-
-
-
-10.3. Why eev avoids byte-compilation
--------------------------------------
-All the source files of eev have a \"no-byte-compile: t\" in
-them. See:
-
-  (find-eevgrep \"grep --color -nH -e no-byte-compile: *.el\")
-  (find-elnode \"Byte Compilation\" \"no-byte-compile: t\")
-
-This is non-standard, but it is a deliberate design choice.
-
-(TODO: explain the three main reasons: it is easier to teach
-emacs to beginners if they see lots of lambda expressions and few
-byte-codes; `code-c-d' and friends define functions dynamically
-and `find-efunction' don't work on them; in a distribution with
-only the \".elc\"s of eev users wouldn't have access to the
-documentation and examples in the comments of the source files.)
-
-
-
-
-
 10.4. Quote and backquote
 -------------------------
 Eev uses backquote a lot and avoids macros.
@@ -4314,13 +4197,13 @@ It is meant as both a tutorial and a sandbox.
 
 
 
-Note: this intro is being rewritten!
-Ideally it should _complement_ the material in:
-  (find-eev-quick-intro \"3. Elisp hyperlinks\")
-
-
-
-
+Note: this intro is obsolete!
+I need to move some parts of it to other intros and then delete it.
+  See: (find-here-links-intro)
+       (find-refining-intro)
+       (find-templates-intro)
+       (find-links-conv-intro \"3. Classification\")
+       (find-links-conv-intro \"3. Classification\" \"regenerate\")
 
 
 
@@ -5112,7 +4995,35 @@ function does not exist. To add support for 
`FooBar-mode' to `M-x
 eeit', just define a function with the right name. See the source
 for examples:
 
-  (find-eev \"eev-testblocks.el\")
+  (find-eev \"eev-testblocks.el\" \"examples\")
+
+
+
+
+3.1. `find-eeit-links'
+----------------------
+If you run this,
+
+  (find-eeit-links 'lua-mode)
+
+you will get a buffer with:
+
+  a) links to inspect the current definition of
+     `ee-insert-test-lua-mode',
+
+  b) links that let you compare that with the `ee-insert-test-'s
+     for other major modes,
+
+  c) a barebones `(defun ...)' that lets you redefine
+     `ee-insert-test-lua-mode'.
+
+If you run `find-eeit-links' interactively with `M-x' then it
+will run as:
+
+  (find-eeit-links <current-major-mode>)
+
+and you can use that to inspect the `ee-insert-test-' support for
+the current major mode, or to implement it yourself.
 
 
 
@@ -6499,6 +6410,15 @@ short `find-pdf'-pair. To see what it produces, try:
   (find-code-pdf-links \"~/Coetzee99.pdf\")
   (find-code-pdf-links \"~/Coetzee99.pdf\" \"livesofanimals\")
 
+The second link above produces a temporary buffer containing this:
+
+  ;; (find-pdf-page \"~/Coetzee99.pdf\")
+  ;; (find-pdf-text \"~/Coetzee99.pdf\")
+  (code-pdf-page \"livesofanimals\" \"~/Coetzee99.pdf\")
+  (code-pdf-text \"livesofanimals\" \"~/Coetzee99.pdf\")
+  ;; (find-livesofanimalspage)
+  ;; (find-livesofanimalstext)
+
 `find-code-pdf-links' is somewhat similar to `find-latex-links',
 in this aspect:
 
@@ -6647,6 +6567,11 @@ and combines it with the idea of \"local copies\" from:
   (find-psne-intro \"1. Local copies of files from the internet\")
   (find-psne-intro \"5. `browse-url' and friends\")
 
+At this moment the best explanation of these ideas in here:
+  (find-eev \"eev-brxxx.el\" \";;; Commentary:\")
+in the source code. I need to rewrite this intro!
+
+
 
 
 
@@ -8520,6 +8445,9 @@ It is meant as both a tutorial and a sandbox.
 
 
 This intro is being rewritten!
+The prerequisites for understand this are:
+  (find-elisp-intro)
+  (find-links-conv-intro \"3. Classification\")
 
 
 
@@ -8559,8 +8487,7 @@ To learn how to write your own templated functions you 
need to:
 
   2) learn how to use `find-elinks' - same thing,
 
-  3) learn how to use `find-find-links-links', that is a horrible
-     kludge that works well enough so I never cleaned it up.
+  3) learn how to use `find-find-links-links-new'.
 
 
 
@@ -8690,6 +8617,9 @@ Try:
 
 5. `find-find-links-links'
 ==========================
+(Note: `find-find-links-links' is obsolete, and is superseded by
+`find-find-links-links-new')
+
 ALL my `find-*-links' started as quick hacks.
 SOME of them were useful enough to deserve being cleaned up.
 A FEW of them ended up in:
@@ -9629,6 +9559,12 @@ This buffer is _temporary_ and _editable_.
 It is meant as both a tutorial and a sandbox.
 
 
+This intro is being rewritten.
+Prerequisites:
+  (find-psne-intro)
+  (find-audiovideo-intro)
+
+
 
 1. What we have now
 ===================
@@ -11194,6 +11130,225 @@ This can also be used to generate links to info nodes.
 
 
 
+;;;   ____ _ _   
+;;;  / ___(_) |_ 
+;;; | |  _| | __|
+;;; | |_| | | |_ 
+;;;  \____|_|\__|
+;;;              
+;; «find-git-intro»  (to ".find-git-intro")
+;; Skel: (find-intro-links "git")
+
+(defun find-git-intro (&rest pos-spec-list) (interactive)
+  (let ((ee-buffer-name "*(find-git-intro)*"))
+    (apply 'find-eintro "\
+\(Re)generate: (find-git-intro)
+Source code:  (find-efunction 'find-git-intro)
+More intros:  (find-eev-quick-intro)
+              (find-eev-intro)
+              (find-eepitch-intro)
+This buffer is _temporary_ and _editable_.
+It is meant as both a tutorial and a sandbox.
+
+
+
+At this moment this is a call for help -
+not an intro.
+
+
+
+
+0. Introduction
+===============
+Git is extremely popular, and I've heard that the two packages
+that attract most new users to Emacs are Org and Magit:
+
+  https://github.com/magit/magit
+  https://melpa.org/#/magit
+  (find-epackage 'magit)
+
+At this moment eev offers only a trivial hack to help people
+download git repositories. If you put the point on the github url
+above and type `M-h g' or `M-x find-git-links' you will get the
+same effect as running the sexp below:
+
+  (find-git-links \"https://github.com/magit/magit\"; \"magit\")
+
+You will get a temporary buffer with an e-script for downloading
+(\"cloning\") that git repository and inspecting it in a handful
+of ways.
+
+I found git VERY hard to learn. To test most concepts you need a
+repository with tags and branches and a second repository that
+\"pulls\" from it, and no books or tutorials that I know of come
+with a sequence of commands that set that up in a way that makes
+the tests easy to reproduce. To make things worse, when I was
+trying to set up a git repository for eev on github for the first
+time I did some things wrong on the github side of the repository
+that I did not know how to undo... after spending some days
+trying to fix that I gave up, deleted that repository, created a
+new one, and decided that I would always do LOTS of local tests
+before messing up my public repository again.
+
+This intro is about doing these local tests - but it is in a VERY
+early draft.
+
+
+
+
+1. Preparation
+==============
+Download the second URL below with `M-x brep',
+
+  http://peepcode.com/products/git-internals-pdf
+  
https://github.com/pluralsight/git-internals-pdf/releases/download/v2.0/peepcode-git.pdf
+
+and run this eepitch block,
+
+ (eepitch-shell)
+ (eepitch-kill)
+ (eepitch-shell)
+  rm -Rfv /tmp/git-test/
+  mkdir   /tmp/git-test/
+  cd      /tmp/git-test/
+  #    http://angg.twu.net/bin/git-defs.html
+  wget http://angg.twu.net/bin/git-defs
+  cp -v 
$S/https/github.com/pluralsight/git-internals-pdf/releases/download/v2.0/peepcode-git.pdf
 .
+
+and this prog1:
+
+  (prog1
+    (code-pdf-page \"gitinternals\" \"/tmp/git-test/peepcode-git.pdf\")
+    (code-pdf-text \"gitinternals\" \"/tmp/git-test/peepcode-git.pdf\")
+    (code-c-d \"gitdoc\" \"/usr/share/doc/git-doc/\")
+    )
+
+
+
+
+2. A first repository
+=====================
+The manpage of git-revisions
+
+  (find-man \"7 git-revisions\")
+  (find-man \"7 git-revisions\" \"Here is an illustration\")
+  (find-gitdocfile \"revisions.txt\" \"illustration, by Jon Loeliger\")
+
+has this example, in which the commits have this structure:
+
+  G   H   I   J
+   \\ /     \\ /
+    D   E   F
+     \\  |  / \\
+      \\ | /   |
+       \\|/    |
+        B     C
+         \\   /
+          \\ /
+           A
+
+Here is an e-script that creates it:
+
+ (eepitch-shell)
+ (eepitch-kill)
+ (eepitch-shell)
+  rm -Rfv /tmp/git-test/repo1/
+  mkdir   /tmp/git-test/repo1/
+  cd      /tmp/git-test/repo1/
+  .       /tmp/git-test/git-defs
+  # (find-fline \"/tmp/git-test/git-defs\")
+
+  git init
+  Modify file1; Modify file2; git add file1 file2
+                Commit A; git branch brAC
+  Modify file1; Commit B; git branch brBDG
+  git checkout brAC
+  Modify file1; Commit C
+  git checkout brBDG
+  Modify file1; Commit D
+  git checkout HEAD^ -b brE
+  Modify file1; Commit E
+  git checkout HEAD^
+  git merge -s ours brAC -m F
+  git branch brFI
+  git checkout brBDG
+  Modify file1; Commit G
+  git checkout HEAD^ -b brH
+  Modify file1; Commit H
+  git checkout brFI
+  Modify file1; Commit I
+  git checkout HEAD^ -b brJ
+  Modify file1; Commit J
+  Diagram
+
+  # (find-gitk \"/tmp/git-test/repo1/\")
+
+Actually it creates the structure below - where, for example, the
+node \"G,brBDG\" is a commit with message \"G\" and a branch
+called \"brBDG\" pointing to it; I call that branch \"brBDG\"
+because when it was created it pointed to the commit with message
+\"B\", then it moved to the commit \"D\", then to \"G\".
+
+                 I,brFI  J,brJ
+                    |   /
+  G,brBDG   H,brH   |  /
+         \\ /        | /
+          D  E,brE  F
+           \\   |   / \\
+            \\  |  /   |
+             \\ | /    |
+               B    C,brAC
+                \\    /
+                 \\  /
+                  A
+
+NEXT STEPS: explain how to use git merge both from the command
+line and from magit; explain HEAD, master, and tags. Point to man
+pages in man and text format and to sections in Scott Chacon's
+book. I NEED LOTS OF HELP HERE.
+
+  (find-man \"git-merge\")
+  (find-gitinternalspage)
+  (find-gitinternalstext)
+
+
+
+
+
+3. A second repository
+======================
+HELP PLEEEASEEEE
+
+
+ (eepitch-shell)
+ (eepitch-kill)
+ (eepitch-shell)
+  rm -Rfv /tmp/git-test/repo2/
+  mkdir   /tmp/git-test/repo2/
+  cd      /tmp/git-test/repo2/
+  .       /tmp/git-test/git-defs
+  # (find-fline \"/tmp/git-test/git-defs\")
+
+  git clone /tmp/git-test/repo1/ .
+  ls -lAF
+
+  # (find-gitk  \"/tmp/git-test/repo2/\")
+  # (find-fline \"/tmp/git-test/repo2/\")
+  # (find-fline \"/tmp/git-test/repo2/.git/\")
+  # (find-fline \"/tmp/git-test/repo2/.git/config\")
+
+  # (find-man \"1 git-remote\")
+  # (find-progitpage (+ 24  36) \"Adding Remote Repositories\")
+  # (find-progittext (+ 24  36) \"Adding Remote Repositories\")
+
+" pos-spec-list)))
+
+;; (find-git-intro)
+
+
+
+
+
 
 ;;; __        ___        _                _                       
 ;;; \ \      / / |      | |__   ___  __ _(_)_ __  _ __   ___ _ __ 
@@ -11356,9 +11511,10 @@ of the screen as a \"minibuffer\" - see:
   (find-enode \"M-x\" \"Running Commands by Name\")
 
 To install eev,
-  1. run `M-x list-packages',
-  2. select \"eev\" at the list of packages,
-  3. click on \"install\".
+  1. run `M-x package-initialize',
+  2. run `M-x list-packages',
+  3. select \"eev\" at the list of packages,
+  4. click on \"install\".
 
 To load eev and enter its tutorial, run
   `M-x eev-beginner'.
@@ -12273,6 +12429,183 @@ They are the hardest ones to read in the eev source.
 
 
 
+
+11. Byte-compiled functions
+===========================
+Most functions in Emacs are byte-compiled - which means that
+their function cells contain a \"byte-code\" instead of a lambda
+expression. These byte-codes are very hard for humans to read.
+See:
+
+  (find-elnode \"What Is a Function\" \"byte-code function\")
+  (find-elnode \"Byte-Code Type\")
+  (find-elnode \"Byte Compilation\")
+  (find-elnode \"Disassembly\")
+
+Here is an example:
+
+  (find-efunctiondescr 'find-file)
+  (find-efunction      'find-file)
+  (symbol-function     'find-file)
+  (find-efunctionpp    'find-file)
+  (find-efunctiond     'find-file)
+
+The `find-efunctionpp' link above takes the content of the
+function cell of `find-file' and \"pretty-prints\" it, i.e.,
+indents it in a nice way, but the result in this case is
+unreadable... and the `find-efunctiond' link shows a decompiled
+version of that byte-code, which is only slightly better. Both
+the `find-efunctionpp' and the `find-efunctiond' links show
+internal representations that are very different from the source
+code. Compare that with a case in which the function is not
+byte-compiled:
+
+  (find-efunctiondescr 'find-fline)
+  (find-efunction      'find-fline)
+  (symbol-function     'find-fline)
+  (find-efunctionpp    'find-fline)
+
+The `(find-efunctionpp 'find-fline)' shows a lambda expression
+that is very similar to the defun that defined `find-fline'.
+
+
+
+
+
+11.1. Why eev avoids byte-compilation
+-------------------------------------
+All the source files of eev have a \"no-byte-compile: t\" in
+them. See:
+
+  (find-eevgrep \"grep --color -nH -e no-byte-compile: *.el\")
+  (find-elnode \"Byte Compilation\" \"no-byte-compile: t\")
+  (find-enode \"Specifying File Variables\")
+
+This `no-byte-compile: t' is non-standard, but it is a deliberate
+design choice. I tried to make eev as beginner-friendly as
+possible, and beginners find byte-compiled functions confusing,
+so I avoided them as much as possible. Remember that several
+functions in eev define other functions - for example:
+
+  (find-eev-quick-intro \"9.1. `code-c-d'\")
+  (find-eev-quick-intro \"9.1. `code-c-d'\" \"mass-produced\")
+  (find-eev-quick-intro \"9.1. `code-c-d'\" \"find-code-c-d\")
+
+and if you try to understand what a hyperlink function like one
+below does by typing `M-h M-f' on it,
+
+  (find-efile \"subr.el\")
+
+then the `find-efunction' link in the `M-h M-f' buffer will not
+work - but the `find-efunctionpp' link will. Try:
+
+  (find-efunction   'find-efile)
+  (find-efunctionpp 'find-efile)
+
+
+
+
+
+11.2. How `find-efunction' works
+--------------------------------
+Eev defines hyperlink functions called `find-efunction',
+`find-evariable' and `find-eface' that are wrappers around the
+standard Emacs functions `find-function', `find-variable' and
+`find-face-definition'; the eev variants support pos-spec-lists.
+Try:
+
+  (find-efunction 'find-fline)
+  (find-function  'find-fline)
+  (find-evariable 'ee-hyperlink-prefix)
+  (find-variable  'ee-hyperlink-prefix)
+  (find-eface           'eepitch-star-face)
+  (find-face-definition 'eepitch-star-face)
+
+The Emacs functions are defined here:
+
+  (find-efile \"emacs-lisp/find-func.el\")
+
+and their inner workings are quite complex. To begin with, hey
+use `symbol-file', that works on the variable `load-history'.
+Here are some links to documentation and tests:
+
+  (find-efunctiondescr 'symbol-file)
+  (find-elnode \"Where Defined\")
+  (symbol-file 'find-fline          'defun)
+  (symbol-file 'find-efile          'defun)
+  (symbol-file 'ee-hyperlink-prefix 'defvar)
+  (symbol-file 'eepitch-star-face   'defface)
+  (find-eloadhistory \"eepitch\")
+  (find-eloadhistory \"eepitch\" \"eepitch-star-face\")
+
+The functions in \"find-func.el\" use `symbol-file' to find the
+file where a given symbol was defined, and then search for a
+defun, defvar of defface in it that _looks like_ the definition
+that we are looking for.
+
+Emacs knows that `find-efile' was defined in \"eev-code.el\",
+because of:
+
+  (symbol-file 'find-efile          'defun)
+  (find-eloadhistory \"eev-code\" \"find-efile\")
+
+but if we run
+
+  (find-function 'find-efile)
+
+this will fail, because Emacs will look for something like
+\"(defun find-efile \" in \"eev-code.el\", and it will not find
+it; it doesn't know that `find-efile' was defined by this
+`code-c-d':
+
+  (find-eev \"eev-code.el\" \"code-c-d-s\")
+  (find-eev \"eev-code.el\" \"code-c-d-s\" \"\\\"e\\\"\")
+
+Let's be even more precise. \"find-func.el\" defines these
+low-level functions,
+
+  (find-efunctiondescr 'find-function-noselect)
+  (find-efunctiondescr 'find-variable-noselect)
+  (find-efunctiondescr 'find-definition-noselect)
+
+that return structures of the form (BUFFER . POS), and eev
+defines a function
+
+  (find-efunctiondescr 'find-ebufferandpos)
+  (find-efunction      'find-ebufferandpos)
+
+that jumps to a (BUFFER . POS); `find-efunction' and friends are
+implemented using `find-ebufferandpos'. Try: 
+
+  (find-ebufferandpos
+   (find-function-noselect 'find-fline)
+   )
+  (find-ebufferandpos
+   (find-variable-noselect 'ee-hyperlink-prefix)
+   )
+  (find-ebufferandpos
+   (find-definition-noselect 'eepitch-star-face 'defface)
+   )
+
+These `find-*-noselect' functions work quite well but are not
+100% reliable - for example, if an elisp file has several
+definitions for the same function, variable, or face, the
+`find-*-noselect's don't know which ones were executed, neither
+which one was executed last, overriding the other ones... and it
+may return the position of a defun, defvar, or defface that is
+not the \"active\" one. In eev redefinitions like these ones
+
+  (code-pdf-page \"foomanual\" \"/usr/src/foo-1.2.3/manual.pdf\")
+  (code-pdf-page \"foomanual\" \"/usr/src/foo-1.2.4/manual.pdf\")
+
+are quite common, and
+
+  (find-efunctionpp 'find-foomanualpage)
+
+will give you information about the current definition.
+
+
+
 " pos-spec-list)))
 
 ;; (find-elisp-intro)
diff --git a/eev-testblocks.el b/eev-testblocks.el
index c95f213..cff3d9c 100644
--- a/eev-testblocks.el
+++ b/eev-testblocks.el
@@ -19,7 +19,7 @@
 ;;
 ;; Author:     Eduardo Ochs <eduardoochs@gmail.com>
 ;; Maintainer: Eduardo Ochs <eduardoochs@gmail.com>
-;; Version:    2020aug05
+;; Version:    2020oct10
 ;; Keywords:   e-scripts
 ;;
 ;; Latest version: <http://angg.twu.net/eev-current/eev-testblocks.el>
@@ -36,6 +36,12 @@
 ;; interactive tests. See:
 ;;
 ;;   (find-eepitch-intro "3. Test blocks")
+;;   (find-eepitch-intro "3.1. `find-eeit-links'")
+
+
+;; «.ee-insert-test»   (to "ee-insert-test")
+;; «.examples»         (to "examples")
+
 
 
 
@@ -60,20 +66,28 @@
       (funcall (intern (format "ee-insert-test-%s" major-mode)))
     (error "ee-insert-test: Unsupported major mode: %s" major-mode)))
 
-;; The old definition was:
+
+;;;                                 _           
+;;;   _____  ____ _ _ __ ___  _ __ | | ___  ___ 
+;;;  / _ \ \/ / _` | '_ ` _ \| '_ \| |/ _ \/ __|
+;;; |  __/>  < (_| | | | | | | |_) | |  __/\__ \
+;;;  \___/_/\_\__,_|_| |_| |_| .__/|_|\___||___/
+;;;                          |_|                
 ;;
-;; (defun ee-insert-test ()
-;;   "Insert a \"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))
-;;         ((eq major-mode 'idris-mode)   (ee-insert-test-idris))
-;;         ((eq major-mode 'haskell-mode) (ee-insert-test-haskell))
-;;         (t (error "ee-insert-test: Unsupported major mode"))))
+;; «examples»  (to ".examples")
+;; See: (find-eepitch-intro "3.1. `find-eeit-links'")
 
+(defun ee-insert-test-haskell-mode ()
+  (interactive)
+  (insert (format "
+{-
+ (eepitch-ghci)
+ (eepitch-kill)
+ (eepitch-ghci)
+:load %s
+
+-}
+" (buffer-name))))
 
 (defun ee-insert-test-julia-mode ()
   (interactive)
@@ -147,26 +161,16 @@ source %s
 }
 " (buffer-name))))
 
-(defun ee-insert-test-idris-mode ()
+(defun ee-insert-test-tuareg-mode ()
   (interactive)
   (insert (format "
-{-
- (eepitch-to-buffer \"*idris-repl*\")
-
--}
-" (buffer-name))))
-
-
-(defun ee-insert-test-haskell-mode ()
-  (interactive)
-  (insert (format "
-{-
- (eepitch-ghci)
+(*
+ (eepitch-ocaml)
  (eepitch-kill)
- (eepitch-ghci)
-:load %s
+ (eepitch-ocaml)
+#use \"%s\";;
 
--}
+*)
 " (buffer-name))))
 
 
diff --git a/eev-tlinks.el b/eev-tlinks.el
index 58414a4..71fc0f0 100644
--- a/eev-tlinks.el
+++ b/eev-tlinks.el
@@ -19,7 +19,7 @@
 ;;
 ;; Author:     Eduardo Ochs <eduardoochs@gmail.com>
 ;; Maintainer: Eduardo Ochs <eduardoochs@gmail.com>
-;; Version:    2020feb20
+;; Version:    2020oct13
 ;; Keywords:   e-scripts
 ;;
 ;; Latest version: <http://angg.twu.net/eev-current/eev-tlinks.el>
@@ -58,11 +58,10 @@
 ;; «.ee-copy-rest»                     (to "ee-copy-rest")
 ;;
 ;; «.find-find-links-links»            (to "find-find-links-links")
-;; «.ee-ffll-functions»                        (to "ee-ffll-functions")
 ;; «.find-find-links-links-new»                (to "find-find-links-links-new")
+;; «.ee-ffll-functions»                        (to "ee-ffll-functions")
 ;;
 ;; «.find-intro-links»                 (to "find-intro-links")
-;; «.find-pdflikedef-links»            (to "find-pdflikedef-links")
 ;; «.find-eev-header-links»            (to "find-eev-header-links")
 ;;
 ;; «.find-debpkg-links»                        (to "find-debpkg-links")
@@ -80,6 +79,9 @@
 ;; «.find-escreenshot-links»           (to "find-escreenshot-links")
 ;; «.find-windows-eepitch-lua-links»   (to "find-windows-eepitch-lua-links")
 ;; «.find-extra-file-links»            (to "find-extra-file-links")
+;; «.find-emacs-tangents-links»                (to "find-emacs-tangents-links")
+;; «.find-eeit-links»                  (to "find-eeit-links")
+;; «.find-texlive-links»               (to "find-texlive-links")
 
 
 (require 'eev-env)
@@ -212,8 +214,9 @@ See: (find-eev \"eev-tlinks.el\" \"ee-copy-rest\")"
 ;;;                                                     
 ;;
 ;; «find-find-links-links» (to ".find-find-links-links")
-;; See:  (find-templates-intro "horrible" "kludge")
 ;; Test: (find-find-links-links "u" "find-links" "k stem args")
+;; THIS IS OBSOLETE - DON'T USE THIS!
+;; Use `find-find-links-links-new' instead.
 
 (defun ee-prepend-commas (str)
   (save-match-data
@@ -223,6 +226,8 @@ See: (find-eev \"eev-tlinks.el\" \"ee-copy-rest\")"
 (defun ee-if-nil-setqs (vars sep)
   (mapconcat 'ee-if-nil-setq (save-match-data (ee-split vars)) sep))
 
+(defalias 'find-find-links-links-old 'find-find-links-links)
+
 (defun find-find-links-links (&optional k stem args &rest pos-spec-list)
 "Visit a temporary buffer containing hyperlinks for foo."
   (interactive)
@@ -273,6 +278,40 @@ This is an internal function used by `find-{stem}-links'.\"
 
 
 
+
+;;;   __ _           _       _ _       _       /\ ____                         
  
+;;;  / _(_)_ __   __| |     | (_)_ __ | | ____|/\|___ \      _ __   _____      
__
+;;; | |_| | '_ \ / _` |_____| | | '_ \| |/ / __|   __) |____| '_ \ / _ \ \ /\ 
/ /
+;;; |  _| | | | | (_| |_____| | | | | |   <\__ \  / __/_____| | | |  __/\ V  V 
/ 
+;;; |_| |_|_| |_|\__,_|     |_|_|_| |_|_|\_\___/ |_____|    |_| |_|\___| 
\_/\_/  
+;;;                                                                            
  
+;; «find-find-links-links-new»  (to ".find-find-links-links-new")
+;; Test: (find-find-links-links-new)
+;; Many of the templated functions of eev were written using this.
+;; They all have a line saying ";; Skel:" that generates their "skeleton".
+;; See: (find-eevgrep "grep --color -nH --null -e Skel: *.el")
+;;
+(defun find-find-links-links-new (&optional stem args vars &rest pos-spec-list)
+"Visit a temporary buffer containing a skeleton of a find-*-links function."
+  (interactive)
+  (setq stem (or stem "{stem}"))
+  (setq args (or args "{args}"))
+  (setq vars (or vars "{vars}"))
+  (apply 'find-elinks-elisp
+   `((find-find-links-links-new ,stem ,args ,vars ,@pos-spec-list)
+     (find-find-links-links-new "mytask" "foo bar" "" ,@pos-spec-list)
+     (find-find-links-links-new "mytask" "foo bar" "plic bletch" 
,@pos-spec-list)
+     ;; Convention: the first sexp always regenerates the buffer.
+     (find-efunction 'find-find-links-links-new)
+     ""
+     ,(ee-template0 ";; <find-{stem}-links>")
+     ,(concat ";; Skel: " (ee-S `(find-find-links-links-new ,stem ,args 
,vars)))
+     ";;"
+     ,(ee-ffll-defun stem args vars)
+     )
+   pos-spec-list))
+
+
 ;;;                   __  __ _ _ _            
 ;;;   ___  ___       / _|/ _| | | |     __/\__
 ;;;  / _ \/ _ \_____| |_| |_| | | |_____\    /
@@ -282,15 +321,6 @@ This is an internal function used by `find-{stem}-links'.\"
 ;; «ee-ffll-functions»  (to ".ee-ffll-functions")
 ;; Low-level functions used by find-find-links-links-new.
 ;;
-;; The original `find-find-links-links' whas a horrible kludge.
-;; See: (find-templates-intro "horrible" "kludge")
-;; This is an attempt to rewrite it.
-;; It was inspired by discussions with Marc Simpson.
-;; Version (of the ee-ffll-functions and find-find-links-links-new):
-;; 2020jan07.
-;; Status: `find-find-links-links-new' doesn't exist yet, but the
-;; tests below work.
-
 ;; Tests:
 ;; (ee-ffll-optional "")
 ;; (ee-ffll-optional "foo bar")
@@ -376,29 +406,6 @@ This is an internal function used by `find-{stem}-links'.\"
      (ee-ffll-defun-without-lets stem args)))
 
 
-;; «find-find-links-links-new»  (to ".find-find-links-links-new")
-;; Test: (find-find-links-links-new)
-;;
-(defun find-find-links-links-new (&optional stem args vars &rest pos-spec-list)
-"Visit a temporary buffer containing a skeleton of a find-*-links function."
-  (interactive)
-  (setq stem (or stem "{stem}"))
-  (setq args (or args "{args}"))
-  (setq vars (or vars "{vars}"))
-  (apply 'find-elinks-elisp
-   `((find-find-links-links-new ,stem ,args ,vars ,@pos-spec-list)
-     (find-find-links-links-new "mytask" "foo bar" "" ,@pos-spec-list)
-     (find-find-links-links-new "mytask" "foo bar" "plic bletch" 
,@pos-spec-list)
-     ;; Convention: the first sexp always regenerates the buffer.
-     (find-efunction 'find-find-links-links-new)
-     ""
-     ,(ee-template0 ";; <find-{stem}-links>")
-     ,(concat ";; Skel: " (ee-S `(find-find-links-links-new ,stem ,args 
,vars)))
-     ";;"
-     ,(ee-ffll-defun stem args vars)
-     )
-   pos-spec-list))
-
 
 
 
@@ -413,22 +420,24 @@ This is an internal function used by 
`find-{stem}-links'.\"
 ;;; |_|_| |_|\__|_|  \___/      |_|_|_| |_|_|\_\___/
 ;;;                                                 
 ;; «find-intro-links»  (to ".find-intro-links")
-;; (find-find-links-links "i" "intro" "stem")
-;; A test: (find-intro-links)
-
+;; Skel: (find-find-links-links-new "intro" "stem" "")
+;; Test: (find-intro-links)
+;;
 (defun find-intro-links (&optional stem &rest pos-spec-list)
 "Visit a temporary buffer with a skeleton for defining `find-<STEM>-intro'.
 All `find-*-intro' functions in eev-intro.el were written using this.
 See: (find-eev \"eev-intro.el\")"
   (interactive)
   (setq stem (or stem "{stem}"))
-  (apply 'find-elinks-elisp
-   `((find-intro-links ,stem    ,@pos-spec-list)
+  (apply
+   'find-elinks-elisp
+   `((find-intro-links ,stem ,@pos-spec-list)
      (find-intro-links "{stem}" ,@pos-spec-list)
      (find-intro-links "foo"    ,@pos-spec-list)
      ;; Convention: the first sexp always regenerates the buffer.
      (find-efunction 'find-intro-links)
-    ,(ee-template0 "\
+     ""
+     ,(ee-template0 "\
 ;; (ee-copy-rest 1 '(find-eev \"eev-intro.el\"))
 ;; (find-{stem}-intro)
 
@@ -441,7 +450,7 @@ See: (find-eev \"eev-intro.el\")"
 \\(Re)generate: (find-{stem}-intro)
 Source code:  (find-efunction 'find-{stem}-intro)
 More intros:  (find-eev-quick-intro)
-              (find-eval-intro)
+              (find-eev-intro)
               (find-eepitch-intro)
 This buffer is _temporary_ and _editable_.
 It is meant as both a tutorial and a sandbox.
@@ -451,7 +460,9 @@ Hello
 \" pos-spec-list)))
 
 ;; (find-{stem}-intro)
-")) pos-spec-list))
+")
+     )
+   pos-spec-list))
 
 ;; (find-intro-links)
 ;; (find-intro-links "emacs")
@@ -460,82 +471,6 @@ Hello
 
 
 
-;;;            _  __ _ _ _            _       __ 
-;;;  _ __   __| |/ _| (_) | _____  __| | ___ / _|
-;;; | '_ \ / _` | |_| | | |/ / _ \/ _` |/ _ \ |_ 
-;;; | |_) | (_| |  _| | |   <  __/ (_| |  __/  _|
-;;; | .__/ \__,_|_| |_|_|_|\_\___|\__,_|\___|_|  
-;;; |_|                                          
-;;
-;; «find-pdflikedef-links» (to ".find-pdflikedef-links")
-;; Obsolete! Was used in: (find-eev "eev-pdflike-old.el")
-;;   e.g. (find-eev "eev-pdflike-old.el" "defalias 'find-xdvipage")
-;; (find-find-links-links "pdflikedef" "stem firstargs")
-;;
-(defun find-pdflikedef-links (&optional stem firstargs &rest rest)
-  "Visit a temporary buffer containing hyperlinks for pdflikedef."
-  (interactive)
-  (setq stem (or stem "{stem}"))
-  (setq firstargs (or firstargs "{firstargs}"))
-  (apply 'find-elinks-elisp `(
-    ;; Convention: the first sexp always regenerates the buffer.
-    (find-pdflikedef-links ,stem ,firstargs ,@rest)
-    (find-efunction 'find-pdflikedef-links)
-    (emacs-lisp-mode)
-    ;; Body:
-    ""
-    ,(ee-template0 "\
-;; (find-efunction 'code-{stem})
-
-;; find-{stem}page
-;; find-{stem}-page
-;; code-{stem}
-;;
-\(defalias 'find-{stem}page
-          'find-{stem}-page)
-\(defun     find-{stem}-page (fname &optional page &rest rest)
-  (find-bgprocess (ee-find-{stem}-page fname page)))
-\(defvar ee-find-{stem}-page-options '())
-\(defun  ee-find-{stem}-page (fname &optional page)
-  `(\"{stem}\"
-    ,@ee-find-{stem}-page-options
-    ,@(if page `(,(format \"--page=%d\" page)))
-    ,fname))
-
-\(defun      code-{stem} ({firstargs} &rest rest)
-  (eval (ee-read      (apply 'ee-code-{stem} {firstargs} rest))))
-\(defun find-code-{stem} ({firstargs} &rest rest)
-  (find-estring-elisp (apply 'ee-code-{stem} {firstargs} rest)))
-\(defun   ee-code-{stem} ({firstargs} &rest rest)
-  (concat (ee-template0 \"\\
-\\(defun find-{<}c{>}page (&optional page &rest rest)
-  (find-{stem}-page {<}(ee-pp0 fname){>} page))
-{<}(ee-code-pdftext-rest rest){>}
-\")  (ee-code-pdftext-rest rest)))
-
-\(code-brfile 'find-xpdf-page :local 'brxpdfl :dired 'brxpdfl)
-
-
-;; Tests:
-;; (find-epp (ee-find-{stem}-page \"/tmp/foo.pdf\"))
-;; (find-epp (ee-find-{stem}-page \"/tmp/foo.pdf\" 2))
-;;           (find-{stem}-page    \"/tmp/foo.pdf\")
-;;           (find-{stem}-page    \"/tmp/foo.pdf\" 2)
-;;
-;;      (find-code-{stem} \"foo\"   \"/tmp/foo.pdf\")
-;;           (code-{stem} \"foo\"   \"/tmp/foo.pdf\")
-;;                 (find-foopage)
-;;                 (find-foopage 2)
-;;      (code-pdftotext \"foo\"   \"/tmp/foo.pdf\")
-")
-    ) rest))
-
-;; (find-pdflikedef-links "djvu" "c fname")
-;; (find-efunctionpp 'find-pdflikedef-links)
-
-
-
-
 ;;;                       _                    _           
 ;;;   ___  _____   __    | |__   ___  __ _  __| | ___ _ __ 
 ;;;  / _ \/ _ \ \ / /____| '_ \ / _ \/ _` |/ _` |/ _ \ '__|
@@ -1141,10 +1076,11 @@ cd {dir}
 "See: (find-psne-intro)"
   (interactive)
   (setq url (or url "{url}"))
-  (setq wget-options (or wget-options ""))
+  (setq wget-options (or wget-options "-nc"))
   (apply 'find-elinks
    `((find-psne-links ,url ,wget-options ,@pos-spec-list)
      (find-psne-links ,url "-c" ,@pos-spec-list)
+     (find-psne-links ,url "" ,@pos-spec-list)
      ;; Convention: the first sexp always regenerates the buffer.
      (find-efunction 'find-psne-links)
      ""
@@ -1452,7 +1388,7 @@ Warning: the last one is in Portuguese..."
  (eepitch-shell2)
 mkdir -p $S/http/angg.twu.net/eev-videos/
 cd       $S/http/angg.twu.net/eev-videos/
-wget  -c 'http://angg.twu.net/eev-videos/{anggstem}.mp4'
+wget -nc 'http://angg.twu.net/eev-videos/{anggstem}.mp4'
 echo     'http://angg.twu.net/eev-videos/{anggstem}.mp4' >> ~/.psne.log
 
 # Test:
@@ -1841,6 +1777,172 @@ os.exit()
 
 
 
+;; «find-emacs-tangents-links»  (to ".find-emacs-tangents-links")
+;; Skel: (find-find-links-links-new "emacs-tangents" "yyyy mm dd msg txtstem" 
"")
+;; Test: (find-emacs-tangents-links "2020" "10" "05")
+;;
+(defun find-emacs-tangents-links (&optional yyyy mm dd msg txtstem &rest 
pos-spec-list)
+"Visit a temporary buffer with hyperlinks to a post in emacs-tangents."
+  (interactive)
+  (setq yyyy (or yyyy "{yyyy}"))
+  (setq mm (or mm "{mm}"))
+  (setq dd (or dd "{dd}"))
+  (setq msg (or msg "{msg}"))
+  (setq txtstem (or txtstem "{txtstem}"))
+  (apply
+   'find-elinks
+   `((find-emacs-tangents-links ,yyyy ,mm ,dd ,msg ,txtstem ,@pos-spec-list)
+     ;; Convention: the first sexp always regenerates the buffer.
+     (find-emacs-tangents-links "2020" "10" "05" "msg00000" "txts2ETp920ql")
+     (find-emacs-tangents-links "2018" "01" "29" "msg00025" "txtJ1ftXqItdm")
+     (find-efunction 'find-emacs-tangents-links)
+     ""
+     ,(ee-template0 "\
+# https://sachachua.com/blog/{yyyy}/
+# https://sachachua.com/blog/{yyyy}/{mm}/
+# https://sachachua.com/blog/{yyyy}/{mm}/{yyyy}-{mm}-{dd}-emacs-news/
+# https://lists.gnu.org/archive/html/emacs-tangents/{yyyy}-{mm}/
+# https://lists.gnu.org/archive/html/emacs-tangents/{yyyy}-{mm}/{msg}.html
+
+ (eepitch-shell)
+ (eepitch-kill)
+ (eepitch-shell)
+# (find-fline \"~/usrc/emacs-tangents/\")
+# (find-fline \"~/usrc/emacs-tangents/{yyyy}-{mm}-{dd}-emacs-news.org\")
+
+mkdir -p ~/usrc/emacs-tangents/
+cd       ~/usrc/emacs-tangents/
+# rm -v     {yyyy}-{mm}-{dd}-emacs-news.org
+wget -nc -O {yyyy}-{mm}-{dd}-emacs-news.org \\
+  https://lists.gnu.org/archive/html/emacs-tangents/{yyyy}-{mm}/{txtstem}.txt
+")
+     )
+   pos-spec-list))
+
+
+
+
+;; «find-eeit-links»  (to ".find-eeit-links")
+;; Skel: (find-find-links-links-new "eeit" "majormode" "majormodestr 
eeitfunstr eeitfun")
+;; See:  (find-eepitch-intro "3.1. `find-eeit-links'")
+;; Test: (find-eeit-links 'lua-mode)
+;;
+(defun find-eeit-links (&optional majormode &rest pos-spec-list)
+"Visit a temporary buffer containing hyperlinks for eeit."
+  (interactive)
+  (setq majormode (or majormode major-mode))
+  (let* ((majormodestr (symbol-name majormode))
+         (eeitfunstr (concat "ee-insert-test-" majormodestr))
+         (eeitfun (intern eeitfunstr)))
+    (apply
+     'find-elinks-elisp
+     `((find-eeit-links ',majormode ,@pos-spec-list)
+       ;; Convention: the first sexp always regenerates the buffer.
+       ;; ""
+       ,(ee-template0 "\
+;; (find-efunction 'find-eeit-links)
+;; (find-eepitch-intro \"3. Test blocks\")
+;; (find-eepitch-intro \"3.1. `find-eeit-links'\")
+;; (find-eev \"eev-testblocks.el\" \"examples\")
+
+;; Current definition:
+;; (find-efunction              '{eeitfun})
+;; (find-efunctionpp            '{eeitfun})
+;; (find-epp (ee-defun-sexp-for '{eeitfun}))
+
+
+;; <{eeitfunstr}>
+;;
+(defun {eeitfunstr} ()
+  (interactive)
+  (insert (format \"
+--[[
+ (eepitch-lua51)
+ (eepitch-kill)
+ (eepitch-lua51)
+dofile \\\"%s\\\"
+
+--]]
+\" (buffer-name))))
+
+;; Test:
+;; ({eeitfunstr})
+
+")
+       )
+     pos-spec-list)))
+
+
+
+
+;;;  _____   __  ___     _           
+;;; |_   _|__\ \/ / |   (_)_   _____ 
+;;;   | |/ _ \\  /| |   | \ \ / / _ \
+;;;   | |  __//  \| |___| |\ V /  __/
+;;;   |_|\___/_/\_\_____|_| \_/ \___|
+;;;                                  
+;; «find-texlive-links»  (to ".find-texlive-links")
+
+(defun find-texlive-links (&optional date &rest pos-spec-list)
+"Visit a temporary buffer containing an e-script for installing texlive from 
upstream."
+  (interactive)
+  (setq date (or date "{date}"))
+  (apply 'find-elinks
+   `((find-texlive-links ,date ,@pos-spec-list)
+     ;; Convention: the first sexp always regenerates the buffer.
+     (find-texlive-links "20190809")
+     (find-efunction 'find-texlive-links)
+     ""
+     ,(ee-template0 "\
+# https://www.tug.org/texlive/
+# https://www.tug.org/texlive/acquire-netinstall.html
+# https://www.tug.org/texlive/quickinstall.html
+# http://mirror.ctan.org/systems/texlive/tlnet/install-tl-unx.tar.gz
+#   (find-fline \"$S/http/mirror.ctan.org/systems/texlive/tlnet/\")
+#   (find-fline 
\"$S/http/mirror.ctan.org/systems/texlive/tlnet/install-tl-unx.tar.gz\")
+# https://www.tug.org/texlive/doc/install-tl.html
+# (find-fline \"~/usrc/\" \"install-tl-\")
+# (find-fline \"~/.texlive2018/\")
+# (find-fline \"~/.texlive2019/\")
+# (find-fline \"/usr/local/texlive/2018/\")
+# (find-fline \"/usr/local/texlive/2019/\")
+# (find-fline \"/usr/local/texlive/2019/\" \"install-tl.log\")
+# (find-fline \"/usr/local/texlive/2019/release-texlive.txt\")
+
+ (eepitch-shell2)
+ (eepitch-kill)
+ (eepitch-shell2)
+# rm -rfv ~/.texlive2018/
+# sudo rm -rfv /usr/local/texlive/2018/
+
+mkdir -p $S/http/mirror.ctan.org/systems/texlive/tlnet/
+cd       $S/http/mirror.ctan.org/systems/texlive/tlnet/
+rm -fv   $S/http/mirror.ctan.org/systems/texlive/tlnet/install-tl-unx.tar.gz
+wget      http://mirror.ctan.org/systems/texlive/tlnet/install-tl-unx.tar.gz
+echo      http://mirror.ctan.org/systems/texlive/tlnet/install-tl-unx.tar.gz 
>> ~/.psne.log
+# (find-fline 
\"$S/http/mirror.ctan.org/systems/texlive/tlnet/install-tl-unx.tar.gz\")
+# ^ Check the date here and adjust the {<}date{>} parameter of the template
+
+rm -Rfv ~/usrc/install-tl-{date}/
+mkdir   ~/usrc/
+tar  -C ~/usrc/ -xvzf \
+  $S/http/mirror.ctan.org/systems/texlive/tlnet/install-tl-unx.tar.gz
+cd      ~/usrc/install-tl-{date}/
+# sudo ./install-tl
+sudo ./install-tl -select-repository
+
+# (code-c-d \"tlinstall\" \"~/usrc/install-tl-{date}/\")
+# (find-tlinstallfile \"\")
+# (find-tlinstallfile \"install-tl.log\")
+# (find-tlinstallfile \"install-tl\")
+# https://www.tug.org/texlive/doc/install-tl.html
+
+")
+     )
+   pos-spec-list))
+
+;; Test: (find-texlive-links)
+
 
 
 
diff --git a/eev-wrap.el b/eev-wrap.el
index d5ece26..d50a7f0 100644
--- a/eev-wrap.el
+++ b/eev-wrap.el
@@ -181,6 +181,7 @@ have to run an \"undo\"."
 ;;; |_|  |_|     |_.__(_)  \___||___/\___|_|  |_| .__/ \__| |_.__/|_|_|\_\
 ;;;                                             |_|                       
 ;;
+;; See: (find-eev-quick-intro "8.4. Creating e-script blocks")
 ;; (define-key eev-mode-map "\M-B" 'eewrap-escript-block)
 
 (defun  eewrap-escript-block () (interactive)
@@ -309,6 +310,7 @@ have to run an \"undo\"."
 ;;; | |  | |_____|  __/ _  | |_) | (_| |  _| | |   <  __/
 ;;; |_|  |_|     |_|   (_) | .__/ \__,_|_| |_|_|_|\_\___|
 ;;;                        |_|                           
+;;
 ;; See: (find-pdf-like-intro)
 ;; (define-key eev-mode-map "\M-P" 'eewrap-pdflike)
 
@@ -332,8 +334,10 @@ have to run an \"undo\"."
 ;;; | |  | |_____| |_| |_  | |_) | (_| |  _| | |   <  __/_____| | | | | |   < 
 ;;; |_|  |_|      \__\_(_) | .__/ \__,_|_| |_|_|_|\_\___|     |_|_|_| |_|_|\_\
 ;;;                        |_|                                                
+;;
 ;; See: (find-pdf-like-intro)
 ;; (define-key eev-mode-map "\M-Q" 'eewrap-pdflike-link)
+;; OBSOLETE.
 
 (defun  eewrap-pdflike-link () (interactive)
   (ee-this-line-wrapn 2 'ee-wrap-pdflike-link))
diff --git a/eev.el b/eev.el
index e1c3314..38f9902 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: 20200928
+;; Version: 20201013
 
 ;; 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]