branch: externals/eev
commit 84201105b1cb885749650c32bb1e3ce240c4f164
Author: Eduardo Ochs <[email protected]>
Commit: Eduardo Ochs <[email protected]>
New video (with subtitles): "2205badly".
---
ChangeLog | 46 ++++++++++++++++++
VERSION | 4 +-
eepitch.el | 21 ++++++++
eev-blinks.el | 142 ++++++++++++++++++++++++++++++++++++++----------------
eev-elinks.el | 4 +-
eev-intro.el | 123 ++++++++++++++++++++++++++++++++--------------
eev-testblocks.el | 10 ++--
eev-tlinks.el | 50 +++++++++++++++++--
eev-videolinks.el | 35 +++++++++++++-
eev.el | 2 +-
10 files changed, 347 insertions(+), 90 deletions(-)
diff --git a/ChangeLog b/ChangeLog
index 13f0d73a95..af2485e89b 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,49 @@
+2025-12-19 Eduardo Ochs <[email protected]>
+
+ * eev.el: bumped the version.
+
+ * eev-intro.el (find-try-sly-intro): mention "2025badly".
+
+ * eev-blinks.el (ee-clprin2s, find-clprin2s): new functions.
+
+2025-12-16 Eduardo Ochs <[email protected]>
+
+ * eev-videolinks.el (ee-1stclassvideos-info): new video, with
+ subtitles: "2025badlybt".
+
+2025-12-15 Eduardo Ochs <[email protected]>
+
+ * eev-tlinks.el (find-sbcl-links): small changes.
+ (find-slime-sly-links): new function.
+
+ * eepitch.el (find-3ee-maxima-slime, find-4eee-maxima-slime)
+ (find-3ee-maxima-sly, find-4eee-maxima-sly): new functions.
+
+ * eev-testblocks.el (ee-insert-test-lisp-mode-4): use
+ `find-4eee-maxima-slime' and `find-3ee-maxima-slime'.
+ (ee-insert-test-lisp-mode-5): use `find-4eee-maxima-sly' and
+ `find-3ee-maxima-sly'.
+
+2025-12-10 Eduardo Ochs <[email protected]>
+
+ * eev-intro.el (find-eev-install-intro): added the subsections
+ "5.5. With Guix" and "5.5.1. A note about read-onlyness";
+ renumbered some very old sections.
+
+2025-12-08 Eduardo Ochs <[email protected]>
+
+ * eev-videolinks.el (ee-1stclassvideos-info): new video, with
+ subtitles: "eev2025".
+
+2025-12-06 Eduardo Ochs <[email protected]>
+
+ * eev-blinks.el (ee-closure-to-named-plist): new function.
+ (find-clprin1, find-clprin1s, ee-clprin1, ee-clprin1s)
+ (ee-indent-as-elisp, ee-clprin2, find-clprin2, find-clprin1ind)
+ (ee-clprin1ind): Trivial changes in the code, lots of changes in
+ the comments - because these functions were used in my video for
+ the EmacsConf 2025.
+
2025-11-23 Eduardo Ochs <[email protected]>
* eepitch.el (eepitch-b-show-source, eepitch-b-set-source)
diff --git a/VERSION b/VERSION
index 205f3664de..6272c50c96 100644
--- a/VERSION
+++ b/VERSION
@@ -1,2 +1,2 @@
-Sun Nov 23 23:05:39 GMT 2025
-Sun Nov 23 20:05:39 -03 2025
+Sat Dec 20 01:18:09 GMT 2025
+Fri Dec 19 22:18:09 -03 2025
diff --git a/eepitch.el b/eepitch.el
index c3fa594a70..73c90dfea2 100644
--- a/eepitch.el
+++ b/eepitch.el
@@ -1286,6 +1286,17 @@ raise an error."
(defun eepitch-slime-select-pkgbuffer (pkg)
(eepitch-to-buffer (eepitch-slime-get-pkgbuffer pkg)))
+;; For Maxima with Slime.
+;; Used by: (find-eev "eev-testblocks.el" "lisp-mode-maxima-slime")
+(defun find-3ee-maxima-slime ()
+ (find-3ee '(eepitch-maxima)
+ '(eepitch-slime-select-pkgbuffer "MAXIMA")))
+
+(defun find-4eee-maxima-slime ()
+ (find-4eee '(eepitch-maxima)
+ '(eepitch-slime-select-pkgbuffer "COMMON-LISP-USER")
+ '(eepitch-slime-select-pkgbuffer "MAXIMA")))
+
;; «eepitch-b-sly» (to ".eepitch-b-sly")
;; This is similar to `eepitch-b-slime', for for Sly.
@@ -1313,6 +1324,16 @@ raise an error."
(defun eepitch-sly-select-pkgbuffer (pkg)
(eepitch-to-buffer (eepitch-sly-get-pkgbuffer pkg)))
+;; For Maxima with Sly.
+;; Used by: (find-eev "eev-testblocks.el" "lisp-mode-maxima-sly")
+(defun find-3ee-maxima-sly ()
+ (find-3ee '(eepitch-maxima)
+ '(eepitch-sly-select-pkgbuffer "maxima")))
+
+(defun find-4eee-maxima-sly ()
+ (find-4eee '(eepitch-maxima)
+ '(eepitch-sly-select-pkgbuffer "common-lisp-user")
+ '(eepitch-sly-select-pkgbuffer "maxima")))
diff --git a/eev-blinks.el b/eev-blinks.el
index 2682dc6a5e..814653ac08 100644
--- a/eev-blinks.el
+++ b/eev-blinks.el
@@ -21,7 +21,7 @@
;;
;; Author: Eduardo Ochs <[email protected]>
;; Maintainer: Eduardo Ochs <[email protected]>
-;; Version: 20250831
+;; Version: 20251219
;; Keywords: e-scripts
;;
;; Latest version: <http://anggtwu.net/eev-current/eev-blinks.el>
@@ -62,6 +62,7 @@
;; «.find-ehashtable» (to "find-ehashtable")
;; «.find-estruct» (to "find-estruct")
;; «.find-clprin1» (to "find-clprin1")
+;; «.find-clprin2» (to "find-clprin2")
;; «.find-sh» (to "find-sh")
;; «.find-man» (to "find-man")
;; «.find-man-bug» (to "find-man-bug")
@@ -1157,6 +1158,10 @@ fieldname value\", like this:
;; For functions that use `pp-to-string', see:
;; (to "find-epp")
;;
+;; `find-clprin1' and `find-clprin2' are mentioned in these videos:
+;; (find-1stclassvideo-links "eev2025")
+;; (find-1stclassvideo-links "2025modern")
+;;
;; Some elisp classes have special `cl-print-object' methods that tell
;; Emacs how to pretty-print their objects. The lower-level way of
;; converting objects to strings in Emacs ignore these special
@@ -1166,19 +1171,19 @@ fieldname value\", like this:
;; (find-efunction 'cl-prin1-to-string)
;;
;; In this section we define the functions `find-clprin1',
-;; `find-clprin1s', `find-clprin1ind', and `find-clprin2',, that are
-;; based on `cl-prin1-to-string'. Try:
+;; `find-clprin1s', and `find-clprin2', that are based on
+;; `cl-prin1-to-string'. Try:
;;
-;; (cl-defstruct mytriple a b c)
-;; (make-mytriple :a 22 :c "44")
-;; (find-2a nil '(find-clprin1 (make-mytriple :a 22 :c "44")))
-;; (find-2a nil '(find-clprin1ind (make-mytriple :a 22 :c "44")))
-;; (cl-find-class 'cl-structure-class)
-;; (find-2a nil '(find-clprin1ind (cl-find-class 'cl-structure-class)))
+;; (cl-defstruct mytriple a b c)
+;; (make-mytriple :a 22 :c "44")
+;; (find-2a nil '(find-clprin1 (make-mytriple :a 22 :c "44")))
+;; (find-2a nil '(find-clprin2 (make-mytriple :a 22 :c "44")))
+;; (find-2a nil '(find-clprin2 (cl-find-class 'cl-structure-class)))
;;
-;; The `s' in `find-clprin1s' is a plural, and the `ind' in
-;; `find-clprin1ind' means "indent in a nice way". `clprin2' is an
-;; alias for `clprin1ind'.
+;; The `s' in `find-clprin1s' is a plural. I started using the suffix
+;; `clprin1ind', then switched to `clprin2' at some point; `1ind'
+;; meant "1, indented". The `*-clprin2' functions are defined and
+;; explained in the next section.
;;
;; Here are some examples of classes with special `cl-print-object'
;; methods:
@@ -1194,7 +1199,7 @@ fieldname value\", like this:
;;
(defun find-clprin1 (o &rest pos-spec-list)
"Visit a temporary buffer containing a `cl-prin1'-printed version of O."
- (apply 'find-estring-elisp (cl-prin1-to-string o) pos-spec-list))
+ (apply 'find-estring-elisp (ee-clprin1 o) pos-spec-list))
;; Tests: (find-clprin1 (cl--class-slots (cl-find-class 'cl-structure-class)))
;; (find-clprin1s (cl--class-slots (cl-find-class 'cl-structure-class)))
@@ -1205,29 +1210,46 @@ of objects and each one of these objects is
`cl-prin1'-printed in a
different line."
(apply 'find-estring-elisp (ee-clprin1s o) pos-spec-list))
-;; Test: (find-clprin1ind (cl-find-class 'cl-structure-class))
-(defun find-clprin1ind (o &rest pos-spec-list)
-"Visit a temporary buffer containing a `cl-prin1'-printed version of O.
-This is a variant of `find-clprin1' that tries to insert newlines at the
-right places in the output of `cl-prin1-to-string' and then runs
-`ee-indent-as-elisp' in the result."
- (apply 'find-estring-elisp (ee-clprin1ind o) pos-spec-list))
+;; Low-level functions used by `find-clprin1' and `find-clprin1s':
+(defun ee-clprin1 (o) (cl-prin1-to-string o))
+(defun ee-clprin1s (o) (mapconcat 'cl-prin1-to-string o "\n"))
-(defalias 'find-clprin2 'find-clprin1ind)
-;; Low-level functions used by `find-clprin1' and friends.
-;; I sometimes use them with `-->', the main threading macro of
-;; dash.el. For example:
-;; (--> 'cl-structure-class cl-find-class)
-;; (--> 'cl-structure-class cl-find-class cl-type-of)
-;; (--> 'cl-structure-class cl-find-class cl--class-slots)
-;; (--> 'cl-structure-class cl-find-class cl--class-slots ee-clprin1)
-;; (--> 'cl-structure-class cl-find-class cl--class-slots ee-clprin1s)
-;; (--> 'cl-structure-class cl-find-class ee-clprin1)
-;; (--> 'cl-structure-class cl-find-class find-clprin1ind)
-
-;; Test: (ee-indent-as-elisp "(defun foo ()\n(interactive)\n42)")
+;;; __ _ _ _ _ ____
+;;; / _(_)_ __ __| | ___| |_ __ _ __(_)_ __ |___ \
+;;; | |_| | '_ \ / _` |_____ / __| | '_ \| '__| | '_ \ __) |
+;;; | _| | | | | (_| |_____| (__| | |_) | | | | | | |/ __/
+;;; |_| |_|_| |_|\__,_| \___|_| .__/|_| |_|_| |_|_____|
+;;; |_|
+;;
+;; «find-clprin2» (to ".find-clprin2")
+;; `find-clprin2' is a `find-clprin1' with extra steps: it adds
+;; newlines at certain positions of the output of `cl-prin1-to-string'
+;; and runs `ee-indent-as-elisp' on the result. The newlines are added
+;; in places that make (most) "named plists" be indented nicely.
+;;
+;; This is a plist: (:keyA 123 :keyB 234)
+;; This is a "named plist": (AB :keyA 123 :keyB 234)
+;;
+;; Try:
+;; "(defun foo ()\n(interactive)\n42)"
+;; (ee-indent-as-elisp "(defun foo ()\n(interactive)\n42)")
+;; (ee-clprin1 '(AB :keyA 123 :keyB 234))
+;; (ee-clprin2 '(AB :keyA 123 :keyB 234))
+;; (find-2a nil '(find-clprin1 '(AB :keyA 123 :keyB 234)))
+;; (find-2a nil '(find-clprin2 '(AB :keyA 123 :keyB 234)))
+;;
+;; The sexps with `*-clprin2' above will show this:
+;;
+;; (AB
+;; :keyA 123
+;; :keyB 234)
+;;
+;; Here is a big example. Compare:
+;; (find-2a nil '(find-clprin1 (cl-find-class 'cl-structure-class)))
+;; (find-2a nil '(find-clprin2 (cl-find-class 'cl-structure-class)))
+;;
(defun ee-indent-as-elisp (str)
(with-temp-buffer
(emacs-lisp-mode)
@@ -1235,21 +1257,46 @@ right places in the output of `cl-prin1-to-string' and
then runs
(indent-region (point-min) (point-max))
(buffer-substring (point-min) (point-max))))
-(defun ee-clprin1 (o) (cl-prin1-to-string o))
-(defun ee-clprin1s (o) (mapconcat 'cl-prin1-to-string o "\n"))
-
-;; (find-estring-elisp (ee-clprin1 (cl-find-class 'cl-structure-class)))
-;; (find-estring-elisp (ee-clprin1ind (cl-find-class 'cl-structure-class)))
-(defun ee-clprin1ind (o)
+(defun ee-clprin2 (o)
"Like `cl-prin1-to-string', but indents the result in a nice way."
- (let* ((str1 (cl-prin1-to-string o))
+ (let* ((str1 (ee-clprin1 o))
(str2 (replace-regexp-in-string " :" "\n:" str1))
(str3 (replace-regexp-in-string " #s" "\n#s" str2))
(str4 (replace-regexp-in-string "•[ \n]+" " " str3)) ; a hack!
(str5 (ee-indent-as-elisp str4)))
str5))
-(defalias 'ee-clprin2 'ee-clprin1ind)
+(defun ee-clprin2s (o)
+ (ee-indent-as-elisp (format "(%s)" (mapconcat 'ee-clprin2 o "\n"))))
+
+(defun find-clprin2 (o &rest pos-spec-list)
+"Visit a temporary buffer containing a `cl-prin1'-printed version of O.
+This is a variant of `find-clprin1' that tries to insert newlines at the
+right places in the output of `cl-prin1-to-string' and then runs
+`ee-indent-as-elisp' in the result."
+ (apply 'find-estring-elisp (ee-clprin2 o) pos-spec-list))
+
+;; Test: (find-clprin2s ee-1stclassvideos-info)
+(defun find-clprin2s (o &rest pos-spec-list)
+"Visit a temporary buffer containing a `cl-prin2'-printed version of O.
+This is a variant of `find-clprin2s' in which O is expected to be a list
+of objects and each one of these objects is `cl-prin2'-printed."
+ (apply 'find-estring-elisp (ee-clprin2s o) pos-spec-list))
+
+;; Some examples in "2025modern" use the old suffix...
+(defalias 'find-clprin1ind 'find-clprin2)
+(defalias 'ee-clprin1ind 'ee-clprin2)
+
+;; I sometimes use the functions above with `-->', the main threading
+;; macro of dash.el. For example:
+;; (--> 'cl-structure-class cl-find-class)
+;; (--> 'cl-structure-class cl-find-class cl-type-of)
+;; (--> 'cl-structure-class cl-find-class cl--class-slots)
+;; (--> 'cl-structure-class cl-find-class cl--class-slots ee-clprin1)
+;; (--> 'cl-structure-class cl-find-class cl--class-slots ee-clprin1s)
+;; (--> 'cl-structure-class cl-find-class ee-clprin1)
+;; (--> 'cl-structure-class cl-find-class find-clprin2)
+
@@ -1943,6 +1990,19 @@ See the comments in the source!"
(ee-closure-to-lambda o)
o)))
+(defun ee-closure-to-named-plist (c &optional head)
+ "Convert a \"vector-like lambda\" to a \"named plist\".
+This function is used in the videos `2025modern' and `eev2025'."
+ (let ((list (ee-closure-to-list c)))
+ (seq-let [args code consts stackdepth docstring iform] list
+ `(,(or head 'interpreted-function)
+ :args ,args
+ :code ,code
+ :consts ,consts
+ :stackdepth ,stackdepth
+ :docstring ,docstring
+ :iform ,iform))))
+
diff --git a/eev-elinks.el b/eev-elinks.el
index d7c30a9783..2dfcde3f26 100644
--- a/eev-elinks.el
+++ b/eev-elinks.el
@@ -1485,7 +1485,8 @@ If D is t then try to use `ee-package-dir' to get the
directory."
# (ee-package-dir '{pkg})
# (find-epp (package-get-descriptor '{pkg}))
# (find-estruct (package-get-descriptor '{pkg}))
-# (find-clprin1ind (package-get-descriptor '{pkg}))
+# (find-clprin2 (package-get-descriptor '{pkg}))
+# (find-clprin2s (package-desc-extras (package-get-descriptor '0x0)))
# (package-initialize)
# (package-refresh-contents)
@@ -1495,6 +1496,7 @@ If D is t then try to use `ee-package-dir' to get the
directory."
# (find-fline (ee-package-dir '{pkg}))
# (find-epp (ee-package-desc '{pkg}))
# (find-estruct (ee-package-desc '{pkg}))
+# (find-clprin2 (ee-package-desc '{pkg}))
# (kill-new (ee-package-url '{pkg}))
# (insert \"\\n# \" (ee-package-url '{pkg}))
# (package-delete (ee-package-desc '{pkg}))
diff --git a/eev-intro.el b/eev-intro.el
index d1a9f5ca08..29fdefed55 100644
--- a/eev-intro.el
+++ b/eev-intro.el
@@ -19,7 +19,7 @@
;;
;; Author: Eduardo Ochs <[email protected]>
;; Maintainer: Eduardo Ochs <[email protected]>
-;; Version: 20251121
+;; Version: 20251219
;; Keywords: e-scripts
;;
;; Latest version: <http://anggtwu.net/eev-current/eev-intro.el>
@@ -361,7 +361,7 @@ subtitles. To learn how to use links like those, visit this
URL:
(find-video-links-intro)
Installing eev does NOT activate eev-mode. To activate eev-mode
-and open this tutorial, run `M-x eev-beginner'.
+and open this tutorial, and run `M-x eev-beginner'.
\"Installing\" eev doesn't \"load\" eev. The difference between
installing and loading is explained here:
@@ -2480,8 +2480,7 @@ and then execute each one with `C-e C-x C-e':
-
-5.2. With `package-vc-install'
+5.3. With `package-vc-install'
------------------------------
This installs the version of eev that is in the git repository.
Copy and paste these lines to an Emacs buffer, and then execute
@@ -2500,10 +2499,80 @@ This will install eev in \"~/.emacs.d/elpa/eev/\". Try:
+5.4. With `use-package' and straight.el
+---------------------------------------
+Some people use non-default package managers for Emacs, like
+straight.el and use-package. I have very little experience with
+them, but it SEEMS that this is a good recipe for using eev with
+`use-package':
+
+;; From:
+;; https://lists.gnu.org/archive/html/help-gnu-emacs/2021-10/msg00031.html
+;; https://lists.gnu.org/archive/html/help-gnu-emacs/2021-10/msg00034.html
+;; See: (find-eev-install-intro \"5.4. `use-package'\")
+;;
+(use-package eev
+ :straight (:host github :repo \"edrx/eev\")
+ :config (progn
+ ;; See: (find-eev \"eev-load.el\" \"autoloads\")
+ ;; https://anggtwu.net/eev-current/eev-load.el.html#autoloads
+ (require 'eev-load)
+ ;; (eev-mode 1) ; optional
+ ;; (eev-beginner) ; optional
+ ))
+
+
+
+5.5. With Guix
+--------------
+The author of the Guix package for eev - Untrusem - told me that
+his package is a work in progress, and that he believes that these
+instructions will start working in the middle of december/2025.
+Add this to your guix channel file:
+
+ (channel
+ (name 'rain-and-roses
+ (url \"https://codeberg.org/untrusem/rain-and-roses.git\")
+ (branch \"trunk\"))
+
+then run this in a shell:
+
+ guix pull
+ guix install emacs-eev
+
+See the next section for some things that don't work in the Guix
+package.
+
+
+
+5.6. A note about read-onlyness
+-------------------------------
+Many functions in eev are \"documented\" by tests in comments in the
+source code. These test are marked with \";; Test:\", and they suppose
+that the person who will try to run them knows how to undo their
+actions. For example, in this section
+
+ (find-eev \"eev-blinks.el\" \"find-einsert\")
+
+two of the tests are:
+
+;; Test: (ee-insert \"\\n;; \" '(?a ?z) 32 \"Foo\")
+;; Test: (find-einsert '(\"Greek:\\n\" (913 969) 10 \"Bold:\\n\" (120276
120327)))
+
+The first one inserts a line in the current buffer, and the way to undo
+its action is to run `undo'; the second one creates a temporary buffer,
+and the way to undo its action is to kill that buffer with `M-k'.
+
+In Guix the .el files of Emacs packages are read-only, and tests like
+the one with `ee-insert' above will fail.
+
-5.3. From the tarball in ELPA
+
+
+
+5.4. From the tarball in ELPA
-----------------------------
-[This section is very old! TODO: rewrite it!]
+[Now Emacs28 is easy to install and W$, and this section is obsolete]
...as an Emacs package, by downloading a file named
eev-YYYYMMDD.tar from either ELPA or anggtwu.net using
@@ -2530,9 +2599,9 @@ There is a link to download Emacs28-pretest here:
-5.1. Using the tarball
+5.5. Using the tarball
----------------------
-[Obsolete, deleted, except for this last paragraph:]
+[VERY obsolete, deleted, except for this last paragraph:]
Every time that Emacs gets stuck into something that you don't know
how to leave, or how to undo, you should kill the Emacs window and
@@ -2608,31 +2677,6 @@ the local copy of the .tar. See:
-5.5. `use-package'
-------------------
-Some people use non-default package managers for Emacs, like
-straight.el and use-package. I have very little experience with
-them, but it SEEMS that this is a good recipe for using eev with
-`use-package':
-
-;; From:
-;; https://lists.gnu.org/archive/html/help-gnu-emacs/2021-10/msg00031.html
-;; https://lists.gnu.org/archive/html/help-gnu-emacs/2021-10/msg00034.html
-;; See: (find-eev-install-intro \"5.5. `use-package'\")
-;;
-(use-package eev
- :straight (:host github :repo \"edrx/eev\")
- :config (progn
- ;; See: (find-eev \"eev-load.el\" \"autoloads\")
- ;; http://anggtwu.net/eev-current/eev-load.el.html#autoloads
- (require 'eev-load)
- ;; (eev-mode 1) ; optional
- ;; (eev-beginner) ; optional
- ))
-
-
-
-
6. `find-eev-install-links'
===========================
@@ -6509,9 +6553,10 @@ scripts etc\]
;; Skel: (find-intro-links "eepitch")
;; (find-eev "eepitch.readme")
-(defun find-eepitch-intro (&rest rest) (interactive)
- (let ((ee-buffer-name "*(find-eepitch-intro)*"))
- (apply 'find-eintro "\
+(defun find-eepitch-intro (&rest rest)
+ (interactive)
+ (let ((ee-buffer-name "*(find-eepitch-intro)*"))
+ (apply 'find-eintro "\
\(Re)generate: (find-eepitch-intro)
Source code: (find-eev \"eev-intro.el\" \"find-eepitch-intro\")
More intros: (find-eev-quick-intro)
@@ -18592,6 +18637,12 @@ Quicklisp or by Sly.
This is rewrite of:
(find-try-sly-links)
+UPDATE: in dec/2025 I recorded this video
+ (find-1stclassvideo-links \"2025badly\")
+ https://anggtwu.net/2025-badly-behaved.html
+about test blocks for Maxima, Sly, and Slime.
+TODO: integrate its ideas with this intro!
+
diff --git a/eev-testblocks.el b/eev-testblocks.el
index 0110d11c23..8d6e7939cb 100644
--- a/eev-testblocks.el
+++ b/eev-testblocks.el
@@ -19,7 +19,7 @@
;;
;; Author: Eduardo Ochs <[email protected]>
;; Maintainer: Eduardo Ochs <[email protected]>
-;; Version: 20251123
+;; Version: 20251215
;; Keywords: e-scripts
;;
;; Latest version: <http://anggtwu.net/eev-current/eev-testblocks.el>
@@ -349,7 +349,7 @@ to_lisp();
;; See: (find-eev "eepitch.el" "eepitch-b-slime")
;; (find-angg ".maxima/startslime.lisp")
(defun ee-insert-test-lisp-mode-4 ()
- "Use `M-4 M-x eeit' on a Lisp mode buffer to run this."
+"For Maxima with Slime. Use `M-4 M-x eeit' on a Lisp mode buffer to run this."
(interactive)
(insert (ee-adjust-red-stars (format "
#|
@@ -363,6 +363,8 @@ to_lisp();
load(\"startslime\");
(eepitch-b '(slime-connect \"localhost\" 4005))
(eepitch-slime-set-pkgbuffers)
+ (find-4eee-maxima-slime)
+ (find-3ee-maxima-slime)
(eepitch-slime-select-pkgbuffer \"COMMON-LISP-USER\")
(eepitch-slime-select-pkgbuffer \"MAXIMA\")
(load \"%s\")
@@ -377,7 +379,7 @@ load(\"%s\");
;; See: (find-eev "eepitch.el" "eepitch-b-sly")
;; (find-angg ".maxima/startsly.lisp")
(defun ee-insert-test-lisp-mode-5 ()
- "Use `M-5 M-x eeit' on a Lisp mode buffer to run this."
+"For Maxima with Sly. Use `M-4 M-x eeit' on a Lisp mode buffer to run this."
(interactive)
(insert (ee-adjust-red-stars (format "
#|
@@ -390,6 +392,8 @@ load(\"%s\");
load(\"startsly\");
(eepitch-b '(sly-connect \"localhost\" 56789))
(eepitch-sly-set-pkgbuffers)
+ (find-4eee-maxima-sly)
+ (find-3ee-maxima-sly)
(eepitch-sly-select-pkgbuffer \"common-lisp-user\")
(eepitch-sly-select-pkgbuffer \"maxima\")
(load \"%s\")
diff --git a/eev-tlinks.el b/eev-tlinks.el
index 142f7e9595..d4672cbeab 100644
--- a/eev-tlinks.el
+++ b/eev-tlinks.el
@@ -19,7 +19,7 @@
;;
;; Author: Eduardo Ochs <[email protected]>
;; Maintainer: Eduardo Ochs <[email protected]>
-;; Version: 20251022
+;; Version: 20251215
;; Keywords: e-scripts
;;
;; Latest version: <http://anggtwu.net/eev-current/eev-tlinks.el>
@@ -34,7 +34,7 @@
;; The functions defined here - `find-latex-links' and other ones -
;; produce buffers made of a series of hyperlinks followed by a
-;; templated text. The templated text is usually preceded by a line
+;; templated text. The templated text is often preceded by a line
;; like `(ee-copy-rest NLINES CODE)'; see the explanation of
;; `ee-copy-rest' below to understand how this is used.
;;
@@ -186,6 +186,7 @@
;; «.find-qdraw-links» (to "find-qdraw-links")
;; «.find-quicklisp-links» (to "find-quicklisp-links")
;; «.find-sbcl-links» (to "find-sbcl-links")
+;; «.find-slime-sly-links» (to "find-slime-sly-links")
;; «.find-linki-links» (to "find-linki-links")
;; «.find-gitdoc-links» (to "find-gitdoc-links")
;; «.find-luainit-links» (to "find-luainit-links")
@@ -5598,8 +5599,13 @@ myqdraw([xr({xr}),yr({yr})], myexs());
(apropos \"{name}\")
(describe '{name})
- (eepitch-sly)
- (eepitch-kill)
+ (eepitch-slime-kill 'show-only)
+ (eepitch-slime-kill)
+ (eepitch-b '(slime \"sbcl\"))
+ (eepitch-slime-select)
+
+ (eepitch-sly-kill 'show-only)
+ (eepitch-sly-kill)
(eepitch-sly)
(apropos \"{name}\")
(describe '{name})
@@ -5617,6 +5623,42 @@ myqdraw([xr({xr}),yr({yr})], myexs());
+;; «find-slime-sly-links» (to ".find-slime-sly-links")
+;; Skel: (find-find-links-links-new "slime-sly" "" "")
+;; Test: (find-slime-sly-links)
+;;
+(defun find-slime-sly-links (&rest pos-spec-list)
+"Visit a temporary buffer containing hyperlinks for slime-sly."
+ (interactive)
+ (apply
+ 'find-elinks-elisp
+ `((find-slime-sly-links ,@pos-spec-list)
+ ;; Convention: the first sexp always regenerates the buffer.
+ (find-efunction 'find-slime-sly-links)
+ ""
+ ,(ee-template0 "\
+;; Use the sexps below to switch between Slime and Sly.
+;; After installing the other package you need to restart Emacs.
+
+;; (find-epackage-links 'slime)
+;; (find-epackage-links 'sly)
+
+(progn
+ (package-initialize)
+ (package-refresh-contents)
+ (ignore-errors (package-delete (package-get-descriptor 'slime)))
+ (ignore-errors (package-delete (package-get-descriptor 'sly)))
+ )
+
+;;-- Choose one:
+;; (package-install 'slime)
+;; (package-install 'sly)
+
+")
+ )
+ pos-spec-list))
+
+
;; «find-linki-links» (to ".find-linki-links")
diff --git a/eev-videolinks.el b/eev-videolinks.el
index 315966f2c1..12fbdd0a31 100644
--- a/eev-videolinks.el
+++ b/eev-videolinks.el
@@ -19,7 +19,7 @@
;;
;; Author: Eduardo Ochs <[email protected]>
;; Maintainer: Eduardo Ochs <[email protected]>
-;; Version: 20250516
+;; Version: 20251216
;; Keywords: e-scripts
;;
;; Latest version: <http://anggtwu.net/eev-current/eev-videolinks.el>
@@ -87,6 +87,8 @@
;; «.eev2024» (to "eev2024")
;; «.2024pianoroll» (to "2024pianoroll")
;; «.2025modern» (to "2025modern")
+;; «.eev2025» (to "eev2025")
+;; «.2025badly» (to "2025badly")
;; «.ee-1stclassvideos-field» (to "ee-1stclassvideos-field")
;; «.second-class-videos» (to "second-class-videos")
;; «.code-eevvideo» (to "code-eevvideo")
@@ -1025,7 +1027,7 @@ of the videos and play them with mpv. Compare with
;;
;; «2025modern» (to ".2025modern")
;; Play: (find-2025modernvideo "0:00")
- ;; Index: (find-1stclassvideoindex "2025modern")
+ ;; Subs: (find-2025modernsubs "0:00")
("2025modern"
:title "Some problems of modernizing Emacs (incomplete - slides 0 to 6
only)"
:mp4 "http://anggtwu.net/eev-videos/2025-modern.mp4"
@@ -1036,6 +1038,35 @@ of the videos and play them with mpv. Compare with
:length "20:38"
:subs ".vtt"
:comment "A video about vector-like lambdas, `cl-print', and buttons.")
+ ;;
+ ;; «eev2025» (to ".eev2025")
+ ;; Play: (find-eev2025video "0:00")
+ ;; Subs: (find-eev2025hsubs "0:00")
+ ("eev2025"
+ :title "Some problems of modernizing Emacs (EmacsConf 2025)"
+ :mp4 "http://anggtwu.net/eev-videos/emacsconf2025.mp4"
+ :yt "http://www.youtube.com/watch?v=Y75Q2IN8Y_M"
+ :page "http://anggtwu.net/emacsconf2025.html"
+ :hsubs "http://anggtwu.net/emacsconf2025.html#0:00"
+ :date "2025dec07"
+ :length "25:22"
+ :subs ".vtt"
+ :index t
+ :comment "(to be written)")
+ ;;
+ ;; «2025badly» (to ".2025badly")
+ ;; Play: (find-2025badlyvideo "0:00")
+ ;; Subs: (find-1stclassvideoindex "2025badly")
+ ("2025badly"
+ :title "Badly-behaved targets, or: eev, Slime, Sly, and Maxima"
+ :mp4 "http://anggtwu.net/eev-videos/2025-badly-behaved.mp4"
+ :yt "http://www.youtube.com/watch?v=kbeHTmDBV44"
+ :page "http://anggtwu.net/2025-badly-behaved.html"
+ :hsubs "http://anggtwu.net/2025-badly-behaved.html#0:00"
+ :date "2025dec16"
+ :length "17:48"
+ :subs ".vtt"
+ :comment "A very technical video about Common Lisp and eepitch.")
))
diff --git a/eev.el b/eev.el
index 01d3169e82..349c2d07fb 100644
--- a/eev.el
+++ b/eev.el
@@ -6,7 +6,7 @@
;; Package-Requires: ((emacs "25.1"))
;; Keywords: lisp e-scripts
;; URL: http://anggtwu.net/#eev
-;; Version: 20251123
+;; Version: 20251219
;; 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