|
Warning: this is an htmlized version!
The original is here, and the conversion rules are here. |
;; This file:
;; http://anggtwu.net/ORG/2025-modern.org.html
;; http://anggtwu.net/ORG/2025-modern.org
;; (find-angg "ORG/2025-modern.org")
;; Author: Eduardo Ochs <eduardoochs@gmail.com>
;;
;; See: (find-angg "ORG/2025-modern.org")
;; (find-angg "elisp/2025-modern-advice.el")
;; (find-angg "elisp/2025-modern-prints.el")
;; (find-angg "elisp/2025-modern-reset.el")
;; (find-angg "elisp/emacsconf2024.el")
;;
;; (load "~/elisp/emacsconf2024.el")
;; (set-face-foreground 'org-link "chocolate1")
;; (find-angg "elisp/emacsconf2024.el")
;;
;; (find-angg "elisp/2025-advice.el")
;; (find-es "emacs" "lambdas-for-beginners")
;; (find-efunction 'find-clprin1ind)
;;
;; «.0» (to "0")
;; «.1» (to "1")
;; «.2» (to "2")
;; «.3» (to "3")
;; «.4» (to "4")
;; «.5» (to "5")
;; «.6» (to "6")
«0» (to ".0")
(defun hockney () (interactive) (find-fline "~/tmp/David Hockney. The arrival of spring, Woldgate, east Yorkshire 2011.jpg"))
(find-2a nil '(hockney))
(font "Inconsolata 17" :p)
Some problems of modernizing Emacs
==================================
http://anggtwu.net/2025-modern.html
http://anggtwu.net/#eev
Eduardo Ochs
2025mar12
«1» (to ".1")
(font "Inconsolata 16" :p)
1. The main themes of this video
================================
1.1. Emacs have changed a lot in its recent versions
and now it has lots of types -
its current class tree looks like this:
(find-classtree 't)
(find-ebuffer "*(find-classtree t)*")
1.2. People used to say
"Anyone can learn Lisp in one day" -
but now this is gone - I will show why.
1.3. I will also show how to display better "inner views"
of Emacs objects by using several tricks with/based on
`cl-prin1-to-string'. Some examples, slightly edited:
(modern-output "lambdas")
(modern-output "advice")
(modern-output "class")
1.4. The buttons in "*Help*" buffers are black boxes.
For example:
(describe-type 'cl-structure-class)
(find-2a nil '(find-etypedescr 'cl-structure-class))
«2» (to ".2")
(font "Inconsolata 20" :p)
2. Anyone can learn Lisp in one day
===================================
From my presentation at the EmacsConf 2024...
(find-eev2024hsubs "10:38" "9. Abelson and Sussman")
(find-eev2024video "10:38" "9. Abelson and Sussman")
(find-eev2024video "11:12" "Anyone can learn Lisp in one day...")
(find-eev2024hsubs "11:20" "And I would add: and if the person")
(find-eev2024hsubs "11:24" "is starting with Doom Emacs then it would")
(find-eev2024hsubs "11:26" "take take five years.")
http://anggtwu.net/emacsconf2024.html
«3» (to ".3")
(font "Inconsolata 25" :p)
3. Lambdas for beginners
========================
See: (find-elisp-intro "6. Defining functions")
(setq foo 42)
(defun foo (a) (* 10 a))
(symbol-value 'foo)
;; -> 42
(symbol-function 'foo)
;; -> (lambda (a) (* 10 a))
(foo foo)
((lambda (a) (* 10 a)) 42)
(* 10 42)
420
«4» (to ".4")
(font "Inconsolata 16" :p)
"Anyone can learn Lisp in one day..."
^ now this is gone.
4. Lambdas for beginners broken
===============================
(defun foo (a b) (+ a b))
(symbol-function 'foo)
;; old -> (lambda (a b) (+ a b))
;; now -> #[(a b) ((+ a b)) nil]
Some terminology...
This is an "old-style lambda": (lambda (a b) (+ a b))
This is a "vector-like lambda": #[(a b) ((+ a b)) nil]
Until mid-2024 beginners could learn a lot of Lisp
by thinking only in terms of objects like these...
(defun foo (a b) (+ a b)) (lambda (a b) (+ a b))
.______.____._____. ._______._____.
| | | | | | |
defun foo .__. .__.__. lambda .__. .__.__.
| | | | | | | | | |
a b + a b a b + a b
Then vector-like lambdas started to appear in many places.
«5» (to ".5")
(font "Inconsolata 16" :p)
5. Lambdas for beginners broken (2)
===================================
This is an "old-style lambda": (lambda (a b) (+ a b))
This is a "vector-like lambda": #[(a b) ((+ a b)) nil]
Until mid-2024 beginners could learn a lot of Lisp
by thinking only in terms of objects like these...
(defun foo (a b) (+ a b)) (lambda (a b) (+ a b))
.______.____._____. ._______._____.
| | | | | | |
defun foo .__. .__.__. lambda .__. .__.__.
| | | | | | | | | |
a b + a b a b + a b
Then vector-like lambdas started to appear in many places.
Before mid-2024 beginners could open (black?) boxes like...
(symbol-function 'foo)
...and they would see something elegant and mind-blowing...
Now they see a tiny part of a very complex structure, and they are
overwhelmed (instead of mind-blown).
^ I was overwhelmed for years - and in this video
I am going to pretend that I was not the only one.
«6» (to ".6")
(font "Noto Mono 13" :p)
6. For the impatient: try this
==============================
I hate videos that present things that
look fantastic but that are very hard to install...
and I've been experimenting with things that can be
installed - in /tmp/ - in seconds. So, copy this
from http://anggtwu.net/2025-modern.html to an
Emacs buffer, and...
* (eepitch-shell)
* (eepitch-kill)
* (eepitch-shell)
cd /tmp/
wget -N http://anggtwu.net/elisp/2025-modern-prints.el
wget -N http://anggtwu.net/elisp/2025-modern-reset.el
wget -N http://anggtwu.net/elisp/2025-modern-button.el
* (code-c-d "modern" "/tmp/" :anchor)
* (add-to-list 'load-path "/tmp/")
* (load "2025-modern-prints.el")
* (find-2a nil '(find-modern "2025-modern-prints.el" "advice-adt"))
* (find-2a nil '(find-efunctiondescr 'adt-2))
* (find-2a nil '(find-epp adt-o))
* (find-2a nil '(find-clprin2 adt-o))
* (load "2025-modern-reset.el")
* (find-2a nil '(find-clprin2 adt-o))
* (load "2025-modern-prints.el")
* (find-2a nil '(find-clprin2 adt-o))
* (find-2a nil '(find-clprin2 (cl-find-class 'cl-structure-class)))
* (load "2025-modern-button.el")
* (find-2a nil '(find-modern "2025-modern-button.el" "find-ebutton-links"))
* (code-c-d "modern" "~/elisp/" :anchor)
* (eepitch-shell)
* (eepitch-kill)
* (eepitch-shell)
rm -fv /tmp/2025-modern-prints.el
rm -fv /tmp/2025-modern-reset.el
rm -fv /tmp/2025-modern-button.el
* (eepitch-shell)
* (eepitch-kill)
* (eepitch-shell)
cp -v ~/elisp/2025-modern-prints.el /tmp/
cp -v ~/elisp/2025-modern-reset.el /tmp/
cp -v ~/elisp/2025-modern-button.el /tmp/
(font "Noto Mono 16" :p)
Note: this is a video for people who hate videos -
(find-show-conses-2a '(defun foo (a b) (+ a b)))
(find-show-conses-2a '(lambda (a b) (+ a b)))
(find-es "emacs" "lambdas-for-beginners")
Broken in what sense? Edrx-unfriendly?
======================================
From: http://anggtwu.net/2024-eev-for-5-year-olds.html#taking-apart
(find-TH "2024-eev-for-5-year-olds" "taking-apart")
Note: Eduardo Ochs
Ed r x
...eev is more like a toy that is _slightly interesting_
if you play with it for a few seconds, and _much more interesting_
if you open it and take its pieces apart to see how everything works.
(defun foo (a) (* 10 a))
(find-efunctiondescr 'foo)
(symbol-function 'foo)
;; -> #[(a) ((* 10 a)) nil]
(find-classtree 't)
(find-ebuffer "*(find-classtree t)*" "interpreted-function")
(find-ebuffer "*(find-classtree t)*" "closure")
(find-ebuffer "*(find-classtree t)*" "built-in-class")
(find-eaproposf "interpreted-function")
(find-clprin1ind (cl-find-class 'interpreted-function))
(find-clprin1ind (cl-find-class 'cl-structure-class))
(find-clprin1ind (cl-find-class 'cl-structure-class))
(find-clprin1ind (cl-find-class 'myab))
Problem 2: advice is difficult (for me)
=======================================
(find-angg "elisp/2025-modern-advice.el")
Problem 3: the "describe-*" functions
=====================================
(describe-function 'adt-2)
(find-efunctiondescr 'adt-2)
# (find-sh "dict \"rat's nest\"")
# Local Variables:
# coding: utf-8-unix
# modes: (org-mode emacs-lisp-mode)
# End: