branch: externals/eev commit 90678b46c75a954a5962ad626290355f3fc6d539 Merge: 3f6b3ee b3eff28 Author: Stefan Monnier <monn...@iro.umontreal.ca> Commit: Stefan Monnier <monn...@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 <eduardoo...@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 <eduardoo...@gmail.com> + + * eev-elinks.el (find-pdflike-page-links): rewrote using + `find-find-links-links-new'. + +2020-10-10 Eduardo Ochs <eduardoo...@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 <eduardoo...@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 <eduardoo...@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 <eduardoo...@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 <eduardoo...@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 <eduardoo...@gmail.com> ;; Maintainer: Eduardo Ochs <eduardoo...@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 <eduardoo...@gmail.com> ;; Maintainer: Eduardo Ochs <eduardoo...@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 <eduardoo...@gmail.com> ;; Maintainer: Eduardo Ochs <eduardoo...@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 <eduardoo...@gmail.com> ;; Maintainer: Eduardo Ochs <eduardoo...@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 <eduardoo...@gmail.com> ;; Maintainer: Eduardo Ochs <eduardoo...@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