//g/
>Lisp is a family of programming languages with a long history and a distinctive parenthesized prefix notation. There are many dialects of Lisp, including Common Lisp, Scheme, Clojure and Elisp.

>Emacs is an extensible, customizable, self-documenting free/libre text editor and computing environment, with a Lisp interpreter at its core.

>Emacs Resources
https://gnu.org/s/emacs
https://github.com/emacs-tw/awesome-emacs
https://github.com/systemcrafters/crafted-emacs

>Learning Emacs
C-h t (Interactive Tutorial)
https://emacs-config-generator.fly.dev
https://systemcrafters.net/emacs-from-scratch
http://xahlee.info/emacs
https://emacs.tv

>Browse imageboards in Emacs Org-Mode
https://github.com/eNotchy/4g

>Emacs Distros
https://github.com/caisah/emacs.dz

>Elisp
Docs: C-h f [function] C-h v [variable] C-h k [keybinding] C-h m [mode] M-x ielm [REPL]
https://gnu.org/s/emacs/manual/eintr.html
https://gnu.org/s/emacs/manual/elisp.html
https://github.com/emacs-tw/awesome-elisp

>Common Lisp
https://lispcookbook.github.io/cl-cookbook
https://cs.cmu.edu/~dst/LispBook
https://gigamonkeys.com/book
https://lisp-docs.github.io
https://awesome-cl.com

>Scheme
https://scheme.org
https://standards.scheme.org
https://go.scheme.org/awesome
https://research.scheme.org/lambda-papers

>Clojure
https://clojure.org
https://tryclojure.org
https://clojure-doc.org
https://clojure.land
https://www.clojure-toolbox.com
https://mooc.fi/courses/2014/clojure
https://jafingerhut.github.io/cheatsheet/clojuredocs/cheatsheet-tiptip-cdocs-summary.html

>Other
https://github.com/dundalek/awesome-lisp-languages

>Guix
https://guix.gnu.org
https://nonguix.org
https://systemcrafters.net/craft-your-system-with-guix
https://futurile.net/resources/guix
https://github.com/franzos/awesome-guix

>SICP/HtDP
https://web.mit.edu/6.001/6.037/sicp.pdf
https://htdp.org

>More Lisp Resources
https://lisp.nexus
https://rentry.org/lispresources

prev thread: >>108879491
Showing all 179 replies.
>>
File: 1779664996678.jpg (200.6 KB)
200.6 KB
>>108967280
LOOP > DO/DO*.
>>
reposting my friend's research Lisp
https://github.com/hydrastro/lizard
>>
File: defense.png (127.0 KB)
127.0 KB
https://www.anduril.com/rebooting-the-arsenal
I've been thinking about war lately.
Can Lisp be part of this?
Should Lisp be part of this?
>>
>>108967280
When I did look at lisp briefly, I did find that it has a more simpler lambda system than all other languages. Lisp however is in a format that is just very difficult to learn and come back to.
>>
>>108967280
Is there a straight forward linear resource to learning lisp? The current resources are not linear, it's hard to learn is what I am saying as nicely as possible.
>>
>>108967746
It just looks different from what you're used to. I used to think the same, but with a little acclimation, it's not harder or easier. (I think structural editing is kinda fun, though.)
>>
File: file.png (33.6 KB)
33.6 KB
>>108967756
Take a look at this very short book.
https://almightylisp.com/
It'll get you bootstrapped and competent in CL fairly quickly if you work through their examples. You probably already know some of what they're going to teach you. It'll fill in the gaps in your knowledge.
>>
>>108967726
why should engineers work for profiteering CEOs that lobby their governments for actions that negatively impact society's well being in exchange for higher GDP? what is the purpose of the United States of America? why is blackmail being used to force American officials' hands? what other tools are being used to force officials' hands?
>>
>>108967773
>what other tools are being used to force officials' hands?
It always boils down to:
money
media
psychopathic (((demon))) energy
>>
File: lisp-alien-knight.png (190.5 KB)
190.5 KB
>>108967726
>The Dynamic Analysis and Replanning Tool, commonly abbreviated to DART, is an artificial intelligence program used by the U.S. military to optimize and schedule the transportation of supplies or personnel and solve other logistical problems.
>DART was introduced to support military logistics planning and was utilized during preparations for Operation Desert Storm.
https://en.wikipedia.org/wiki/Dynamic_Analysis_and_Replanning_Tool
>Dynamic Analysis and Replanning Tool (DART) System/Subsystem Specification
https://archive.computerhistory.org/resources/access/text/2023/08/102805225-05-01-acc.pdf
>>
File: 1770035509219835.png (138.7 KB)
138.7 KB
the blow man uses emacs?
>>
>>108968536
Yep
>>
>>108967280
Where can I find lisp wallpapers? Didnt find any on /wg/
>>
>>108970247
https://github.com/t-sin/lisp-alien-wallpapers
>>
File: not-angry-fruit-salad.jpg (393.0 KB)
393.0 KB
>>108968536
What theme is he using?
https://www.twitch.tv/j_blow/clip/InventiveArtsyGarbageOSfrog-FZxufO5yBFFA8bWY
>>
>>108971496
Isn't that one of the classic ones? I think it had the name of a grain or something, wheat?
>>
>>108971601
you're thinking of wheatgrass, and that's not it
>>
File: flammenwerfer.png (107.7 KB)
107.7 KB
>>108967726
>Coalton is currently used in production to build defense and quantum computing software.
https://github.com/coalton-lang/coalton
https://www.youtube.com/watch?v=xuSrsjqJN4M
>>
>>108971496
He wrote a custom theme for himself and didn't share it. There is a theme called "naysayer" if I remember correctly, which mimics his setup. "M-x list-packages", then isearch for "naysayer".
>>
>>108972682
>naysayer
It looks like a pretty good approximation to me.
https://github.com/nickav/naysayer-theme.el
>>
File: barberry.png (1.3 MB)
1.3 MB
A Wine Notebook and Database
https://www.barberry.io/

Made with Emacs
https://github.com/d12frosted/vino
https://github.com/d12frosted/vulpea
>>
>>108967770
Looks nice! Thank you!
>>
>>108974812
>vulpea
https://www.d12frosted.io/posts/2025-11-28-vulpea-v2-breaking-up-with-org-roam
This is really interesting. It has a lot of the same capabilities of org-roam, but it's more programmer-friendly. If you want to build systems on top of it, you can. Vino is an example this.

The question of how to build specialized databases was on my mind recently, and I'm glad I found something like this.
>>
File: aigp.png (126.8 KB)
126.8 KB
>>108967726
Autonomous Drone Race
https://www.theaigrandprix.com/
>>
>>108967756
>Is there a straight forward linear resource to learning lisp?
"A gentle introduction to symbolic computation"
>>
>>108967756
>The current resources are not linear, it's hard to learn is what I am saying as nicely as possible.
How about "Practical Common Lisp", which is very good, and "Land of Lisp" which is fun?

But really, the core of Lisp can be explained more or less succintly:
- Everything is an expression
- Expressions are delimited by parenthesis ()
- Every expression evaluates to a value.
- Special values are T and NIL, consider them "true " and "null/false" but more in a minute...
- For logic operations or boolean operations, everything that is not NIL is considered true. T is also true because it is not NIL.
- There are many data types, most of them you know like integers or strings, but one you don't know is the SYMBOL.
- A symbol is just a token you can use to represent something, for example you can have a list with the elements (SCISSORS KNIFE PAPER STONE), scissors, knife, paper, stone can be symbols, in that case they're not variables because variables are replaced (evaluated) to another value; symbols just stay as their are, they evaluate to their own value.
- A typical use of a symbol is to pass options to a function, for example if i call a function like this:

(read-csv-file myfile :quote-mode :always)

both ":quote-mode" and ":always" are symbols too, which in this context would specify that the CSV file will always be quoted.

- In the previous example, symbols have ":" prepended. These symbols are called "keywords" and they have a small difference: they are global, not unique to a namespace ("package"), while regular symbols have their own namespace ("package")
>>
>>108975186
>500k
>win a job
how about the engineers that develop the tech get 50% of all profits made from the tech?
the engineers deserve the money more than any CEO or marketing dept. does.
a whole lot of words talking about bold engineers and shit.
>>
>>108975257
(continuation)

- to call a function "myfunction" with arguments 3.14 and "apple" the syntax would be:

(myfunction 3.14 "apple")

This will pass the values/arguments to "myfunction" and thus evaluating the expression to a value. (Remember, in Lisp, everything evaluates to a value or "returns a value" if you want to see it that way.) Functions are similar to what you have in Python: they have a name, arguments, can have variable arguments, optional arguments, keyword arguments, etc.

- however, if you write:

'(myfunction 3.14 "apple")

The prepended quote (') tells the Lisp compiler/engine ("lisp implementation" in proper terms) that we don't want to evaluate the function. This means your input evaluates to a LIST with three elements:
1. myfunction, a SYMBOL
2. 3.14, a float number
3. "apple", a string

- lists are the fundamental or main data structure. Lisp has a ton of functions to do all kinds of stuff with lists.

- Lisp source code (i.e. function definitions) is MADE OF nested LISTS. Think this twice. Lisp source code is made of lists, and Lisp has a ton of functions to do all kinds of stuff with lists.

- Thus you should be able to write procedural code that takes source code (a list) as input, and produces source code (a list) as an output. This would enable you to create code that transforms code. Such kind of procedure is called a MACRO.

- A macro, syntactically, is used exactly like a function. The difference is that a function is evaluated(called) at runtime while a macro is often called at compile time. Thus, when you compile your source code (for example when you compile a function), the Lisp compiler executes all macros, thus processing your source code to its final form, and then compiling it.

- Macros, then, allow you to extend the programming language as you wish. Macros are an essential feature of Lisp and a Lisp IDE has many features intended to make debugging and testing of macros easy.
>>
is there any way to do generic functions in guile without goops?
>>
File: cl-cookboook.cover.png (221.0 KB)
221.0 KB
>>108974875
No problem. That book didn't exist when I decided to learn CL, but I think it would have sped up my learning process if I had access to it. With that said, there *is* one resource that I found myself going back to time and time again while I was learning CL, and I still reference it now.
The Common Lisp Cookbook
https://lispcookbook.github.io/cl-cookbook/
https://github.com/LispCookbook/cl-cookbook/

It's extremely practical in what it covers, and whenever I wondered "How do I do ___ in CL?" ...more often than not, I found the answer in this book. It's not even an exaggeration to say that over 90% of my CL knowledge came from skimming sections of this book when I needed help. I really like this book, and I'm thankful for @vindarel for maintaining it.
>>
>>108975771
For me it was https://dept-info.labri.fr/~strandh/Teaching/PFS/Common/David-Lamkins/contents.html
>>
>>108975669
by reimplementing the relevant parts of goops
>>
>>108975669
why not just use goops?
>>
>>108975891
Because OOP is bad
>>
>>108975669
Just use CL.
>>
>>108975771
To anyone who uses pdf-tools in Emacs and uses `C-c TAB` (pdf-view-extract-region-image), there was a minor regression introduced about 6 months ago that makes this fail. The fix is here.
https://github.com/vedang/pdf-tools/pull/357/changes/f3f3bfe3289e006ab9790428275fe6090b1d0212
It just changes a quote to a backquote.

If you installed or updated pdf-tools within the last six months, you might be affected.
>>
>>108977967
>rolling release distro issues no. 5849603929
>>
>>108976825
>Because OOP is bad
CLOS makes OOP fantastic!
>>
>>108972682
>He wrote a custom theme for himself and didn't share it
Classic Jon Blowjob
>>
Claude sucks at Clojure, it makes syntax mistakes and its training data is obviously outdated because it doesn't recognize many of the newer functions in clojure.core.

But, I've gotten pretty good results by making fairly detailed Malli schemas of the inputs and outputs, and the letting claude do the implementations.
>>
>>108978694
i can't think of anything more boring than writing schemas. if i absolutely had to use a slopbot i would switch the roles.
>>
>>108978712
>i can't think of anything more boring than writing schemas.
Writing docstrings easily tops it. Luckily, digital demons are pretty good at this.

>if i absolutely had to use a slopbot i would switch the roles
that was my approach at first, but it turns out the demons are bad at this kind of thing.

Honestly I very much dislike the agentic workflow where you let the demon write a bunch of code and then try to fix its shitty bugs. What I do enjoy is bouncing ideas off of ChatGPT, asking questions about best practices, talking about architecture.
>>
>>108978778
I like writing docstrings.
>>
>>108976825
What aspect of OOP is bad?
>>
>>108980394
1. the state management (at least in the domains I write software for, it might work for games)
2. creating all these shitty ad-hoc interfaces instead of just letting me get and operate upon the data in the form of familiar, generic data structures.
>>
>>108980501
>creating all these shitty ad-hoc interfaces instead of just letting me get and operate upon the data in the form of familiar, generic data structures.
Thankfully, CLOS eschews this retarded idea altogether: classes are merely used for data representation, not "encapsulation" (which can be achieved already in much cleaner and general ways, such as using closures).
>>
>>108980501
You can choose to treat class instances as glorified read-only structs if you want to avoid the parts of OOP you don't like. This is similar to the path Julia took when they decided there would be no such thing as a class or object in Julia. They just have a hierarchical and parametric types and the ability to use generic functions to dispatch on a combination of types (which is one of the best parts of CLOS).
>>
I wrote a little JS to scrape a YouTube transcript and generate an org list with timestamps.
https://bpa.st/I6UA
What I would love to have is the ability to click on a timestamp and have a browser go that timestamp in the video. Furthermore, if I'm already watching the video and click on a timestamp, it should make the existing video seek to the new timestamp (without loading a new page).
How can I make Emacs send commands to a running browser in this way?

Here's the JS that generated the transcript.
function getItems(segments) {
items = []
segments.forEach((seg, i) => {
const item = {
timestamp: seg.querySelector("div.ytwTranscriptSegmentViewModelTimestamp").innerText,
text: seg.querySelector("span[role=text]").innerText
}
items.push(item)
})
return items
}

function genOrgList(segments) {
const items = getItems(segments)
const orgList = items .map((item) => `- ${item.timestamp} :: ${item.text}`) .join("\n")
return orgList
}

// Usage: copy(genOrgList(segments))

/*
Usage:

// These selectors are probably pretty fragile.
// I don't trust YouTube to stay stable here.

transcript = document.querySelectorAll("#panels #contents")[0]
segments = transcript.querySelectorAll("transcript-segment-view-model")
copy(genOrgList(segments))
*/
>>
>>108981813
It just occurred to me that it doesn't have to control a browser. Controlling a video player like mpv is fine too.
>>
>>108981813
you can just start an external process and give it the timestamp in the url, like
xdg-open https://youtu.be/zXHl03Fr8XY?t=17s

check out how 4g handles starting video players
https://github.com/eNotchy/4g/blob/85a02bfa41e99c7292fa923d72e4a1ad780a8c2d/4g.el#L439
>>
>>108981813
btw you can just download the subtitles with yt-dlp
>>
>>108920294
i think rms uses X11 too, given he's trying to install the osm package
https://lists.gnu.org/archive/html/bug-gnu-emacs/2026-06/msg00099.html
>>
>>108981958
>xdg-open
That was ok for the initial opening of the video. However, I don't know if I can get subsequent random seeking from emacs to the video player (whether it be a browser or mpv).

>>108982008
Hmm.. this was the closest to what I wanted.
 yt-dlp --write-auto-sub --sub-format=srt --sub-lang=en --skip-download https://www.youtube.com/watch?v=0getRxRo7wg
>>
if you actually use exwm over Ratpoison, StumpWM, Sawfish WM, or even any fucking DE, what are you even fucking doing?
btw Ratpoison is, to this day, the most intelligently designed WM I've ever used. I use Gnome these days btw
>>
>fucking around with ecl
>hmm let's see the c code this thing generates
>secrets man was not meant to know .c
Mybe ecl isn't the lisp solution for embedded shit that I'm looking for.
>>
>>108982128
what's the point in using something else? i already do most things in emacs. if i used a different WM i would need to manually select the emacs window every time i'd want to open a file manager or check email. that sounds tedious
>>
>>108982419
>ecl
usecase??
>>
Clojure has
>type hints
>spec/malli instrumentation, or :pre and :post assertions
>TypedClojure static type system
And you have to use all of them if you want the benefits that other languages achieve with just one unified system.
>>
>>108982419
The most realistic way to use Lisp in embedded right now is arguably something like ulisp or writing a custom Lisp interpreter.

Sadly, all existing non-toy CL/Scheme implementations are designed to run in a hosted environment. I think even CL in full could be run in a bare metal environment, but you really need an implementation designed for it.
>>
>>108982128
All standalone tiling wms suck. I thank Emacs for showing me the light.
>>
>>108984123
just use carp ffs
>>
>>108982128
I just use i3 because it has decent default settings and I didn't have to spend hours configuring it.
>>
>>108984123
>type hints
purely for performance, if you get them wrong, the program will still run, just more slowly.
>Spec/Malli
for RUNTIME validation. this is absolutely no different from writing some function that looks at user input to confirm the inputted string can be casted to a positive number within the inclusive range of 16--1058, even numbers only (except for 244, fuck 244). good luck having a compile-time type system deal with that without getting into proof systems and shit (yes, I know you can define a custom type for this number with an errable constructor, but you will run into constant type casting annoyances that make it not worth it. btw I'm doing research into this exact problem using Clojure ASTs for inference upon).
>:pre/:post assertions
use of these is much more subjective in experience. I personally never use them. I attach Malli schemas to the metadata of a function for validating input, and have a lib that will apply the args to both when explicitly called for (sometimes you KNOW you are passing correct data to a function and need no error checking, other times you don't know).
>Typed Clojure
a separate project that does traditional type checking at compile time for errors. I do not recommend it.
>>
>>108985989
>purely for performance
yes, that's the point. When I write static types in e.g. Dart, I both get the type safety and better autocomplete etc. AND I get to enjoy the performance benefits.

The neat thing about :pre/:post is that it always works, even in more obscure dialects like Squint.
>>
>>108980579
lists is all you need
>>
File: HJa5aSQbYAA5w1g.jpg (47.8 KB)
47.8 KB
>evil mode
>cool themes
>magit
>LSPs for Odin, Rust and Go
>Completion and code suggestions for said LSPs

Is this too hard to set up? I kinda want to drop Doom Emacs because it feels SLOW AS BALLS when doing anything. But at the same time I'm not sure at all whether to dive into creating my own config. Seems more intimidating than when I got into nvim years ago.
>>
>>108986356
literally just tell claude code to set it up for you it can control emacs through the command line
>>
>>108986370
>posts a pic of based Pope Leo
>expects him to use an LLM to configure his editor
>>
>>108986356
>LSPs for Odin, Rust and Go
if they're on your system, eglot should just use them.
>Completion and code suggestions for said LSPs
Just start eglot while in a project written in one of those languages and see if eglot does what you want.

Completion is a bitch to set up well. Here's my config:
(fido-vertical-mode 1)

(setopt
icomplete-in-buffer t
completions-detailed t
completion-show-help t
completion-auto-help 'lazy
completion-cycle-threshold 3
tab-always-indent 'complete
completion-styles '(basic partial-completion flex)
completion-category-defaults nil
completion-category-overrides
'((file (styles partial-completion flex))
(buffer (styles flex))
(project-file (styles partial-completion flex))))

;; ghost text completions
(global-completion-preview-mode 1)
(with-eval-after-load 'completion-preview
(setopt completion-preview-exact-match-only t))

(minibuffer-depth-indicate-mode 1)
(minibuffer-electric-default-mode 1)
>>
>>108985278
Same. I've been with i3 for over a decade. It just works (well).
>>
File: 1755391577047144.png (2.0 MB)
2.0 MB
new emac just dropped
https://lists.gnu.org/archive/html/emacs-devel/2026-06/msg00118.html
https://alpha.gnu.org/gnu/emacs/pretest/emacs-31.0.90.tar.xz
>>
is it just me, or has elpaca been extremely unreliable and getting worse since the 0.1.0 release? it's gotten to the point i straight up can't bootstrap my config anymore with 0.2.0
>>
>>108985243
>carp
?
>>
>>108989600
It's a statically typed lisp-like language written in haskell
>>
>>108967280
where emac
>>
File: 1753087900633540.png (6.8 KB)
6.8 KB
just compiled emacs with -O3. what am i in for?
>>
>>108986356
Setting up evil and magit is straightforward.
1. Give yourself access to MELPA so that you can install packages from https://melpa.org/
2. Write use-package expressions for each package you want to install.

Let's do the relatively easy part first.
;;;; Setup MELPA access

(require 'package)
(package-initialize)
(add-to-list 'package-archives '("melpa" . "https://melpa.org/packages/"))

;;;; Put customizations in a separate file.

(setopt custom-file (locate-user-emacs-file "custom.el"))
(load custom-file :no-error-if-file-is-missing)

;;;; Packages

;; https://github.com/emacs-evil/evil
(use-package evil
:ensure t
:init
(setq evil-want-integration t)
(setq evil-want-keybinding nil)
:config
(evil-mode 1))

;; https://github.com/emacs-evil/evil-collection
(use-package evil-collection
:after evil
:ensure t
:config
(evil-collection-init))

;; https://github.com/magit/magit
(use-package magit
:ensure t)

;;;; TODO: General Config

At the end of this config, maybe you could try some of the things from:
>>108986511
>>
>>108986356
>>108990669
When you add `:ensure t` to the use-package expression, that tells Emacs to download the package if it doesn't have it already.

Also, although you're using evil, there are a few vanilla keybindings that work well with evil, especially while you're editing Elisp.
M-; (comment-dwim)
C-M-h (mark-defun)
I recommend giving them a try.
Also, if you have a question about anything in your init file, put your cursor on it and hit `C-h o` (describe-symbol). The ability to query Emacs is one of the most important skills to develop.
>>
>>108990695
There's also C-M-x (eval-defun). While you're writing your config, there's no need to restart Emacs. You can write a use-package expression and when you're happy with it, hit C-M-x while your cursor is inside it to run the expression. Emacs will then install the package.
>>
File: carp.png (99.7 KB)
99.7 KB
>>108989600
https://github.com/carp-lang/Carp
https://github.com/carp-lang/Carp/blob/master/docs/LanguageGuide.md
>Carp borrows its looks from Clojure but the runtime semantics are much closer to those of ML or Rust.
>>
File: 61dnV42UYaL.jpg (102.9 KB)
102.9 KB
>>108967280
I am using emacs in the terminal with evil mode enabled
Should i just switch to vim at this point?
>>
>>108990927
I wouldn't. Elisp > VimScript.
>>
>>108990931
I have been looking at neovim (lua) and desu you are 100% right, i hated lisp starting off but now i see the appeal

Still i wonder how many people use emacs inside term+tmux vs using it as a complete os replacement
>>
>>108990979
emacs --daemon can eliminate a lot of tmux use cases, but it requires a higher level of emacs proficiency.
>>
File: 2026-06-06_02-52-11.png (299.3 KB)
299.3 KB
>>108880949
I've made some improvements.
- It should work with either sly or slime now.
- It requests and displays extra metadata about the text.
- The *ichiran* buffer uses org-mode now with the headings collapsed by default. (You only get extra detail when you explicitly open a heading.)
(defun ichiran-romanize (phrase)
"Romanize a Japanese PHRASE using ichiran.

Results are displayed in an *ichiran* `org-mode' buffer.

For this to work:
1. `sly' or `slime' must already be running.
2. `org-babel-lisp-eval-fn' must be set apporpriately.
3. The ichiran CL library must be loaded into that sly (or slime) instance."
(interactive "MPhrase: ")
(let* ((result (funcall org-babel-lisp-eval-fn
`(cl:multiple-value-list
(ichiran:romanize ,phrase :with-info t))))
(romanized-text (car result))
(romanized-info (cadr result))
(buffer (get-buffer-create "*ichiran*"))
(window (or (get-buffer-window buffer)
(switch-to-buffer-other-window buffer))))
(with-current-buffer buffer
(delete-region (point-min) (point-max))
(unless (equal major-mode 'org-mode)
(org-mode))
;; Insert `romanized-text' at the top.
(insert (concat romanized-text "\n"
;; Insert a level 1 org headline for each segment.
(cl-loop for part in romanized-info
concat (concat "* " (car part) " = " (cdr part) "\n\n"))))
;; Fold headlines on initial load.
(org-cycle '(4)))))

https://github.com/tshatrov/ichiran
I really like getting Elisp and CL to work together, sending sexps back and forth.
>>
>>108991103
And to think Stallman would have preferred Scheme to CL for hypothetically porting Emacs to.
>>
>>108991143
A hypothetical Scheme Emacs should be able to do something very similar. I'm no Scheme expert, but I'm sure it would be able to build a sexp with CL code to execute and receive an sexp alist back. It's true that Elisp and CL are more similar to each other than they are to Scheme, but in this case, I don't think it would matter that much. They can all understand each other's sexps.
>>
>>108991143
I think Stallman is very aesthetically motivated and I agree with him that Scheme is the most beautiful of all the Lisp dialects, all of which are pretty, but some of which are really standout gorgeous even among other pretty languages.
But I think of Common Lisp as more like a language which sacrifices some conceptual beauty for power. It’s undeniable that in terms of development experience it’s extremely hard to touch Common Lisp. Stallman’s concerns were more objections over what went into CL as it was being formalised and some of these concerns are fair while others are petty and others I think are downright bad ideas (he didn’t like the keyword usage in CL, for example).
I’ve mostly used CL myself because once you use the restart system, going back is so hard, but I think anyone who gets really into Lisp has to find a special fondness for Scheme
>>
>update emacs packages
>everything fucking breaks
Fuck you elpaca!
>>
LISP killed my interest in other languages. I've used to be pretty big in Ocaml, but then I just got tired. LISP is so simple, no bullshit. Same thing for Haskell.
>>
>>108991532
All caps Lisp is a bit like all caps Fortran, a bit of a boomer relic. The languages haven’t been referred to that way in about half a century.
>>
>>108991284
>not installing elpa packages directly through your distro's repo when possible so that they are guaranteed to be pinned and compatible
>>
>>108991740
To be honest I found Guix is surprisingly weird with this. Emacs and Guix Home tend to clash in some respects and unfortunately because Guix Home doesn’t seem to like stuff like pdf-tools, it seems to be easier to let emacs handle its own packages and Guix handle the rest
>>
>>108967280
My favorite Lisp is GNU Make
https://okmij.org/ftp/Computation/Make-functional.txt
>>
i hate lisp1
>>
File: carp.x4.png (868.5 KB)
868.5 KB
>>108990823
testing
>>
>>108991740
that seems like a pretty major pain in the ass when you're running emacs across different machines and distros
>>
>>108992683
I agree. I run emacs on machines where I am a guest and have no control over the os or distro. I'd never be able to do this.
>>
One very questionable default behavior of Emacs is that load-theme doesn't disable previously loaded themes. For example, if I started vanilla Emacs (via emacs -Q) and did:
M-x load-theme tango RET
M-x load-theme light-blue RET
M-x load-theme modus-operandi-tinted RET

My custom-enabled-themes would be:
(modus-operandi-tinted light-blue tango)

All 3 themes are loaded simultaneously! I don't think this is what most people expect, and it often leads to strange bleed-through between themes.

My solution is to apply a :before advice on load-theme.
(defun disable-loaded-themes (theme &optional no-confirm no-enable)
"Disable any loaded themes before enabling a new THEME.
This prevents overlapping themes; something I would rarely want.
THEME, NO-CONFIRM, and NO-ENABLE are ignored in this advice function."
(dolist (theme custom-enabled-themes)
(disable-theme theme)))

(advice-add #'load-theme :before #'disable-loaded-themes)
>>
>>108991284
>Glare at Emacs un-freely
>M-x is not defined
>C-c C-k is not defined
>Fucking nothing duh uh what defined duhhh
>>
File: elpaca-recent-issues.png (60.7 KB)
60.7 KB
>>108987649
I'm not an elpaca user, but it looks like you're not alone in experiencing breakage due to the 0.2.0 release.
https://github.com/progfolio/elpaca/issues
Even prominent Elisp authors like minad have chimed in.
>>
>>108993082
Please don’t be a vibecoded change
>>
>>108986511
>>108990669
>>108990695
Thanks anons and sorry for the very late reply. I will maybe give this a shot, what the hell?
I might come back to the thread for questions. Thanks again.
>>
>>108993206
No, the problem is that:

1. compat got added to core as a stub in emacs 30
2. package managers do not update packages included with emacs by default (a reasonable default for other packages but defeats the entire purpose of compat)
3. a bunch of packages now want to use compat 31 and package managers wont update the built in compat 30 unless you explicitly tell them to

This was an easily foreseeable problem that I just assumed had been thought through when compat got added in emacs 30 but I guess not.
>>
File: 1747703120757.png (1.7 MB)
1.7 MB
>John McCarthy was born in Boston, Massachusetts, on September 4, 1927, to an Irish immigrant father and a Lithuanian Jewish immigrant mother
>>
>>108992836
Same here. Honestly, the default should be changed, I can hardly think of any cases where you'd want more than one theme enabled at a time.
>>
>>108980501
>>>108980394
>1. the state management (at least in the domains I write software for, it might work for games)
>2. creating all these shitty ad-hoc interfaces instead of just letting me get and operate upon the data in the form of familiar, generic data structures.
1. Debugging software which depends on state change is easy in Common Lisp with an IDE because the whole language was intended for managing mutable program state.

2. I feel the same about interfaces. CLOS is different and closer to "operate upon the data with no ceremony"
>>
>>108985169
>I think even CL in full could be run in a bare metal environment
That's what Movitz and Mezzano do; they're full operating systems written in Lisp and thus they run on a bare-to-the-metal Lisp implementation.

Now, they're not production-quality software.
>>
>>108991143
>And to think Stallman would have preferred Scheme to CL
for ideological reasons only; stallman WAS a Common Lisp developer and got butthurt by the CL community when the split between Symbolics and Lisp Machines Inc happened.
Thus he started to talk shit about CL.

The reality is, his Emacs Lisp started as something contrary to CL, but since decades ago, CL features had to be incorporated on the optional and ubiquitous "cl-lib"...
>>
>>108991272
>But I think of Common Lisp as more like a language which sacrifices some conceptual beauty for power. It’s undeniable that in terms of development experience it’s extremely hard to touch Common Lisp
moreover, and something not mentioned often: Common Lisp is built for interactive programming from the very fundamentals, while Scheme is intended to be used with the (outdated, lesser, boring) "compile, run, fix your source code, compile again, run again" development style.

IMO this is what makes Common Lisp win, for me the full featured interactive development is the #1 reason to use Lisp.
>>
>>108994293
Yeah I agree, I’d prefer Scheme outright if it had restarts. Continuations are nice, but restarts are such an amazing feature it almost ruins you for development in any other language or even dialect of Lisp, including Scheme.
>>
I don't understand this kind of stuff.
Is installing Emacs with pgtk the best for performance on wayland?
>>
>>108994275
Honestly, now that Elisp is close to switching to lexical scoping by default, the overlap between the two languages is even larger than it ever was. A lot of CL code will run perfectly fine unmodified in Elisp and vice versa.

I do think that Scheme has an overall cleaner and "tighter" design, but I don't think it's suitable for a highly interactive and dynamic system such as Emacs: this is the one scenario where dynamic scoping really helps.
>>
Is there a way to make orgmode bash run on the actual terminal emulator (vterm or eat)? I think that would be very neat
>>
>>108994382
pgtk is the worst choice for performance in any context, the only reason you'd want it is wayland features
>>
>>108994681
So what do I do? Claude told me it was better to use pgtk for performance. Do I install the regular package through dnf?
>>
>>108986356
>cool themes
There are a ton of themes out there. Many can be previewed here:
https://emacsthemes.com/themes/

Some are more well-behaved than others. By that, I mean they have sufficient "face coverage" which means that everything that needs to be colored is colored. For example, there are many older themes that neglect to theme the tab bar. That always irked me, because the color selection might otherwise be agreeable to my taste, but it makes the theme unusable unless I add extra customization to fill in the gaps. I vouch that the following theme packs are well-behaved.
;; https://github.com/catppuccin/emacs
(use-package catppuccin-theme
:ensure t
:defer t)

;; https://github.com/doomemacs/themes
(use-package doom-themes
:ensure t
:defer t)

;; https://github.com/protesilaos/ef-themes
(use-package ef-themes
:ensure t
:defer t)

;; https://github.com/ogdenwebb/emacs-kaolin-themes
(use-package kaolin-themes
:ensure t
:defer t)

After you've installed the themes you like, you can pick one to enable.
;; To prevent Emacs from asking you if you are sure, add :no-confirm.
(load-theme 'kaolin-temple :no-confirm)


>>108992836
I also highly recommend adding the following to your config, so that themes don't bleed through into each other.
(defun disable-loaded-themes (theme &optional no-confirm no-enable)
"Disable any loaded themes before enabling a new THEME.
This prevents overlapping themes; something I would rarely want.
THEME, NO-CONFIRM, and NO-ENABLE are ignored in this advice function."
(dolist (theme custom-enabled-themes)
(disable-theme theme)))

(advice-add #'load-theme :before #'disable-loaded-themes)
>>
>>108995053
>Claude told me
kek
>Do I install the regular package through dnf?
yes. if you actually want to maximize for performance you'd either have to use terminal emacs or compile with the lucid toolkit if you want gui, but that comes with its own tradeoffs like shitty font rendering and inaccurate colors
>>
>>108995205
Sometimes, you come across themes that are neither on MELPA or ELPA. They're usually only available through git. This is how you install them.
(use-package south-theme
:vc (:url "https://github.com/SophieBosio/south" :rev :newest :branch "main"))
>>
>>108995255
The screenshot from
>>108991103
is using lucid, and I think the font rendering is fine. I compiled my emacs with the following system-configuration-options value.
 "--with-x --with-x-toolkit=lucid --with-tree-sitter --with-dbus --with-native-compilation=aot --with-file-notification=inotify --with-mailutils --with-xml2 --prefix=/opt/emacs-30.2b CC=gcc-14"
>>
>>108994393
>A lot of CL code will run perfectly fine unmodified in Elisp and vice versa.
"Common Lisp has succeded".
-- CLTL2, Preface to the SECOND EDITION
>>
>>108995313
maybe it's because i'm on a high dpi screen, but fonts were noticeably blurrier than gtk and pgtk for me when i tried it a while ago
>>
File: file.png (85.6 KB)
85.6 KB
Sup guys
>>108986356
here again

This was hard at first but it kind of flattened out. I think this is usable for now. All I haven't configured for now, because I have to go out now, is LSP/Eglot. But well, I will try tomorrow. Hopefully the performance will be way better than with my Doom install.
This is also me, btw:
>>108994382
I installed from dnf with pgtk enabled, I'll see how it goes when doing some real work.
>>
>>108992836
>>108994158
themes aren't only for visual customizations. and besides, newfags who'd be confused by this should simply use M-x customize-themes instead of M-x load-theme
>>
>>108995255
>>108995313
>>108995411
i don't understand why the choice of toolkit would have an effect on fonts. the choice of font libraries is a different thing when you're configuring emacs
>>
>>108995643
it's mainly related to wayland scaling, i assume
>>
>>108994293
I’m pretty sure scheme can be… essentially… turned into common lisp by adding functions and macros.
>>
>>108995053
>Claude told me
Absolutely shameless, I love it
>>
So it turns out “all languages eventually rediscover Lisp” applies to Elisp rediscovering the logic of Common Lisp
Fucking brutal mog for RMS
>>
>>108995516
I wanted to suggest some of the packages you're showing in your screenshot, but I didn't want to overwhelm. I'm glad you found them on your own.
>>
Elfeed 4.0.0 was just released by the new maintainers.
https://github.com/emacs-elfeed/elfeed/blob/main/NEWS.org#version-400-2026-06-06
It looks like it got a lot of improvements.
The changelog from the last release is pretty long.
>>
>>108990823
CHICKEN Scheme already exists.
Add functions, macros, or srfis and you’re there; with the exception of the unnecessary and undesirable ‘[‘ ‘]’ adhocery.
>>
>>108996255
>So it turns out “all languages eventually rediscover Lisp” applies to Elisp rediscovering the logic of Common Lisp
>Fucking brutal mog for RMS
Yep. RMS is a very smart guy, but every human has a weakness. If he had let go of his angry ego, he would have written Emacs in Common Lisp and our current Emacs would probably run 3x or 10x faster, and every single module since the beginning of time would be using local variable scope by default.
>>
>>108995850
>I’m pretty sure scheme can be… essentially… turned into common lisp by adding functions and macros.
Yes but that wouldn't make too much sense.
You use Scheme when there's a Scheme implementation that suits your purposes. And Scheme implementations will always be easier to build than Lisp implementations; simply because Scheme requires less features.

It is true that Scheme is better designed, after all it's a newer language. But if you want an industrial-strength, battle-proven, write-today-run-for-decades language, Lisp fits the bill.

Scheme is like a sporty nimble BMW 2-cylinder motorcycle while CL is like a Mercedes G-class V12 powered offroader.
>>
>>108996653
Scheme predates Common Lisp. It wasn’t yet formalised when SICP was first being written.
>>
>>108996255
>>108996625
am i the only one who likes elisp's independence? i feel like it shields it away from a lot of bad trends. the vibe sloppers of the lisp world seem to be mostly prominent among the CL crowd, for example
>>
>>108996655
>Scheme predates Common Lisp.
Yes, but...
Common Lisp inherits and implements a ton of Maclisp (1966) which in turn directly descends from Lisp 1.5, the first widely distributed Lisp.

Scheme (1975) started from a clean slate.

Thus, Scheme is a newer design. Again, i'm firmly in the CL camp, but i need to be fair.
>>
>>108996720
>i feel like it shields it away from a lot of bad trends.
bad trends like global variable scope and no namespaces?
gotcha.
>>
>>108996730
you win some, you lose some
>>
>>108996625
His stubbornness is also why the GNU project exists. I’m convinced the concept of free software wouldn’t exist in its current form and wouldn’t have got nearly so far with a less obstinate person since he was fighting issues many other people didn’t see the seriousness of for decades. In many ways RMS and his ideas already won.
CL would have been the better choice for Emacs though definitely
>>
>>108996720
Probably not, but I haven’t seen much vibeslopped Lisp at all, so I don’t know what you’re talking about. I think CL has better features and Elisp unfortunately does make some downright deranged choices like having t being used when keywords would’ve made intent clearer. I do like all Lisps though.
>>
>>108996720
i vibeslop my emac config
>>
>>108996826
>>108996625
>>108996255

Keep in mind that GNU Emacs started in 1985, when common lisp standard was still in development. ANSI CL standard was released in 1991. And for some time CL implementations weren't as fast as they are today on modern hardware. We're talking the times of lisp machines, when you needed special hardware to run a featureful lisp like CL efficiently. And GNU system was meant to be usable on general purpose computers.
>>
>>108994481
>Is there a way to make orgmode bash run on the actual terminal emulator (vterm or eat)? I think that would be very neat

This is a very rough draft that sends the src block at point to vterm, one line at a time.
(defun org-babel-send-to-vterm ()
"Send the src-block at point to vterm one line at a time."
(interactive)
(if-let* ((vterm-buffer (get-buffer "*vterm*"))
(element (org-element-at-point)))
(if (eq (org-element-type element) 'src-block)
(let* ((lines (string-split (org-element-property :value element) "\n")))
(with-current-buffer vterm-buffer
(dolist (line lines)
(vterm-send-string line)
(vterm-send-return))))
(user-error "Not an org src block"))
(user-error "vterm not found or org element not found")))
>>
>>108991284 here. I ended up deleting the elpaca folder and so reinstalling all packages. Elpaca always fails to install/update some 5 or 6 packages with unclear errors, but if you then select them manually and ask it to install them it succeeds. After that, I run into the following curious problem:

Elpaca line from the installer in init.el:
(add-hook 'after-init-hook #'elpaca-process-queues)

No packages load, nothing gets set up according to use-package clauses, also, no errors or messages. Change it to:
(add-hook 'after-init-hook (lambda () (elpaca-process-queues) (elpaca-process-queues)))

Everything is set up correctly and works. Nani the fuck, elpaca??
>>
>>108999083
elpaca-after-init-hook is broken, probably related https://github.com/progfolio/elpaca/issues/545#issuecomment-4581346868
>>
>>108999113
That does look related. I guess for a package manager there's a lot of weird edge cases that are hard to find since everybody's got a differrent setup. Realistically speaking, I should try to replicate the bugs with a minimal init configutation and report them. But it seems like it would take a lot of time
>>
How are we doing, shemacs sisters?
>>
>>108967726
Anduril is very based
>>
>>108992458
>https://okmij.org/ftp/Computation/Make-functional.txt
Cool
>>
>>108999676
CEO smells like dirty ass. He wears clothes until the stench/crummyness bothers him, then throw them away and buy new ones. Disgenic mutant empowered by capital. Should be put down.
>>
>>109000970
>smells like dirty ass
are you talking about RMS doe
>>
I'm a bit embarrassed to ask but I'm a nocoder trying Guix, I have two machines (+VM that I test stuff on) and when making my config I got interested in adding machine specific configurations for the three specs in one file.
I was thinking about something like this:

(define my-hostname
(cond
((string=? current-machine "vm") "vm")
((string=? current-machine "machine_1") "machine_1")
((string=? current-machine "machine_2") "machine_2")
(else "default-host")))

(define my-grub-resolution
;; i define it here so i can plop my-grub-resolution in the actual grub config
(cond
((string=? current-machine "machine_1") '("1920x1080x32"))
(else '("1360x768x32"))))

(define my-machine-services
(cond
((string=? current-machine "vm")
(list
(service spice-vdagent-service-type)))
((member current-machine '("machine_1" "machine_2"))
(list
(service cups-service-type)
(service bluetooth-service-type
(bluetooth-configuration
(name my-hostname)
(controller-mode 'dual)
(experimental #f)
(multi-profile 'multiple)
(fast-connectable? #t)))
))
((member current-machine '("machine_1" "machine_2" "vm"))
(list
(simple-service 'extend-kernel-module-loader
kernel-module-loader-service-type
(append '("sch_fq_pie" "tcp_bbr" "ntfs3")
(if (string=? current-machine "machine_1")
'("nvidia" "nvidia_modeset" "nvidia_uvm")
'())))))
(else
'())))


This is just a snippet but it represents well what I'm thinking. Is this a stupid idea? Are there more efficient ways of achieving what I want?
>>
>>108980394
Memory fragmentation kills performance. Random state stored all over the place. Also it turns programming into a game of trying to recreate Plato's realm of forms instead of it being just data and things that act on that data.
>>
I just learned about M-X (execute-extended-command-for-buffer) after pressing it by mistake and I thought I'd say something about it
>>
>>109001162
No, I've actually met with the fucker.
>>
>>109001391
> cups-service-type
cups is dead after the security problems
>>
File: no.jpg (231.0 KB)
231.0 KB
>>109000970
https://www.youtube.com/watch?v=8BK7Kt6KcLg
>>
File: htdp-2e-cover.gif (96.2 KB)
96.2 KB
Im having second thoughts about learning from Touretzky rather than
>>108967280
>>SICP/HtDP
>>
>>109002507
THE BOOK DOES NOT FUCKING MATTER.
I LEARNED PROGRAMMING BY GOOGLING RANDOM SHIT AND JUST TRYING TO MAKE SHIT WORK.
I REMEMBER WRITING BATCH SCRIPTS IN MIDDLE SCHOOL WITH A BUNCH OF GOTO STATEMENTS, TRYING TO MAKE A TUI FOR A MISSILE LAUNCH PROGRAM THAT WAS PURELY INTENDED TO LOOK BADASS
>>
help:butlast
>>
>>108995603
Can you show me an example of a "partial" theme that's meant to be combined with another theme in a supporting role? It's an interesting capability, but I don't think it's used very much.
>>
>>109003302
this is the only one i know of
https://github.com/jonnay/org-beautify-theme

but what i meant in my other post is that themes can also be stuff like
https://cgit.git.savannah.gnu.org/cgit/emacs.git/tree/etc/themes/newcomers-presets-theme.el
>>
>>109003313
I didn't realize themes could set variables like that. I don't know if I like it. (I'm leaning toward "no", but I feel like I ought to give it a fair chance and play with it a bit before I make a judgement.) When I get around to building and running Emacs 31, I'll try this out.

Variable setting mechanism aside, I like the intent of the newcomers-presets theme. I agree with most of the settings I recognize. There are also many settings I don't recognize, but I'm guessing I'll find most of them reasonable.
https://sachachua.com/blog/2026/04/what-s-in-the-emacs-newcomers-presets-theme/
>>
>>109003641
I feel like saying it's for "newcomers" is a bit of a misnomer. I think Emacs veterans would appreciate a lot of these settings too. They may even already have many of them set in their own configs.
>>
>>109002702
>t.
https://www.youtube.com/watch?v=sKq_9_jPZL0
>>
>>109002702
Yeah cool story but the book does matter actually and it’s just not about teaching you to program
>>
File: baakubrokenu.png (354.4 KB)
354.4 KB
>AND OR
>not gates but syntax sugar for if statements control flow
GUAT DA FAQQING FAQ MANG I AM SPIRITUALLY BUCK BROKEN BY THIS BUDDHA CALCULUS INSANITy
>data is code/code is data
>emptiness is form/form is emptiness
Fucking weedsmoking ass McCarthy smoking weed with the Beatles in Area 51 India
>>
File: 1774571477591002.jpg (105.3 KB)
105.3 KB
>>109004348
(kill-p 'buddha)
;; -> t
>>
File: syntaxSugar.png (19.4 KB)
19.4 KB
>>109004348
here I thought these smart guy hieroglyphs were a greater source of truth than these boring truth tables that the parens foretold me
>>
File: JohnLisp.jpg (137.1 KB)
137.1 KB
>>109004367
>electrical wiring diagrams are a high level abstraction
>>
>>109004387
>your mom is a high level abstraction
>>
>>109004348
he's beginning to see
>>
>>109004387
>there is no higher or lower level abstraction
>no total nor partial ordering of anything
>And Jesus saith unto him, The foxes have holes, and the birds of the air have nests; but the Son of man hath not where to lay his head.
>all is void in the SICPa dharma
>>
File: drMario.png (1.2 MB)
1.2 MB
>Gemini:
If you want the visual step-by-step experience Touretzky promised, DrRacket is the only tool that actually delivers it.
When you use the "Stepper" in DrRacket, it actually highlights the specific part of your code it is currently evaluating, and it replaces that code with the result of the calculation. It is the "slow-motion playback" you were looking for
>>
>>109004768
It’s already in CL
>>
>>109004819
* (step (if (oddp 5) 'yes 'no))
YES
* * (step (if (oddp 5) 'yes 'no))
YES
* YES
* YES


wtf am I looking at
>>
>>109004768
I can get confidently bullshat by an LLM on my own, thank you.
>>
>>109004768
cider-enlighten-mode
flowstorm

Reply to Thread #108967280


Supported: JPG, PNG, GIF, WebP, WebM, MP4, MP3 (max 4MB)