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

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

[elpa] externals/eev ebd3d35 1/2: Rewrote `ee-insert-test'. Added `(find


From: Stefan Monnier
Subject: [elpa] externals/eev ebd3d35 1/2: Rewrote `ee-insert-test'. Added `(find-elisp-intro)'.
Date: Mon, 28 Sep 2020 16:30:57 -0400 (EDT)

branch: externals/eev
commit ebd3d356d231d55129262581924d1586eef703f9
Author: Eduardo Ochs <eduardoochs@gmail.com>
Commit: Eduardo Ochs <eduardoochs@gmail.com>

    Rewrote `ee-insert-test'. Added `(find-elisp-intro)'.
---
 ChangeLog         |  47 +++++
 VERSION           |   4 +-
 eev-bounded.el    |   7 +-
 eev-elinks.el     |   3 +-
 eev-intro.el      | 585 ++++++++++++++++++++++++++++++++++++++----------------
 eev-testblocks.el |  73 +++++--
 eev-tlinks.el     |   3 +-
 eev-wrap.el       |   2 +-
 eev.el            |   4 +-
 9 files changed, 532 insertions(+), 196 deletions(-)

diff --git a/ChangeLog b/ChangeLog
index 08ed8e9..2235855 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,50 @@
+2020-09-28  Eduardo Ochs  <eduardoochs@gmail.com>
+
+       * eev-intro.el (find-elisp-intro): new function.
+       (find-creating-links-intro): deleted.
+       (find-what-sexps-can-do-intro): deleted.
+       (find-eev-intro): small adjustments.
+
+2020-08-31  Eduardo Ochs  <eduardoochs@gmail.com>
+
+       * eev-intro.el (find-eepitch-intro): added links to
+       <http://angg.twu.net/emacsconf2019.html> and to its video.
+
+2020-08-07  Eduardo Ochs  <eduardoochs@gmail.com>
+
+       * eev-testblocks.el (ee-insert-test-julia-mode): new function.
+
+2020-08-05  Eduardo Ochs  <eduardoochs@gmail.com>
+
+       * eev-testblocks.el (ee-insert-test): rewritten.
+       (ee-insert-test-lua): deleted.
+       (ee-insert-test-lua-mode): new function.
+       (ee-insert-test-python): deleted.
+       (ee-insert-test-python-mode): new function.
+       (ee-insert-test-ruby): deleted.
+       (ee-insert-test-ruby-mode): new function.
+       (ee-insert-test-sh): deleted.
+       (ee-insert-test-sh-mode): new function.
+       (ee-insert-test-tcl): deleted.
+       (ee-insert-test-tcl-mode): new function.
+       (ee-insert-test-idris): deleted.
+       (ee-insert-test-idris-mode): new function.
+       (ee-insert-test-haskell): deleted.
+       (ee-insert-test-haskell-mode): new function.
+
+       * eev-intro.el (find-eepitch-intro): added documentation for the
+       new `M-x ee-insert-test'.
+
+2020-07-22  Eduardo Ochs  <eduardoochs@gmail.com>
+
+       * eev-elinks.el (ee-find-epackage-links0): added a link to
+       `find-epackage-links'.
+
+2020-04-27  Eduardo Ochs  <eduardoochs@gmail.com>
+
+       * eev-testblocks.el (ee-insert-test): add ee-insert-test-haskell.
+       (ee-insert-test-haskell): new function.
+
 2020-02-24  Eduardo Ochs  <eduardoochs@gmail.com>
 
        * eev.el: updated the "Version:" (for ELPA).
diff --git a/VERSION b/VERSION
index 9e78632..08d87b5 100644
--- a/VERSION
+++ b/VERSION
@@ -1,2 +1,2 @@
-Mon Feb 24 18:24:03 GMT 2020
-Mon Feb 24 15:24:03 -03 2020
+Mon Sep 28 19:32:02 GMT 2020
+Mon Sep 28 16:32:02 -03 2020
diff --git a/eev-bounded.el b/eev-bounded.el
index e6b369f..4748a91 100644
--- a/eev-bounded.el
+++ b/eev-bounded.el
@@ -42,6 +42,9 @@
 
 ;; See: (find-bounded-intro)
 
+;; «.code-bounded»     (to "code-bounded")
+;; «.obsolete»         (to "obsolete")
+
 
 
 
@@ -80,6 +83,7 @@ This function does not move point."
 ;;; | (_| (_) | (_| |  __/_____| |_) | (_) | |_| | | | | (_| |  __/ (_| |
 ;;;  \___\___/ \__,_|\___|     |_.__/ \___/ \__,_|_| |_|\__,_|\___|\__,_|
 ;;;                                                                      
+;; «code-bounded»  (to ".code-bounded")
 ;; See: (find-bounded-intro "Defining new bounded functions")
 
 (defun       code-bounded (newf f delim &optional adjust face dur)
@@ -155,6 +159,7 @@ See: (find-bounded-intro)\"
 ;;; | (_) | |_) \__ \ (_) | |  __/ ||  __/
 ;;;  \___/|_.__/|___/\___/|_|\___|\__\___|
 ;;;                                       
+;; «obsolete»  (to ".obsolete")
 ;; Obsolete code that I don't want to delete yet
 ;; (mainly because the docstrings have some good ideas in them)
 
@@ -325,6 +330,6 @@ echo $[1+2]
 
 
 ;; Local Variables:
-;; coding:          raw-text-unix
+;; coding:          utf-8-unix
 ;; no-byte-compile: t
 ;; End:
diff --git a/eev-elinks.el b/eev-elinks.el
index 4bc1463..66cd354 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:    2020feb20
+;; Version:    2020jul22
 ;; Keywords:   e-scripts
 ;;
 ;; Latest version: <http://angg.twu.net/eev-current/eev-elinks.el>
@@ -1145,6 +1145,7 @@ This needs a temporary directory; see: 
(find-prepared-intro)"
         )
     (ee-template0 "\
 # (find-epackages {(ee-S spkgname)})
+# (find-epackage-links '{pkgname})
 # (find-epackage '{pkgname})
 {lines}
 
diff --git a/eev-intro.el b/eev-intro.el
index 98d2475..59d0aa1 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:    2020feb20
+;; Version:    2020sep28
 ;; Keywords:   e-scripts
 ;;
 ;; Latest version: <http://angg.twu.net/eev-current/eev-intro.el>
@@ -42,16 +42,17 @@
 ;;      quite technical (and incomplete),
 ;;   5) a guide to the source files.
 ;;
-;; As of jan/2019, the work to make (find-eev-quick-intro) central is
-;; almost complete (...)
+;; In 2019 the work to make (find-eev-quick-intro) central was
+;; completed. The only autoloaded function of eev is `eev-beginner',
+;; that loads all the main modules of eev, turns eev-mode on, and runs
+;; (find-eev-quick-intro). See:
 ;;
+;;   (find-eevfile "eev-beginner.el" "defun eev-beginner ")
+;;
+
 ;; To use this, simply execute any of the sexps below:
 ;;   (find-eev-quick-intro)
 ;;   (find-eev-intro)
-;;   (find-eval-intro)
-;;   (find-eepitch-intro)
-;;   (find-wrap-intro)
-;;   (find-code-c-d-intro)
 
 
 ;; Quick index:
@@ -95,8 +96,8 @@
 
 ;; Videos:
 ;; «.find-three-main-keys-intro»       (to "find-three-main-keys-intro")
-;; «.find-what-sexps-can-do-intro»     (to "find-what-sexps-can-do-intro")
-;; «.find-creating-links-intro»                (to "find-creating-links-intro")
+;;
+;; «.find-elisp-intro»         (to "find-elisp-intro")
 
 
 ;; See: (find-anchors-intro)
@@ -1816,7 +1817,7 @@ See: (find-enode \"Keys\" \"key sequence\")
      (find-enode \"Minibuffer History\" \"<UP>\" \"<DOWN>\")
 
 <ESC> <ESC> <ESC>                (find-enode \"Quitting\")
-C-g   keyboard-quit              (find-enode \"Quitting\" \"C-g\")
+C-g   keyboard-quit (\"get out\")  (find-enode \"Quitting\" \"C-g\")
 M-x   execute-extended-command   (find-enode \"M-x\" \"Running Commands by 
Name\")
 
 More about the minibuffer:       (find-enode \"Minibuffer\")
@@ -2425,37 +2426,37 @@ recommended reading order. These are the basic ones:
    6. (find-eepitch-intro)
    7. (find-audiovideo-intro)
    8. (find-rcirc-intro)
-   9. (find-eev-install-intro)
+   9. (find-elisp-intro)
+  10. (find-eev-install-intro)
 
 This is a very basic tutorial intended mainly for M$ Windows
 users:
 
-  10. (find-windows-beginner-intro)
+  11. (find-windows-beginner-intro)
 
 These ones explain ideas, conventions, and usage patterns:
 
-  11. (find-escripts-intro)
-  12. (find-links-conv-intro)
+  12. (find-escripts-intro)
+  13. (find-links-conv-intro)
 
 These are older and more technical versions of sections of the
 eev-quick-intro:
 
-  13. (find-eval-intro)
-  14. (find-links-intro)
-  15. (find-brxxx-intro)
-  16. (find-wrap-intro)
-  17. (find-eejump-intro)
-  18. (find-anchors-intro)
-  19. (find-code-c-d-intro)
-  10. (find-psne-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)
 
 These are etcs:
 
-  21. (find-multiwindow-intro)
-  22. (find-templates-intro)
-  23. (find-org-intro)
-  24. (find-videos-intro)
-  25. (find-what-sexps-can-do-intro)
+  22. (find-multiwindow-intro)
+  23. (find-templates-intro)
+  24. (find-org-intro)
+  25. (find-videos-intro)
 
 These ones explain advanced features that require extra setup:
 
@@ -2472,7 +2473,7 @@ These ones are obsolete:
   30. (find-emacs-intro)
   31. (find-defun-intro)
 
-Item 24 is an index of old video tutorials, with scripts for
+Item 25 is an index of old video tutorials, with scripts for
 downloading local copies of them and links to important positions
 in the videos.
 
@@ -3223,9 +3224,9 @@ series of actions using keys that are good for touch 
typists.
 ;; «find-eval-intro»  (to ".find-eval-intro")
 ;; Skel: (find-intro-links "eval")
 ;; (find-TH "eev-article" "hyperlinks")
+;; (find-TH "eev-article" "forward-and-back")
 ;;      http://angg.twu.net/eev-article.html#hyperlinks
 ;;   file:///home/edrx/TH/L/eev-article.html#hyperlinks
-;; (find-TH "eev-article" "forward-and-back")
 ;; (find-efunction 'ee-eval-last-sexp)
 
 (defun find-eval-intro (&rest rest) (interactive)
@@ -3241,9 +3242,11 @@ It is meant as both a tutorial and a sandbox.
 
 
 
-Note: this intro needs to be rewritten!
-Ideally it should _complement_ the material in:
+
+Note: this intro is messy and VERY old!
+TODO: integrate it with:
   (find-eev-quick-intro \"2. Evaluating Lisp\")
+  (find-elisp-intro)
 
 
 
@@ -4671,6 +4674,10 @@ It is meant as both a tutorial (for eepitch) and a 
sandbox.
 This intro _complements_ the material in:
   (find-eev-quick-intro \"6. Controlling shell-like programs\")
 
+My video for the EmacsConf2019 has a simple demo of eepitch:
+  https://www.youtube.com/watch?v=86yiRG8YJD0&t=956
+  http://angg.twu.net/emacsconf2019.html
+
 This (old) video shows a demo like the one in section 1.3:
   https://www.youtube.com/watch?v=Lj_zKC5BR64&t=16s
 The relevant part is from t=16s to t=25s.
@@ -5057,21 +5064,21 @@ we call them the \"ambient script\" and the \"ambient 
language\"
   3) code that tests functions defined in the ambient script.
 
 We can insert a test block in the current buffer by running `M-x
-ee-insert-test-python', `M-x ee-insert-test-lua', etc... for the
-list of supported languages, see:
+ee-insert-test', or `M-x eeit'. The current implementation of M-x
+ee-insert-test' uses the name of the major mode to decide which
+other function to call. If you are in a buffer in which the value
+of the variable
 
-  (find-eev \"eev-testblocks.el\" \"ee-insert-test\")
+  major-mode
 
-These `ee-insert-test-<lang>'s use the name of the current buffer
-in the line that loads the ambient script into in the
-interpreter.
+is `FooBar-mode' then `M-x eeit' tries to run the function
+`ee-insert-test-FooBar-mode', and yields an error if that
+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:
 
-The command `M-x eeit' runs `ee-insert-test', that tries to
-detect the ambient language from major mode and then runs the
-correct `ee-insert-test-<lang>' based on it. `M-x eeit' is
-currently not very smart - see the source:
+  (find-eev \"eev-testblocks.el\")
 
-  (find-eev \"eev-testblocks.el\" \"ee-insert-test\")
 
 
 
@@ -7870,12 +7877,12 @@ interpreter for a simple language of window commands 
and sexp
 hyperlinks, in the which window setup above could be expressed
 like this:
 
-  `(\"13o\"
+  '(\"13o\"
     (find-ebuffer \"B\")
     \"2o\"
     (find-ebuffer \"C\")
     \"o\"
-   )
+    )
 
 `find-wset' supports something like that, but with all the window
 command strings collapsed into a single one, with \"_\"s meaning
@@ -9819,7 +9826,8 @@ This buffer is _temporary_ and _editable_.
 It is meant as both a tutorial and a sandbox.
 
 
-Note: this intro needs to be rewritten!
+Note: this intro needs to be integrated with:
+  (find-elisp-intro)
 I wrote it for a mini-tutorial on Lisp that I gave.
 It complements this:
   (find-eev-quick-intro \"2. Evaluating Lisp\")
@@ -11758,182 +11766,419 @@ Btw, the videos that I produced using this 
\"script\" are here:
 
 
 
-;;; __        ___           _                                               
-;;; \ \      / / |__   __ _| |_   ___  _____  ___ __  ___    ___ __ _ _ __  
-;;;  \ \ /\ / /| '_ \ / _` | __| / __|/ _ \ \/ / '_ \/ __|  / __/ _` | '_ \ 
-;;;   \ V  V / | | | | (_| | |_  \__ \  __/>  <| |_) \__ \ | (_| (_| | | | |
-;;;    \_/\_/  |_| |_|\__,_|\__| |___/\___/_/\_\ .__/|___/  \___\__,_|_| |_|
-;;;                                            |_|                          
+;;;   __ _           _            _ _                 _       _             
+;;;  / _(_)_ __   __| |       ___| (_)___ _ __       (_)_ __ | |_ _ __ ___  
+;;; | |_| | '_ \ / _` |_____ / _ \ | / __| '_ \ _____| | '_ \| __| '__/ _ \ 
+;;; |  _| | | | | (_| |_____|  __/ | \__ \ |_) |_____| | | | | |_| | | (_) |
+;;; |_| |_|_| |_|\__,_|      \___|_|_|___/ .__/      |_|_| |_|\__|_|  \___/ 
+;;;                                      |_|                                
 ;;
-;; «find-what-sexps-can-do-intro»  (to ".find-what-sexps-can-do-intro")
-;; Skel: (find-intro-links "what-sexps-can-do")
+;; «find-elisp-intro»  (to ".find-elisp-intro")
+;; Skel: (find-intro-links "elisp")
 
-(defun find-what-sexps-can-do-intro (&rest pos-spec-list) (interactive)
-  (let ((ee-buffer-name "*(find-what-sexps-can-do-intro)*"))
+(defun find-elisp-intro (&rest pos-spec-list) (interactive)
+  (let ((ee-buffer-name "*(find-elisp-intro)*"))
     (apply 'find-eintro "\
+\(Re)generate: (find-elisp-intro)
+Source code:  (find-efunction 'find-elisp-intro)
+More intros:  (find-eev-quick-intro)
+              (find-eev-intro)
+This buffer is _temporary_ and _editable_.
+It is meant as both a tutorial and a sandbox.
 
-  What Lisp expressions can do:
-  A mini tutorial
-    Eduardo Ochs
-    http://angg.twu.net/#eev
-    http://angg.twu.net/#eev-screencasts
-    (Version: 2019aug20)
 
-  Everybody knows that Emacs is written in Lisp and that one of
-  its main key sequences, `C-x C-e', executes the Lisp expression
-  before the cursor and shows the result in the echo area... this
-  can be used to calculate,
 
-       (* 2 3)
-               (* 4 5)
-    (+ (* 2 3) (* 4 5))
+This intro is a very quick introduction to Emacs Lisp. Its intent
+is not to teach people how to _write_ Elisp code, only to teach
+them how to _read_ Elisp code.
 
-  and can be used to call external programs - for examples, here
-  he have some Lisp expressions that invoke a video player,
+TODO: integrate this with these older intros:
+  (find-eval-intro)
+  (find-defun-intro)
 
-  (find-video \"~/eev-videos/Punch_and_Judy_Mark_Poulton-K6LmZ0A1s9U.mp4\")
-  (code-video \"punchandjudyvideo\" 
\"~/eev-videos/Punch_and_Judy_Mark_Poulton-K6LmZ0A1s9U.mp4\")
-  (find-punchandjudyvideo)
-  (find-punchandjudyvideo \"0:00\")
-  (find-punchandjudyvideo \"0:10\" \"calls the baby\")
-  (find-punchandjudyvideo \"0:40\" \"where's the baby\")
-  (find-punchandjudyvideo \"1:04\" \"right position\")
-  (find-punchandjudyvideo \"1:17\" \"he will sing the baby to sleep\")
-  (find-punchandjudyvideo \"1:33\" \"1-2-3\")
-  (find-punchandjudyvideo \"1:48\" \"baby downstairs\")
-  (find-punchandjudyvideo \"3:12\" \"slaps\")
-  (find-punchandjudyvideo \"3:50\" \"1-2-3\")
-  (find-punchandjudyvideo \"4:34\" \"you keep an eye on mr Punch\")
-  (find-punchandjudyvideo \"4:46\" \"hat\")
-  (find-punchandjudyvideo \"5:03\" \"hat\")
-  (find-punchandjudyvideo \"5:25\" \"did you see him?\")
-  (find-punchandjudyvideo \"5:55\" \"clown\")
-  (find-punchandjudyvideo \"6:14\" \"slaps\")
-  (find-punchandjudyvideo \"6:52\" \"sausages\")
-  (find-punchandjudyvideo \"7:24\" \"crocodile\")
-  (find-punchandjudyvideo \"8:07\" \"crocodile + sausages\")
-  (find-punchandjudyvideo \"8:32\" \"another scene\")
-  (find-punchandjudyvideo \"8:39\" \"fight\")
-  (find-punchandjudyvideo \"9:03\" \"clown\")
-  (find-punchandjudyvideo \"9:45\" \"mr punch\")
 
-  and here we have some Lisp expressions that open a PDF at a
-  given page:
 
-  (code-pdf-page \"livesofanimals\" \"~/Coetzee99.pdf\")
-  (code-pdf-text \"livesofanimals\" \"~/Coetzee99.pdf\" -110)
-  (find-livesofanimalspage)
-  (find-livesofanimalstext)
-  (find-livesofanimalspage (+ -110 113))
-  (find-livesofanimalstext (+ -110 113))
-  (find-livesofanimalspage (+ -110 113) \"LECTURE I.\")
-  (find-livesofanimalstext (+ -110 113) \"LECTURE I.\")
-  (find-livesofanimalspage (+ -110 127) \"wrong thoughts\")
-  (find-livesofanimalstext (+ -110 127) \"wrong thoughts\")
-  (find-livesofanimalspage (+ -110 132) \"into the place of their victims\")
-  (find-livesofanimalstext (+ -110 132) \"into the place of their victims\")
-  (find-livesofanimalspage (+ -110 133) \"To write that book I had to think\")
-  (find-livesofanimalstext (+ -110 133) \"To write that book I had to think\")
-  (find-livesofanimalspage (+ -110 134) \"woke up haggard in the mornings\")
-  (find-livesofanimalstext (+ -110 134) \"woke up haggard in the mornings\")
-  (find-livesofanimalspage (+ -110 143) \"Babies have no self-consciousness\")
-  (find-livesofanimalstext (+ -110 143) \"Babies have no self-consciousness\")
-  (find-livesofanimalspage (+ -110 145) \"squirrel doing its thinking\")
-  (find-livesofanimalstext (+ -110 145) \"squirrel doing its thinking\")
-  (find-livesofanimalspage (+ -110 147) \"Rilke's panther\")
-  (find-livesofanimalstext (+ -110 147) \"Rilke's panther\")
-  (find-livesofanimalspage (+ -110 162) \"a grasp of the meaning\")
-  (find-livesofanimalstext (+ -110 162) \"a grasp of the meaning\")
-  (find-livesofanimalspage (+ -110 164) \"last common ground\")
-  (find-livesofanimalstext (+ -110 164) \"last common ground\")
 
+1. Introduction
+===============
+The main tutorial for eev starts by explaining the syntax of Emacs
+Lisp - \"Elisp\" from here onwards - using a simple example. To evaluate
+this sexp
 
+     (+ (* 2 3) (* 4 5))
 
+Emacs evaluates first its subexpressions, (* 2 3) and (* 4 5), and
+then it calls `+' with the results - i.e., it runs (+ 6 20). Try:
 
-Preparation:
+           2
+             3
+        (* 2 3)
+                   4
+                     5
+                (* 4 5)
+     (+ (* 2 3) (* 4 5))
+  (list (* 2 3) (* 4 5))
 
- (eepitch-shell)
- (eepitch-kill)
- (eepitch-shell)
-cd
-wget -nc https://tannerlectures.utah.edu/_documents/a-to-z/c/Coetzee99.pdf
+In last sexp the function `list' receives two numbers, 6 and 20, but
+returns a list, (6 20), not a number - and this is an introduction to
+the idea that Elisp functions can receive all kinds of Elips objects
+and return all kinds of Elisp objects.
 
- (eepitch-shell)
- (eepitch-kill)
- (eepitch-shell)
-# http://www.youtube.com/watch?v=K6LmZ0A1s9U
-# http://angg.twu.net/eev-videos/Punch_and_Judy_Mark_Poulton-K6LmZ0A1s9U.mp4
-mkdir ~/eev-videos/
-cd    ~/eev-videos/
-wget -nc 
http://angg.twu.net/eev-videos/Punch_and_Judy_Mark_Poulton-K6LmZ0A1s9U.mp4
+Elisp objects include:
 
-# (find-eev \"eev-audiovideo.el\" \"find-mpv-video\" \"ee-mpv-video-options\")
-# (setq ee-mpv-video-options '(\"--fs\" \"--osd-level=2\"))
-# (setq ee-mpv-video-options        '(\"--osd-level=2\"))
+  numbers, like 0, 4, -42, and 2.5,
+  strings, like \"foo\" and \"bar\",
+  symbols, like `*', `+' and `list', and
+  lists, like (6 20), (* 2 3), and (+ (* 2 3) (* 4 5)).
 
+The ones listed above are the only ones that we will treat in this
+introduction. For more on the other types of list objects, see:
 
-# (find-fline \"~/eev-videos/\")
+  (find-elnode \"Lisp Data Types\")
+  (find-elnode \"Programming Types\")
+  (find-elnode \"Editing Types\")
 
 
 
-" pos-spec-list)))
 
-;; (find-what-sexps-can-do-intro)
 
+2. Lists and conses
+===================
+Lists are implemented using \"cons\"es. For details and lots of great
+diagrams see these two articles in the Wikipedia:
 
+  https://en.wikipedia.org/wiki/Cons
+  https://en.wikipedia.org/wiki/Cons#Lists
+  https://en.wikipedia.org/wiki/Cons#Trees
+  https://en.wikipedia.org/wiki/S-expression
 
+The last one explains in detail what are \"sexp\"s.
 
+The function `cons' \"constructs\" a bigger list by prepending an
+element to it:
 
+           (list 22 33)
+  (cons 11 (list 22 33))
+        (list 11 22 33)
 
-;; «find-creating-links-intro»  (to ".find-creating-links-intro")
-;; Skel: (find-intro-links "creating-links")
+The functions `car' and `cdr' both receive a list and return the
+components of its first cons. The `car' of a list is its first
+element, and the `cdr' of the list is the \"rest\" of the list. Try:
 
-(defun find-creating-links-intro (&rest pos-spec-list) (interactive)
-  (let ((ee-buffer-name "*(find-creating-links-intro)*"))
-    (apply 'find-eintro "\
+             (list 11 22 33)
+       (cons 11 (list 22 33))
+  (car (cons 11 (list 22 33)))
+  (cdr (cons 11 (list 22 33)))
 
+        (car (list 11 22 33))
+                              (cdr (list 11 22 33))
+  (cons (car (list 11 22 33)) (cdr (list 11 22 33)))
 
-  Some quick ways to generate
-  elisp hyperlinks in eev -
-  A mini tutorial
-    Eduardo Ochs
-    http://angg.twu.net/#eev
-    (Version: 2019jun17)
 
 
 
-  From other tutorials:
-    (find-escripts-intro \"5. Tools for writing e-scripts\")
-    (find-emacs-keys-intro \"beginner's way\")
-    (find-here-links-intro)
-    (find-here-links-intro \"4. `find-here-links-3'\")
-    (find-here-links-intro \"5. `find-here-links-1'\")
-    (find-here-links-intro \"6. Copying the hyperlink\" \"M-h M-w\")
+3. `quote'
+==========
+Not all functions evaluate their arguments. For example, `quote'
+expects a single argument and returns it unchanged, without evaluating
+it. Try:
 
+            (* 2 3)
+         (+ (* 2 3) (* 4 5))
+  (quote    (* 2 3))
+  (quote (+ (* 2 3) (* 4 5)))
 
+Elisp has an abbreviation for `quote' - a single \"'\". Try:
 
-1. Basic keys (eev)
+         (quote (* 2 3))
+               '(* 2 3)
+
+  (quote       '(* 2 3))
+  (quote (quote (* 2 3)))
+
+Elisp has several other functions besides `quote' that do not evaluate
+their arguments. These functions are called \"special forms\" and we
+will see more about them in section 5, 6, 8, and 9.
+
+  (find-elnode \"Special Forms\")
+
+
+
+
+4. Symbols
+==========
+Note that symbols and strings are different:
+
+               (quote *)
+                     '*
+                     \"*\"
+  (symbol-name (quote *))
+  (symbol-name       '*)
+
+Numbers and strings \"evaluate to themselves\". Try:
+
+           22
+          \"22\"
+        (+ 22   33)
+  (concat \"22\" \"33\")
+
+If you need more evidence that 22 and \"22\" are different run the sexps
+below - they give errors! Numbers can be added but not concatened, and
+strings can be concatenated but not added.
+
+      (+ \"22\" \"33\")
+  (concat 22   33)
+
+
+
+
+5. Variables
+============
+When we evaluate a list like (* 2 3) the symbol in the beginning of
+the list, `*', is interpreted as the name of a function... but when we
+evaluate a symbol by itself it is interpreted as the name of a
+variable, and it returns the value of that variable. Try:
+
+  (set 'a 2)
+        a
+  (* 10 a)
+
+  (set 'a 3)
+        a
+  (* 10 a)
+
+We will often write examples like the one above more compactly, like
+this:
+
+  (set 'a 2)
+  (set 'a 3)
+        a
+  (* 10 a)
+
+If you execute lines 1, 3, and 4 in it you get one behavior, and if
+you execute lines 2, 3, and 4 you get the other one.
+
+Again: note that evaluating the symbol `a' returns the value of a \"as
+a variable\".
+
+The function `setq' works like `set' but it doesn't expect us to quote
+explicitly its first argument. Try:
+
+  (set 'a 2)
+  (setq a 2)
+  (set 'a (* 2 3))
+  (setq a (* 2 3))
+        a
+  (* 10 a)
+
+`setq' is a special form - it doesn't evaluate its first argument but
+evaluates the second one. See:
+
+  (find-elnode \"Setting Variables\" \"Special Form: setq\")
+
+
+
+
+6. Defining functions
+=====================
+Each symbol has a value \"as a variable\" and a value \"as a function\",
+and these two values are independent from one another. We can define
+functions with `defun'. Try:
+
+  (defun foo (a) (* 10  a))
+  (defun foo (a) (* 100 a))
+        (foo  2)
+        (foo  3)
+
+   (setq foo 2)
+   (setq foo 3)
+    (foo foo)
+
+                    foo
+     (symbol-value 'foo)
+  (symbol-function 'foo)
+
+Function definitions are stored as lists starting with the symbol
+`lambda' (\"lambda expressions\"). If you are a beginner you should
+treat the details of this as a curiosity - but try the example below:
+
+  (defun foo         (a) (* 10  a))
+  (defun foo         (a) (* 100 a))
+  (fset 'foo (lambda (a) (* 10  a))
+  (fset 'foo (lambda (a) (* 100 a))
+
+  (symbol-function 'foo)
+                   (foo foo)
+
+For more information, see:
+
+  (find-elnode \"Lambda Expressions\")
+  (find-elnode \"Defining Functions\" \"defun name args\")
+  (find-elnode \"Function Names\")
+  (find-elnode \"Symbol Components\")
+  (find-elnode \"Function Cells\")
+  (find-elnode \"Function Cells\" \"symbol-function symbol\")
+  (find-elnode \"Function Cells\" \"fset symbol definition\")
+
+Not all functions are represented as lambda expressions. The functions
+of Emacs that are implemented in C are represented as \"subr\"s, that
+are one of the kinds of objects that I said that I wouldn't discuss in
+this introduction. See:
+
+  (symbol-function '+)
+  (find-elnode \"Programming Types\" \"Primitive Function Type\")
+  (find-elnode \"Primitive Function Type\" \"subrs\")
+
+Also, functions can be byte-compiled, and they can expect and
+receive any number of arguments. See:
+
+  (find-eval-intro \"10.1. Byte-compiled functions\")
+  (find-elnode \"Defining Functions\" \"defun bar (a &optional b &rest c)\")
+
+
+
+
+7. `read' and `eval'
+====================
+We've been evaluating all sexps with `M-e'... but try:
+
+                   '(* 2 3)
+             (eval '(* 2 3))
+
+           (setq a '(* 2 3))
+           (setq a '(* 4 5))
+                 a
+           (eval a)
+
+                   \"(* 2 3)\"
+             (read \"(* 2 3)\")
+       (eval (read \"(* 2 3)\"))
+
+It turns out the `M-e' first extracts a sexp from the current buffer
+as a string, then `read' converts that string to a Lisp object -
+usually a list or symbol -, and `eval' evaluates that list or symbol.
+There is a also a function `prin1-to-string' that does the opposite of
+`read', as in the diagram below:
+
+                     read
+   \"(* 2 3)\" ----------------->  (* 2 3)
+             <-----------------      |
+               prin1-to-string       |
+                                     |
+                                     v
+                                     6
+
+Try:
+
+                    (*  2  3)
+                   '(*  2  3)
+  (prin1-to-string '(*  2  3))
+
+So: programs and functions can be represented as lists, and also as
+strings that be converted into lists by `read'; they can be inspected,
+edited and modified on-the-fly; and we can write Lisp code that
+generates and evaluates more Lisp code. Eev does this in a handful of
+situations - for example:
+
+  (find-eev-quick-intro \"find-code-c-d\")
+  (find-here-links-intro \"4. `find-here-links-3'\")
+  (find-eev-quick-intro \"4.2. `find-ekey-links' and friends\")
+
+The idea that programs are lists is far more powerful than it
+looks at first sight. See, for example:
+
+  https://sep.yimg.com/ty/cdn/paulgraham/bbnexcerpts.txt
+  http://www.paulgraham.com/diff.html
+  http://www.paulgraham.com/lisp.html
+  (find-elnode \"Simple Macro\")
+
+Some functions in eev expect code that is meant to be `eval'-ed
+later. For example:
+
+  (find-multiwindow-intro \"(find-wset\" \"13o_2o_o\")
+  (find-wset \"13o_2o_o\" '(find-ebuffer \"B\") '(find-ebuffer \"C\"))
+
+The functions in the `code-c-d' family produce code that is first
+`read' and then `eval'-ed. See:
+
+  (find-eev-quick-intro \"9.1. `code-c-d'\")
+  (find-code-c-d \"CODE\" \"/DIR/\" :info \"INFO\")
+
+
+
+
+
+8. `let' and `let*'
 ===================
-(...)
 
-The beginner's way of creating \"hyperlinks to here\" is with:
-  M-h M-3   - (find-here-links-intro \"4. `find-here-links-3'\")
-  M-h M-1   - (find-here-links-intro \"5. `find-here-links-1'\")
-  M-h M-w   - (find-here-links-intro \"6. Copying the hyperlink\" \"M-h M-w\")
+  (find-elnode \"Local Variables\" \"Special Form: let \")
+  (find-elnode \"Local Variables\" \"Special Form: let* \")
 
 
 
 
-" pos-spec-list)))
+9. More on strings
+==================
+Strings in Elisp can span several lines and can contain many
+kinds of backslashed \"escape sequences\", like \"\\n\". Elisp
+also has a syntax for characters, that starts with a \"?\" and
+supports the same escape sequences as strings. See:
+
+  (find-elnode \"Basic Char Syntax\")
+  (find-elnode \"Character Type\")
+
+Remember - from
+
+  (find-eev-quick-intro \"2. Evaluating Lisp\" \"`M-0 M-e'\")
+
+that `M-0 M-e' and `M-0 M-E' highlight the sexp before point...
+you can use that to check the extent of a string whose
+backslashes are hard to interpret visually. For example:
+
+  \"\\
+  \\\\\\\"\\\\\\\\\"
+
+
+
+
+
+
+10. Backquote
+=============
+The backquote, \"`\", works like the quote, \"'\", but when a
+backquoted list is evaluated it is processed recursively and its
+components preceded by \",\" or \",@\" are evaluated and replaced
+by their values. The details are quite tricky - try these
+examples:
+
+  `(foo     ,(+ 2 3) bar)
+  `(foo    ,'(+ 2 3) bar)
+  `(foo  ,(list 2 3) bar)
+  `(foo ,@(list 2 3) bar)
 
-;; (find-creating-links-intro)
+and see:
+
+  (find-elnode \"Backquote\")
+
+The functions in eev that use `find-elinks' typically use
+backquotes a lot. See:
+
+  (find-links-conv-intro \"3. Classification\")
+  (find-eev \"eev-elinks.el\" \"find-elinks\")
+  (find-eev \"eev-elinks.el\" \"find-efunction-links\")
+
+They are the hardest ones to read in the eev source.
+
+
+
+" pos-spec-list)))
 
+;; (find-elisp-intro)
 
 
 
 
 
-;; Skel: (find-intro-links "creating-links")
 
 
 
diff --git a/eev-testblocks.el b/eev-testblocks.el
index 33e1a04..c95f213 100644
--- a/eev-testblocks.el
+++ b/eev-testblocks.el
@@ -1,6 +1,6 @@
 ;;; eev-testblocks.el - create "test blocks" using multiline comments.
 
-;; Copyright (C) 2019 Free Software Foundation, Inc.
+;; Copyright (C) 2019,2020 Free Software Foundation, Inc.
 ;;
 ;; This file is part of GNU eev.
 ;;
@@ -19,7 +19,7 @@
 ;;
 ;; Author:     Eduardo Ochs <eduardoochs@gmail.com>
 ;; Maintainer: Eduardo Ochs <eduardoochs@gmail.com>
-;; Version:    2019sep29
+;; Version:    2020aug05
 ;; Keywords:   e-scripts
 ;;
 ;; Latest version: <http://angg.twu.net/eev-current/eev-testblocks.el>
@@ -32,7 +32,8 @@
 
 ;;; Commentary:
 
-;; A "test block" is a multiline comment that... see:
+;; A "test block" in a script is a multiline comment that contains
+;; interactive tests. See:
 ;;
 ;;   (find-eepitch-intro "3. Test blocks")
 
@@ -53,17 +54,40 @@
 (defalias 'eeit 'ee-insert-test)
 
 (defun ee-insert-test ()
-  "Insert an \"test block\" - an eepitch block in a multiline comment."
+  "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))
-       (t (error "ee-insert-test: Unsupported major mode"))))
-
-(defun ee-insert-test-lua ()
+  (if (fboundp (intern (format "ee-insert-test-%s" major-mode)))
+      (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"))))
+
+
+(defun ee-insert-test-julia-mode ()
+  (interactive)
+  (insert (format "
+#=
+ (eepitch-julia)
+ (eepitch-kill)
+ (eepitch-julia)
+include(\"%s\")
+
+=#
+" (buffer-name))))
+
+(defun ee-insert-test-lua-mode ()
   (interactive)
   (insert (format "
 --[[
@@ -75,7 +99,7 @@ dofile \"%s\"
 --]]
 " (buffer-name))))
 
-(defun ee-insert-test-python ()
+(defun ee-insert-test-python-mode ()
   (interactive)
   (insert (format "
 \"\"\"
@@ -87,7 +111,7 @@ execfile(\"%s\", globals())
 \"\"\"
 " (buffer-name))))
 
-(defun ee-insert-test-ruby ()
+(defun ee-insert-test-ruby-mode ()
   (interactive)
   (insert (format "
 =begin
@@ -99,7 +123,7 @@ load \"%s\"
 =end
 " (buffer-name))))
 
-(defun ee-insert-test-sh ()
+(defun ee-insert-test-sh-mode ()
   (interactive)
   (insert (format "
 : <<'%%%%%%%%%%'
@@ -111,7 +135,7 @@ load \"%s\"
 %%%%%%%%%%
 " (buffer-name))))
 
-(defun ee-insert-test-tcl ()
+(defun ee-insert-test-tcl-mode ()
   (interactive)
   (insert (format "
 set COMMENTED_OUT {
@@ -123,7 +147,7 @@ source %s
 }
 " (buffer-name))))
 
-(defun ee-insert-test-idris ()
+(defun ee-insert-test-idris-mode ()
   (interactive)
   (insert (format "
 {-
@@ -133,6 +157,19 @@ source %s
 " (buffer-name))))
 
 
+(defun ee-insert-test-haskell-mode ()
+  (interactive)
+  (insert (format "
+{-
+ (eepitch-ghci)
+ (eepitch-kill)
+ (eepitch-ghci)
+:load %s
+
+-}
+" (buffer-name))))
+
+
 
 
 
diff --git a/eev-tlinks.el b/eev-tlinks.el
index 6ff1dc7..58414a4 100644
--- a/eev-tlinks.el
+++ b/eev-tlinks.el
@@ -1071,6 +1071,7 @@ cd {dir}
 {ee-youtubedl-command} -F    'http://www.youtube.com/watch?v={hash}'
 {ee-youtubedl-command} -f 18 'http://www.youtube.com/watch?v={hash}'
 {ee-youtubedl-command} -f 18 --restrict-filenames --all-subs 
'http://www.youtube.com/watch?v={hash}'
+{ee-youtubedl-command}       --restrict-filenames --all-subs 
'http://www.youtube.com/watch?v={hash}'
 
 # (find-es \"video\" \"youtube-dl\")
 # (find-fline \"{dir}\" \"{hash}\")
@@ -1729,7 +1730,7 @@ dofile \"{fname0}\"
 ;;
 ;; 7) If you got a prompt like this one
 ;;
-;;      Lua 5.2.4  Copyright (C) 1994-2015 Lua.org, PUC-Rio
+;;      Lua 5.2.4  ... 1994-2015 Lua.org, PUC-Rio
 ;;      > 
 ;;
 ;;    in the right window in the test in item (6) then everything is
diff --git a/eev-wrap.el b/eev-wrap.el
index 01f80f6..d5ece26 100644
--- a/eev-wrap.el
+++ b/eev-wrap.el
@@ -198,7 +198,7 @@ have to run an \"undo\"."
 #####
 
 # «.{anchor}»\t(to \"{anchor}\")
-# «{anchor}» (to \".{anchor}\")")))
+# «{anchor}»  (to \".{anchor}\")")))
 
 
 
diff --git a/eev.el b/eev.el
index a71a11e..e1c3314 100644
--- a/eev.el
+++ b/eev.el
@@ -1,12 +1,12 @@
 ;;; eev.el --- Support for e-scripts (eepitch blocks, elisp hyperlinks, etc)  
-*- lexical-binding: t; -*-
 
-;; Copyright (C) 2019 Free Software Foundation, Inc.
+;; Copyright (C) 2019,2020 Free Software Foundation, Inc.
 
 ;; Author: Eduardo Ochs <eduardoochs@gmail.com>
 ;; Package-Requires: ((emacs "24.1"))
 ;; Keywords: lisp e-scripts
 ;; URL: http://angg.twu.net/#eev
-;; Version: 20200224
+;; Version: 20200928
 
 ;; 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]