[a / b / c / d / e / f / g / gif / h / hr / k / m / o / p / r / s / t / u / v / vg / vm / vmg / vr / vrpg / vst / w / wg] [i / ic] [r9k / s4s / vip] [cm / hm / lgbt / y] [3 / aco / adv / an / bant / biz / cgl / ck / co / diy / fa / fit / gd / hc / his / int / jp / lit / mlp / mu / n / news / out / po / pol / pw / qst / sci / soc / sp / tg / toy / trv / tv / vp / vt / wsg / wsr / x / xs] [Settings] [Search] [Mobile] [Home]
Board
Settings Mobile Home
/g/ - Technology


Thread archived.
You cannot reply anymore.


[Advertise on 4chan]


File: 98802359_p0.png (49 KB, 2397x1801)
49 KB PNG
>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

(set! prev-bread (quote >>108486131 ))
>>
I concur
>>
>>108561511
I M-x occur
>>
File: ultralisp.png (71 KB, 1082x598)
71 KB PNG
>>108534003
I put my scraping library up on ultralisp. I just wanted to see how hard/easy it was. (It was shockingly easy. I didn't even have to prove I was the owner of ggxx/scraper. I just had to make an account and give them a URL to my project.)
https://ultralisp.org/projects/ggxx/scraper

If you're setup to use ultralisp, you should be able to type this into the REPL.
(ql:quickload :scraper)
>>
lisp is the reigning champ of "i'll get around to it someday"
>>
As a CL library author, do you distribute your libraries on:
- quicklisp
- ultralisp
- both
- neither
?
>>
>>108562360
For some reason I thought ultralisp automatically pulled in things in quicklisp too, so if you distribute on quicklisp then it's also on ultralisp without having to do anything. Is that actually the case? I only use quicklisp + cloning random projects locally when I need updates or something newer than 6 months (thanks xach)
>>
>>108562871
>For some reason I thought ultralisp automatically pulled in things in quicklisp too
I don't know if that's true or not, but I have wondered to what degree they overlap. There's probably something one could type into the REPL to figure this out, but I'm not familiar enough with the ql and ql-dist APIs.
>>
>>108559798
His name Jeff?
>>
>>108562360
> quicklisp
> ultralisp
> superduperlisp…

Whata bunch of bullshit. I get my lisp library functions by C-c then M-y or S-Ins
>>
>>108559798
>has by far the most devoted and enthusiastic fans of any language, Rust included
>Lisp acolytes have lasted for over half a century now
Surely there has to be more use of Lisp in the future, right? Lisp fans have to become seniors and start making the choice to use Lisp eventually. Right? Right?
>>
In eshell, I found a new way to display JSON.
# instead of
jq . data.json

# do
json-read-file data.json

# make it an alias
alias jrf "json-read-file \$@*"

# and use it
jrf data.json

It'd be cool if I could pipe the sexp into another command as a sexp instead of a string, but I don't know how to do that.
>>
>>108562360
One problem with quicklisp is that the releases are manual and you might get one or two releases per year.
http://blog.quicklisp.org/
=vs=
Ultralisp can release multiple times daily if it notices changes to any git repos it's tracking.
>>
>>108565352
QL releases used to be more at the pace of about once per month. That was a nice sweet spot.
>>
I have to work bros.
being a senior engineer is such a fucking chore, I just want to design and implement cool shit, not do team management and sprint planning.
>>
>>108565352
>Ultralisp can release multiple times daily if it notices changes to any git repos it's tracking.
To make sure you're up to date, it's good to do this periodically.
(ql:update-dist "ultralisp")
>>
File: file.png (335 KB, 1233x1293)
335 KB PNG
Still fukcing around with completion, I changed to 31.1 to experiment with elisp scope accurate completions via elisp-scope.el (from emacs 31.1): https://github.com/emacs-mirror/emacs/blob/master/lisp/emacs-lisp/elisp-scope.el

Had to hack together a an analyzer for defstruct so It could identify where completions where valid, and I manually defined docstrings for it just to test, but it kinda works.
>>
File: coalton-0.2.png (37 KB, 720x206)
37 KB PNG
https://coalton-lang.github.io/20260312-coalton0p2/#the-future-of-coalton
https://github.com/coalton-lang/coalton
I don't see an 0.2 tag yet. Does anyone know what they're blocked on?
>>
>>108565794
I've been following it too, the main changes, or most of what was talked about in the article, have already been applied to the master branch, it's mostly bugfixing right now that's why there's no 0.2 tag yet. But like I said, it's already there just not tagged.

He's also taken on some additional work for a non-customizable coalton specific IDE, the idea behind it is to have an ide that requires no additional setup for programming in Coalton and CL, you just install it and be done with it, to decrease onboarding time for newcomers and people that want to try it.
>>
>>108562360
just put it on github and users can install it themselves
>>
>>108565962
I've no idea how to use local cloned repo CL libraries. Any tips?
>>
>>108566092
in sbcl you just setup the necessary variable that points to the cloned CL library
as simple as that
>>
>>108566153
I'm retarded, mind giving an example?
I'm also using SBCL.
>>
>>108566092
Just setup quicklisp, then git-clone whatever doesn't quickload into ~/quicklisp/local-projects/ and you can quickload them like anything else, add them to asd dependencies, and so on. Works for you own projects too.
>>
>>108565794
https://github.com/coalton-lang/coalton/commit/9dc41b7c7230e540cd872f7b04cd273e39efda80
Man he really got burned by fset
>>
>>108566092
This is actually really easy. It's just a matter of creating a symlink in ~/quicklisp/local-projects to wherever you cloned the repo.
cd ~/quicklisp/local-projects
ln -s ~/path/to/cloned-project

Then from your REPL, you can say:
(ql:quickload :cloned-project)
>>
>>108566176
For some reason, it's ~/.quicklisp/local-projects on my laptop. My desktop has it setup in ~/quicklisp/local-projects. Weird, but whatever.
>>
>>108566176
>>108566158
>>108566153
>>108566184
I see I see, thanks bros
>>
>>108566170
Robert Smith is really smart. I feel like I need to do better.
>>
File: screenshot271.png (19 KB, 764x194)
19 KB PNG
>>108566225
Not just smart but also productive. And hasn't randomly rage-quit the CL ecosystem after years of molding a lot of it. (Though fare might come back if someone gives him enough money.)
>>
File: fare.png (350 KB, 1280x1309)
350 KB PNG
>>108566319
>fare
This guy?
https://github.com/fare
>>
I've been having some fun with eshell prompts.
;; https://www.emacswiki.org/emacs/EshellPrompt#h5o-4
;; replaced reduce with cl-reduce
(defun shortened-path (path max-len)
"Return a modified version of `path', replacing some components
with single characters starting from the left to try and get
the path down to `max-len'"
(let* ((components (split-string (abbreviate-file-name path) "/"))
(len (+ (1- (length components))
(cl-reduce '+ components :key 'length)))
(str ""))
(while (and (> len max-len)
(cdr components))
(setq str (concat str (if (= 0 (length (car components)))
"/"
(string (elt (car components) 0) ?/)))
len (- len (1- (length (car components))))
components (cdr components)))
(concat str (cl-reduce (lambda (a b) (concat a "/" b)) components))))

(cl-defun my/eshell-prompt-fn (&key (highlight-color "#f06543") (path-color "#e1b07e") (error-color "#edb230"))
"Return a function that defines an eshell prompt."
(lambda nil
(concat
(propertize (format-time-string "[%T] ") 'face `(:foreground ,highlight-color))
(propertize (shortened-path (eshell/pwd) 40) 'face `(:foreground ,path-color))
(propertize (format " [%d]" eshell-last-command-status) 'face (if (= 0 eshell-last-command-status)
`(:foreground ,highlight-color)
`(:foreground ,error-color)))
(propertize " λ " 'face `(:foreground ,highlight-color)))))

To try it out:
 ;; save the original prompt in case you want to go back
(setq original-prompt-function eshell-prompt-function)

;; set new prompt
(setq eshell-prompt-function (my/eshell-prompt-fn :highlight-color "#7ebc89" :path-color "#607466" :error-color "#fe5d26"))

Play with the colors. https://coolors.co/
>>
File: file.png (20 KB, 469x276)
20 KB PNG
>>108567569
>>
>>108567569
>
(car components)

lisp is so cute
>>
>>108566092
I'll do you better than >>108566176
If you look at the ASDF manual C-h i m asdf, in chapter 4 you can find this:
  There are a number of different techniques for setting yourself up
with ASDF, starting from easiest to the most complex:

* Put all of your systems in one of the standard locations,
subdirectories of
* '~/common-lisp/' or
* '~/.local/share/common-lisp/source/'.
If you install software there, you don't need further
configuration.(1)

That is to say ASDF searches these directiories for asdf systems by default. So just git-clone to ~/common-lisp and then do (require 'asdf) (asdf:load-system :{system name ie the name of the .asd file})
See the manual for further instruction.
>>
File: 2026-04-09_18-08-32.png (271 KB, 1110x1704)
271 KB PNG
>>108559798
>Browse imageboards in Emacs Org-Mode
>https://github.com/eNotchy/4g

Yotsuba & Yotsuba B themes for Emacs
https://github.com/Senka07/yotsuba-emacs-theme
>>
>>108569764
(info "(asdf) Configuring ASDF to find your systems")
>>
>>108557372
> I can just use jupyter lab with a lisp backend?
Well well well
Look at this: https://github.com/yitzchak/common-lisp-jupyter
>A Common Lisp kernel for Jupyter along with a library for building Jupyter kernels, based on Maxima-Jupyter by Robert Dodier which was based on cl-jupyter by Frederic Peschanski.
>>
>>108570569
>>108557157
>>
I came up with an eshell alias that one can use whenever you feel tempted to use a pager like less which doesn't work inside eshell. Since the eshell buffer is already scrollable, the only thing you need to do is move the cursor to the beginning of the command output and then scroll as usual.
alias page "eshell-previous-prompt; eshell-next-prompt"

If you're an evil user, you might also want to switch to normal state.
alias page "eshell-previous-prompt; eshell-next-prompt; evil-normal-state"


Usage:
ls /usr/bin; page
# This is an alternative to `ls /usr/bin | less` .
>>
>>108570075
noice
>>
I just wrote a little CL utility function that wraps pandoc. Maybe someone else will find it useful.
(defun pandoc (input &key (from "html") (to "plain"))
"Convert `input' string using pandoc.
The default is to convert from html to plain(text)."
(with-input-from-string (s input)
(uiop:run-program (format nil "pandoc -f ~a -t ~a" from to) :input s :output :string)))
>>
>>108573000
Ah nice I was doing some stuff with the scraper code that was shared recently and wanted to convert it to org-mode.

I also have some stuff for those who want to test out futur.el in emacs or want some reference material on making stuff with it:
>https://github.com/gggion/futurama.el

Cleaned up some of my experiments into that repo, mainly 2 for now:

- ob-futur :: a futur-async header for elisp source blocks in org-mode. Main benefit is being able to get the callback results from futur sexps, another one is executing other elisp code asynchronously, with the caveat of not having access to current emacs context since all it does is wrap the elisp into a futur process.
>NOTE: requires ob-futur-mode to be enabled
example
#+begin_src elisp :futur-async bind
(futur-elisp--funcall
(lambda ()
(let ((primes nil)
(n 2))
(while (< (length primes) 10000)
(when (cl-loop for d from 2 to (cl-isqrt n)
never (zerop (% n d)))
(push n primes))
(cl-incf n))
(format "Found %d primes, largest: %d" (length primes) (car primes)))))
#+end_src


First the sourceblock shows
>: Executing asynchronously...
then after a couple seconds the callback arrives
>: Found 10000 primes, largest: 104729

So it's useful for testing out futur code in org.

- futur-shell.el :: this is an attempt at getting the same functionality as in shell-command and async-shell-command but with futur.el, not that useful other than reference but I might expand it, still thinking about this.
>>
>>108573000
very nice
>>
>>108573199
I tried to manually load ob-futur.el, but it got stuck on this:
(require 'futur-elisp)

I have futur itself installed via MELPA.
>>
>>108575123
>MELPA
actually, via ELPA.
https://elpa.gnu.org/packages/futur.html
>>
File: file.png (146 KB, 2140x326)
146 KB PNG
>>108575123
>>108575131
Weird, maybe it's outdated?
futur-elisp was a rename from futur-client.el.
>>
>>108575252
Did you install futur from git?
I double checked the version on ELPA by downloading the tar ball, and it doesn't have the renamed version yet. A release was made on March 22nd, and the rename happened on March 28th.
>>
>>108563469
gaylisp
>>
>>108575599
Nah I just did use-package futur and that's it.
maybe emacs version? im on emacs 31.
>>
>>108565583
> run update one per second
I can’t wait to get my latest ‘cadr’ implementation with variadic polymorphic homomorphologies and heterogeneous set-associative transitive macros.

Why not just use npm/js if you like random shit written by internet randos continually dumped on your machine.

t. internet-rando
>>
>>108575729
I'm on 30.1, but I don't know if that's the reason. I'm not gonna worry about it for now though.
>>
>>108575783
yeah no prob, if you get it working let me know, maybe I should add a requirements/setup section in the readme.
>>
File: 1768475775577098.png (34 KB, 180x145)
34 KB PNG
Has anyone here used GNU Recutils? The Emacs mode for it seems pretty good. I'm thinking of using it for my goon collection.
>>
relationship ended with cons cells
now tuples are my best friend
>>
>>108576829
>tuples
I recently learnt about them when looking at Coalton, I was trying to figure out why there where functions called tuple3 tuple4 and tuple5
>>
>>108576801
what the fuck
>Why is the logo depicting a pair of copulating turtles?
>Ask ams@gnu.org.

>What is the name of the turtles?
>They are called Fred and George. And yes, they are both male.

>Why those names?
> 16:40 <jemarch> How would you name two (paired) gay turtles?
>16:42 <someone> Fred & George?
>>
>>108576829
> cons to tuple
that's like switching from your IRL flesh and blood real girlfriend to a AI chatbot
>>
File: 1750707083733449.gif (2.35 MB, 498x431)
2.35 MB GIF
>>108576871
>>
>>108576801
Damn, this looks exactly like what I need right now
>>
>>108576858
Now in v2, functions that used to return tuples will return multiple values instead, bypassing the need for a tuple explicitness. This is better imo, much of the time tuples like lists are a code smell outside of implementation details for a more meaningful data object.
>>
>>108576871
Oh I get it lol
Fred and George: FAG
>>
>>108577542
>Damn, this looks exactly like what I need right now
https://www.youtube.com/watch?v=oaYSZbmc04Y
>>
What's the public sentiment on Pantherx?
Anything terrible I should know about?
>>
>>108563469
Do you put all your code in CL-USER too?
>>
>>108575766
I trust the randos that haven't been filtered by parentheses a tiny bit more.
>>
Self-hosted web analytics system written in CL
https://github.com/atgreen/happening
>>
>>108570569
A convenient bundle:
https://github.com/Lisp-Stat/cl-jupyter-image
by:
https://lisp-stat.dev/blog/2026/03/09/getting-started/
>>
>>108565530
Agile is a cargo cult
>>
M-x mouse-avoidance-mode
>>
;; https://www.gnu.org/software/emacs/manual/html_node/eshell/Redirection.html
(info "(eshell) Redirection")


I learned about the virtual target /dev/clip the other day. Whatever that gets redirected there gets put in your systems clipboard. It's kinda handy sometimes.

# Puts `uname -a` into your clipboard
uname -a > /dev/clip

# Puts `uname -a` into your clipboard without a trailing newline
s-chomp ${uname -a} > /dev/clip


The second example requires s.el to be installed.
https://github.com/magnars/s.el
>>
I want plan 9 but lisp/emacs
>>
>>108585388
string-trim does the job here
string-trim ${uname -a} > /dev/clip
>>
>>108585902
I wasn't sure if that would be enough. Good to know.
>>
File: file.png (5 KB, 218x82)
5 KB PNG
(set-display-table-slot standard-display-table 4 (vector
(make-glyph-code ?⋰ 'error)
(make-glyph-code ?⋱ 'error)))


https://groups.google.com/g/gnu.emacs.help/c/4oT_T3coa6Q
>>
>>108583862
I wish browsers had this
>>
>>108587129
doesn't firefox hide the mouse pointer when you type something in?
>>
>>108587550
I didn't notice before, but I tried it and it did hide the pointer.
>>
>gnu.org is still dead
What's happening?
>>
>>108588933
It loads for me.
>>
>>108588933
they are under attack from AI niggers for a while now.
>>
>>108588933
>>108589840
they might have blocked your ip desu since they are opting to manually root out ai scrapers instead of using glownigger cuckflare or the troony anubis
>>
How would you do this in Elisp?
;; I want to turn this:
(setq input "This is some text [] more text [][] and a bit more []")
;; into this:
(setq output ("This is some text "
"[]"
" more text "
"[]"
"[]"
" and a bit more "
"[]"))
>>
File: 1376878274830.png (62 KB, 270x281)
62 KB PNG
>>108590370
(defun fuck (input string)
(with-temp-buffer
(insert input)
(goto-char (point-min))
(let ((len (length string))
(previous-pos (point))
(result nil))
(while (search-forward string nil t)
(push (buffer-substring-no-properties previous-pos (- (point) len))
result)
(push string result)
(setq previous-pos (point)))
(if result
(nreverse result)
(list input)))))


if you want nil instead of list of one element when there's no shit to search, modify the last if
it took me less time to write this than to find an image
>>
Do I need to master Emacs to enjoy Lisp?
>t. eVil person
>>
>>108590491
not really, a bunch of clojurers use vscodium and other drugs.
>>
>>108590467
That's an interesting approach. I wouldn't have thought to use a temporary buffer.
>>
>>108590370
A functional approach
(cl-remove-if (lambda (s)
(equal s ""))
(cl-reduce (lambda (m a)
(append m (list a "[]")))
(split-string input (rx "[]")) :initial-value '()))
>>
File: 1487632211054.png (452 KB, 1059x720)
452 KB PNG
>>108590533
this doesn't work on the input he provided; it gives two [] at the end
doesn't work on strings that don't have the separator either
>>108590533
you should, that's the approved way of doing text manipulation in emacs
strings are immutable, buffer text isn't
>>
>>108590491
>Do I need to master Emacs to enjoy Lisp?
On the flip side, I don't think you can master Emacs without being at least competent in Elisp. Using Emacs without learning Elisp is like moving to a foreign country without learning the language of the country.

I think Elisp competency begins with:
>Docs: C-h f [function] C-h v [variable] C-h k [keybinding] C-h m [mode] M-x ielm [REPL]
from the OP.
Learning to ask Emacs questions about itself is an important skill to develop. Some people substitute this by asking LLMs these days which does work to an extent, but it's not a complete replacement. Sometimes, you need to query the current state of your Emacs, and an LLM wouldn't be much help there. Anyway, when you start asking Emacs questions about itself, you'll find out that it can tell you a lot.
>>
>>108590370
(defun string-split-with-delimiters (string separators &optional omit-empty)
(let ((acc nil)
(start 0))
(while (string-match separators string start)
(unless (and omit-empty (= start (match-beginning 0)))
(push (substring string start (match-beginning 0)) acc))
(push (substring string (match-beginning 0) (match-end 0)) acc)
(setq start (match-end 0)))
(unless (and omit-empty (= start (length string)))
(push (substring string start (length string)) acc))
(nreverse acc)))
>>
>>108590623
Strings are not immutable, e.g. aset, clear-string, set-text-properties, etc.
>>
>>108590370
how I woulda done it:
(defun interpose (separator sequence)
(cdr (mapcan (lambda (elt) (list separator elt))
sequence)))

(defun fuck (str separator)
(thread-last
(regexp-quote separator)
(string-split str)
(interpose separator)
(seq-remove #'string-empty-p)))

(cl-assert (equal output (fuck input "[]")))


>>108590491
Clojure has very good support in VSCodium (Calva) and IntelliJ (Cursive), and okay support in neovim (Conjure)
>>
File: earth-can.jpg (199 KB, 1024x1536)
199 KB JPG
>>108591443
>mapcan
>>
>>108590803
why prefix everything with (string-.... ...) ????
can't you just call it "split" and
(1) have it figure out whether it's a list, string, or whatever and split those?
(2) can't the "-with-delimiters" thing be replaced with optional flags/arguments?

I'm thinking that would be cleaner.
>>
>>108592147
>why prefix everything with (string-.... ...) ????
because he's using a regexp function to split a string? what kind of a question is that
>have it figure out whether it's a list, string, or whatever and split those?
that was not what op requested, it would run slower because of dispatching, and would require more code
>can't the "-with-delimiters" thing be replaced with optional flags/arguments?
he's calling it -with-delimiters because there is already a `string-split' function in emacs
>>
>>108589981
At one point the fsf was blocking 5 million IPs and ranges.
I'm pretty sure they're also getting DDoS'ed (in a plausibly-deniable way) by some big companies that have some politically or economical differences with free software.
At least one of the AI companies were getting employees to run internet slurping shit from their homes because their own IPs are permabanned.

They're still going down the chain and slowly getting the up-stream providers to block them but it takes time and obviously upstream providers don't want to do any work whatsover. I hope they start publishing the names and releasing the block lists so everyone else can use them too. win-win.

then we can implement a universal ban-list.
>>
>>108590467
>>108590553
>>108590803
>>108591443
I learned a few new things from all these different approaches. Thanks to all of you for coming up with solutions.
>>
I want to like elisp's named-let, but every time I set about to use it I end up using some other construct that makes it less convoluted.
>>
>>108593024
I've used it a few times for iteratively wrapping forms in macros, for example
(defmacro my-plet* (varlist &rest body)
(declare (indent 1))
(cl-with-gensyms (success)
(named-let protect ((binding (car (last varlist)))
(rest (reverse (cons success (butlast varlist))))
(body `(prog1 ,(macroexp-progn body)
(setq ,success t))))
(pcase binding
('nil body)
(`(,var ,val ,cleanup)
(protect (car rest) (cdr rest)
`(let* ((,var ,val))
(unwind-protect
,body
(unless ,success ,@cleanup)))))
(_ (protect (car rest) (cdr rest)
(macroexp-let* (list binding) body)))))))
>>
>>108593161
I messed with this before posting and broke it, it should be ,cleanup and not ,@cleanup
>>
Is there any way to generate function definition from declaration in .h into .cpp file in Emacs?
clangd should be able to do that but eglot just says "No code actions here"
>>
File: 1755243212867525.jpg (1.01 MB, 2048x2048)
1.01 MB JPG
>>108590370
(defun f (&rest x)
(pcase x
(`(("[" "]" . ,b) "") (cons "[]" (f b "")))
(`(("[" "]" . ,b) ,c) (cons c (cons "[]" (f b ""))))
(`((,a . ,b) ,c) (f b (concat c a)))
(`(,_ "") '())
(`(,_ . ,c) c)))

(defun g (x)
(mapcar (lambda (x) (make-string 1 x)) (string-to-list x)))

(defun h (x)
(f (g x) ""))

(h "this is a test[] [] ok")

consmaxxing
>>
>want to generate an OPDS feed for my server to download books from my ereader
>calibre exists but it sucks and I don't need even a hundredth of its functionality
>look for alternatives
>they're all bad and overengineered
Alright I'll do it myself... the hardest part might be writing a script to migrate a Calibre library to it
Is Clack still the go-to HTTP server?
>>
File: guIDE_logo.png (3 KB, 274x86)
3 KB PNG
Interesting.
>guIDE is a full-featured IDE for GNU Guile that runs entirely in the browser. It compiles and executes Scheme code via a Guile 3.0 WASM runtime (Emscripten + pthreads), so there's nothing to install — just open the URL and start coding.
https://guileide.dev
https://gitlab.com/superkamiguru/guile
>>
>>108590370
My humble generalization to all sequences
(defun split-by-subseq (seq subseq &optional omit-subseq)
"Split SEQ using SUBSEQ as a delimiter, return the list of sub-sequences.
If OMIT-SUBSEQ is non-nil, the delimiters are omitted from the list of
split sub-sequences.

SUBSEQ cannot be an empty array; empty arrays don't have a 0th element."
(named-let iter
((s seq)
(indices (reverse
(mapcar (lambda (i) (cons i (+ i (length subseq))))
(seq-positions seq (seq-elt subseq 0)))))
splits)
(cond
;; nothing left to iterate over
((and (= (length s) 0) omit-subseq)
(seq-difference splits (list subseq)))
((= (length s) 0) splits)
((null indices) (iter nil nil (cons s splits)))
;; index is not the start of a SUBSEQ
((or (> (cdar indices) (length s))
(not (seq-set-equal-p
subseq (seq-subseq s (caar indices) (cdar indices)))))
(iter s (cdr indices) splits))
;; S ends with SUBSEQ
((= (cdar indices) (length s))
(iter (seq-subseq s 0 (caar indices))
(cdr indices)
(cons (seq-subseq s (caar indices)) splits)))
;; S contains SUBSEQ but doesn't end with it
(t
(iter (seq-subseq s 0 (caar indices))
(cdr indices)
(append (list (seq-subseq s (caar indices) (cdar indices))
(seq-subseq s (cdar indices)))
splits))))))
>>
>>108566170
FSet was innocent https://old.reddit.com/r/Common_Lisp/comments/1sk2nsl/fset_v242_champ_bags_and_v10_of_my_book/ofw5wdg/
>>
The new fset book is interesting and something to aspire to for documentation alone: https://fset.common-lisp.dev/Modern-CL/Top_html/index.html
>>
>>108566155
it's actually asdf
>>
>>108596080
>Enraged, I deleted FSet from my project and used a simple balanced tree instead.
That is quite funny
>>
>>108566155
>>108569764
>>
Lisp would be 100x more popular if instead of making yet another lisp or some functional gibber jabber you autists did one (one) decent and maintained web library
>>
>>108566176
you can also add custom path to your lisp project by (push)ing it to
asdf:*central-registry*
variable
>>
>>108596089
what is it with these atrocious colors, AND the annoying theme chooser menu that follows you around everywhere.

Autismos need to work on gaining enough self-awareness to realize that from the perspective of most people, they have a very poor sense of aesthetics, and should leave this sort of design work to chatgpt.
>>
>>108594001
>Is Clack still the go-to HTTP server?
The combination of clack + woo is the most performant option by far.
https://github.com/fukamachi/woo
>>
>>108596828
Filtered
>>
File: screenshot273.png (125 KB, 838x621)
125 KB PNG
>>108596828
Mine is a nice green, no widget since I use noscript.
>>
Thanks!
>>
>>108597627
That's his default light theme for that document.
https://gitlab.common-lisp.net/fset/fset/-/blob/master/Doc/Modern-CL/fset.css?ref_type=heads#L5-16
:root {
--bg: #CCDDCC;
--fg: #111111;
--link: #1a5c8a;
--link-visited:#5b3a8a;
--nav-bg: #b8ccb8;
--nav-border: #88aa88;
--code-bg: #ddeadd;
--code-border: #aaccaa;
--def-bg: #c4d8c4;
color-scheme: light;
}
>>
>>108596089
I'm trying to rebuild this documentation locally. Can anyone get this Makefile to work?
https://gitlab.common-lisp.net/fset/fset/-/blob/master/Doc/Modern-CL/Makefile?ref_type=heads
My texi2any is not happy with the content in the checked out texi files.
>>
File: dark.png (448 KB, 975x1963)
448 KB PNG
>>108597825
I made my own dark theme and applied it with the Stylus browser extension.
:root[data-theme="dark"] {
--bg: #1c1b19;
--fg: #d8d0c0;
--link: #e08060;
--link-visited:#8a9868;
--nav-bg: #2e2d2a;
--nav-border: #c09058;
--code-bg: #222120;
--code-border: #7890a0;
--def-bg: #252422;
color-scheme: dark;
}

I based it off of these colors.
https://embertheme.com/
>>
After using Emacs for years, I've finally finished reading the official manual. I'm going to start reading Xah's tutorial soon. What am I in for?
>>
>>108598693
that's quite nice. More readable than gruvbox while retaining the same vibe.
>>
>>108598696
What did you learn?
>>
>>108598283
It gives me a million errors relating to links and "not found Afterword.texi"
He might have accidentally forgotten to commit that file to the repo. Not sure what the link stuff is about.
>>
>>108599028
>that's quite nice. More readable than gruvbox while retaining the same vibe.
I also thought it felt like a refined gruvbox. I was surprised by how much I liked the color combinations. Apparently, he used CIELAB color space to maintain a constant "Lightness" on all the colors. I started experimenting with the CIELAB color space too after that.
https://rufflewind.com/_urandom/colorpicker/
https://en.wikipedia.org/wiki/CIELAB_color_space

>>108599173
Same. I was hoping I could turn it into an info file I could read inside Emacs, but that will have to wait.
>>
>>108599106
Little of true value. M-r is cool.
>>
File: xahlee.png (1.11 MB, 967x1620)
1.11 MB PNG
>>108598696
>I'm going to start reading Xah's tutorial soon. What am I in for?
lots of sexp time

https://www.youtube.com/@XahLee/streams
He hasn't streamed in 2 weeks though. Is he OK?
>>
>>108596828
>>108597627
>>108597825
>>108598693
why not just use EWW
>>
>>108599355
eww is a fine option. I was just in the mood to play with CSS.
>>
>>108596588
Playing musical chairs with half-baked libraries is just how webdev works.
>>
>>108598693
>>108599028
I sent him a pull request, and he added the ember theme to his book.
https://gitlab.common-lisp.net/fset/fset/-/blob/master/Doc/Modern-CL/fset.css?ref_type=heads#L57-68

>>108599173
It turns out I had an old version of texinfo. I was on 6.8, but he was using 7.2. After using a newer version, everything worked. He also added the missing Afterword.texi.
>>
Common Lispers should embrace the modern day Lisp machine which is Guix and Scheme. We got fibers and are packaging the entire world.
>>
>>108601186
I embraced Guix. It's nice. I've got some profiles for Lisp stuff and Emacs, and I can even make Guix compile an SBCL core with half of all Lisp packages in it, which is quite fun.
I still write everything in Common Lisp, of course. Scheme is just not that good.
>>
>>108601232
That's cool. I started on CL with SBCL but the language hasn't been updated in over 30 years. Scheme is the closest in simplicity to untyped lambda calc and is still being updated. It was the better choice for the modern day Lisp machines.
>>
>>108594351
>https://guileide.dev/try
Very nice. Impressive how it's looks better than my Emacs + Geiser setup.
>>
>>108601273
I don't find incessant updates or simplicity all that appealing (and frankly, those are two contradictory goals). Scheme is just not very practical for writing real software.
>>
>>108601186
i'm not using guile until it has a real alternative to slime/sly
>>
>>108601429
Implementations are free to take what they want from the revised standards. Is the modern day Lisp machine not real software? I all I write with it is real software. Algo trading programs, web apps with clientside code in Scheme with Hoot, etc.

>>108601450
Slime was cool for the introspection. Geiser works great for me.
>>
(defun sunlightp ()
(let* ((sr/sn (solar-sunrise-sunset (calendar-current-date)))
(sunrise (caar sr/sn))
(sunset (caadr sr/sn))
(time (decode-time (current-time)))
(fractional-hour (+ (float (caddr time))
(/ (float (cadr time)) 60.0))))
(< sunrise fractional-hour sunset)))

Requires calendar-longitude and calendar-latitude to be set. I was surprised at not being able to find something like this with a quick online search so enjoy.
>>
>>108592197
good idea... here's your language
(display-ascii-string "foo")
(display-sixty-four-bit-integer 42)
>>
File: file.png (317 KB, 1298x2282)
317 KB PNG
Gotta say, one of my favorite things in using ob-duckdb is doing `:output buffer` on big tables and decreasing font size until I can only see a texture.
>>
>>108601737
How do you find writing web stuff in scheme? Do you use it with Clojure or entirely on its own or artanis or what?
>>
I just spent a some time figuring out this basic use case for the CL verbose library. Basically, I wanted to log messages to stdout in a script context. (I'm not in a REPL.)
https://codeberg.org/shinmera/verbose

Inside the REPL, it was printing log messages as expected, but outside of the REPL (in a script) logging produced no output until I did something like:
(v:define-pipe ()
(v:stream-faucet :output *standard-output*)
(v:level-filter :level :debug))

I'm not entirely sure, but I think this pipeline setup is done for you automatically in a REPL context but not elsewhere.

PS: It takes an unusually long time to POST a message. What happened to 4chan?
>>
>Zmacs (and most other Lisp machine text editors)
>Primarily mouse driven outside of putting the text in
>GNU+Emacs
>Primarily keyboard driven
Any Lisp historians know why this is?
>>
>>108604701
>>108604701
Not a lisp historian but I guess its unix cargo cult.
I honestly wish the Emacs (and lisp) world would try to get as far away from the unix paradigm as possible.
>>
In chinese-py input method, how do I insert words like 女, that are represented with ü? When I type N-¨-U or N-y-u it decides on a char and just shits itself.
>>
>>108604701
Emacs is only keyboard driven if you want it to be. It has first class mouse support.
I think the reason there's a keyboard centric culture around it is mostly convenience. Zmacs was a lot simpler and doing complex key combinations is easier than mouse when you get used to it
>>
>>108606204
v = ü in chinese-py, so nv gives you 女. it's weird that its help page doesn't mention that, or really anything useful
>>
TIL that you can't write a recursive function with cl-flet*. When you try to recurse, the name of the function doesn't exist yet.

This works:
(defun my-factorial (n)
"Calculate the factorial of N."
(cond ((<= n 1) 1)
(t (* n (my-factorial (- n 1))))))

(my-factorial 5)


This doesn't work.
(cl-flet* ((flet-factorial (n)
(cond ((<= n 1) 1)
(t (* n (flet-factorial (- n 1))))))))
(flet-factorial 5))


...or am I doing something wrong with cl-flet*?
>>
>>108607219
The reason I used cl-flet* in the first place was because I wanted to define a function inside of an eshell script that didn't add a new global function to my running emacs instance. I wanted to keep some functions local to the eshell script.
>>
>>108607219
Another thing I couldn't do inside an eshell script is used named-let. It requires lexical scoping, and I have no idea how to turn on lexical scoping in an eshell script. In regular Elisp you can add a file local variable to the top of your file with:
;; -*- lexical-binding: t; -*-

I don't know what would work for eshell scripts though.
>>
File: 1604904420645.png (533 KB, 579x673)
533 KB PNG
>>108607219
well, you can't write a recursive function with flet in common lisp either
you should use labels, or in case of emacs lisp, cl-labels. it even tells you that in the docstring
>>
>>108606323
lifesaver thanks
>>
>>108605420
Mouse-driven interfaces suck unless it's specifically some kind of graphical/spatial task.
The keyboard-first design is far and away the best feature of Emacs.
Not sure why you're even in this thread.
>>
>>108605420
That actually does make sense, I hadn't thought that Stallman might be trying to ape something other than the normal Lisp text editors.

>>108606229
>It has first class mouse support.
In the same way that vim does, sure. But it's not really "first class" by any reasonable metric. I highly recommend trying out zmacs in opengenera if you haven't.
>>
Got sidetracked AGAIN.
making a helpful-like package for the factorio API docs.
> https://lua-api.factorio.com/latest/prototypes.html

First step into making Factorio mods in Fennel (because I want to).
>>
>>108608465
Mouse-centric interfaces suck. Keyboard-centric interfaces also suck. An interface should go to great lengths to make both input devices as highly polished as possible.
The only reason Emacs doesn't do this is because Stallman absolutely BEEFED the core abstractions of the system. Sanity would be object-presentation-interaction forming the philosophical basis of all structure. A foundation built entirely around buffers necessitated a regression into psuedo-modal editing. The end result is pretty good compared to actual toxic waste like vim and nano, but it lives in the shadow of things like zmacs.
>unless it's specifically some kind of graphical/spatial task.
Screen editing and working GUIs are both inherently graphical and spatial tasks. Go use ed and tell me how great that experience is. No? Exactly.
>>
Gott I wish fltk worked with a lisp
Can't wait for JankLang
>>
>>108596828
>He used the color BLUE!!!! What an AUTIST!! I can't use a simple drop-down menu and that's NOT MY FAULT!!
Anon have you considered that YOU might be autistic?
>>
>>108607403
I looked at so many docstrings last night, but I overlooked that one. I looked at the docstring for cl-flet* and didn't look at the docstring for cl-flet which was more informative. I ended up giving cf-labels a try, and it worked perfectly. (Thanks for the tip.)
>>
>>108609287
https://www.peter-herth.de/ltk/
You really should just use racket gui or something like that though, if you don't care what lispy language you're using.
>>
>>108609918
Thanks I'm going to try nodgui. Hopefully it's fast enough when it's compiled.
>>
>>108596089
I liked this section where he compared immutable data structures from other languages.
https://fset.common-lisp.dev/Modern-CL/Top_html/Critiques-of-Other-Libraries.html
>>
>>108609947
tk has been running responsive GUIs in tightly constrained places since the 1990s and has only gotten faster with time. if you do end up running into performance issues, it's probably a sign you're better served by an immediate mode framework. lisp is one of the best candidates for rolling your own, you're basically just walking a tree to move a cursor around and issue commands to a renderer.
>>
I just learned a lot about dired.
https://www.youtube.com/watch?v=hshWBtefSmE
>>
File: 2026-04-15_13-26-45.png (726 KB, 948x2065)
726 KB PNG
>>108590467
I ended up using a variation on this idea. I was originally going to take a more functional approach, but my end goal (which I didn't mention) was to create a buffer with images in it, and manipulating a buffer this way felt easier than constructing a buffer from pieces. The "[]" was how pandoc rendered images when converting from html to plain text. Instead of building a data structure, I replaced the match with "" and then inserted an image into the buffer.

I'm really enjoying being able to see graphics in eshell.
>>
>>108607257
Very strange, even when lexical-binding is activated, named-let gives an error.
Welcome to the Emacs shell

~ $ echo $lexical-binding
t
~ $ (named-let test nil t)
‘named-let’ requires lexical binding
~ [1] $

Maybe it's the way eshell runs Lisp forms. I'll look into it.
>>
>>108611030
Dynamic binding seems to be baked in pretty deep. eshell-do-eval is where to look and it is making all its eval calls with the lexical binding argument nil and it handles let forms by pulling apart the binding forms, evaling the valueform and doing the bindings with cl-progv before recursing. Presumably the way it recursively walks the form is what makes it a pain to convert to lexical-binding.
>>
>>108611314
>eshell-do-eval
I thought so too, but the culprit is actually eshell-exec-lisp, which is the only other function in esh-cmd.el which uses eval. Simply redefining it by adding the LEXICAL arg to its eval form fixes the problem.
Welcome to the Emacs shell

~ $ (named-let test nil t)
t
~ $ cat /tmp/eshell-script
(named-let factorial ((n 10) (acc 1))
(if (<= n 1)
acc
(factorial (1- n) (* n acc))))
~ $ source /tmp/eshell-script
3628800
~ $
>>
>>108611314
It's weird how there's no popular stand-alone shell that is lisp-based. It seems like an almost ideal language for shell scripting.

The 'rc' shell from plan9 (the "scheme" to bash's "CL" implementation) is pretty rare to see in the wild.

How hard would it be to provide a stand-alone execution environment for eshell.el?
>>
>>108609968
>>108609968
>>108609968
>>108609968
https://fset.common-lisp.dev/Modern-CL/Top_html/Clojure.html
>Clojure does not have as rich a collection of map-combining operators as FSet. Clojure’s merge is like map-union, except that there is no val-fn parameter to alter the behavior that pairs from the right operand shadow those from the left. So it’s less general than map-union

Author missed the existence of https://clojuredocs.org/clojure.core/merge-with
They are separate functions probably because Clojure merge can merge an arbitrary number of maps unlike fset which only takes two.
>>
>>108590370
(defun my-split-string (str delim-regexp)
"Inefficient, buggy, not recommended"
(save-match-data
(let ((case-fold-search nil) ;; dunno if it does something
(delim-1st-ind (string-match delim-regexp str)))
(when delim-1st-ind
(let ((pre-match-substr (substring str
0
(match-beginning 0)))
(match-substr (substring str
(match-beginning 0)
(match-end 0)))
(post-match-substr (substring str
(match-end 0) nil)))
(if (string= "" pre-match-substr)
(cons match-substr
(my-split-string post-match-substr
delim-regexp))
(cons pre-match-substr
(cons match-substr
(my-split-string post-match-substr
delim-regexp)))))))))

(my-split-string
"This is some text [] more text [][] and a bit more []" "\\[]")
;; after c-j in scratch buffer and newlines for readability
("This is some text "
"[]"
" more text "
"[]"
"[]"
" and a bit more "
"[]")

took about a hour. i'm not a programmer, you see
>>
>>108613547
and it IS buggy lmao, last match's swallowed
>>
>>108613577
meh, just switch (when delim-1st-ind ...) with (if delim-1st-ind ... (cons str nil)), it probably does introduce ever more bugginess but it deals with the swallowing
>>
>>108611436
>the culprit is actually eshell-exec-lisp
Amazing job figuring that out. Do you think this should be communicated upstream? I feel like eshell scripts would be better off if lexical-binding were on by default.
>>
There should be a general that's just for gnu guix discussion
>>
>>108614398
There's only like 4 Guix users on this board, including me. Just post about it here.
>>
>Write Dart in Emacs on Termux
eglot works fine
>Write Dart in Emacs on my desktop with the same emacs config
eglot shits the bed
>>
File: cdn-cdp.png (104 KB, 592x857)
104 KB PNG
I wrote some eshell commands to change to the previous and next siblings in a directory hierarchy.
(defun list-directories-in-path (path)
"Return a list of directories in the given PATH."
(let ((all-files (directory-files path t))) ; Get all files with full path
(mapcar (lambda (p)
(concat p "/"))
(seq-filter #'file-directory-p ; Filter only directories
(seq-remove (lambda (dir)
(or (string= "." (file-name-nondirectory dir))
(string= ".." (file-name-nondirectory dir))))
all-files)))))

(defun next-directory (path)
(when-let* ((dirs (list-directories-in-path (concat path "../")))
(n (cl-position path dirs :test #'equal)))
(nth (+ 1 n) dirs)))

(defun prev-directory (path)
(when-let* ((dirs (list-directories-in-path (concat path "../")))
(n (cl-position path dirs :test #'equal)))
(when (> n 0)
(nth (- n 1) dirs))))

(defun eshell/cdn ()
"cd $next in same hierarchy"
(if-let ((next (next-directory default-directory)))
(progn (cd next)
nil)
(message "No next directory.")))

(defun eshell/cdp ()
"cd $previous in same hierarchy"
(if-let ((prev (prev-directory default-directory)))
(progn (cd prev)
nil)
(message "No prev directory.")))
>>
>>108612285
A big part of eshell's charm for me is getting access to capabilities that terminals don't have by virtue of running inside Emacs.
>>
>>108612285
it's a sort of catch-22 situation where most of the people who would use a standalone lispy shell are using emacs anyway
>>
File: uhh.png (240 KB, 1561x1958)
240 KB PNG
>>108605420
>I honestly wish the Emacs (and lisp) world would try to get as far away from the unix paradigm as possible.
I was never a Unix hater, but this post reminded me of the Unix Hater's Handbook which I enjoyed reading back in the day.
https://web.mit.edu/~simsong/www/ugh.pdf
How well has this book stood the test of time? I feel like the Unix ecosystem has improved a lot since the writing of this book. Unix might not be perfect, but it is resilient.
>>
>>108612285
any real programming language is ideal for scripting, but the point of the shell is that it prioritizes the bottom end of trivial interaction. scripting comes second, and any real programming language is better than a shell language for that.
lisp is infinitely better than most other general purpose languages for interactive usage, but its not quite as good as an explicit shell language ime. what makes a shell language good is that the grammar, evaluation and semantic model is optimized for that bottom end of trivial interaction.
>cat file1.txt file2.txt
now has to be
>cat "file1.txt" "file2.txt"
you might say, well that's not a big deal. it might not be, but it's one of the core reasons why stand-alone lisp shells aren't popular because there are other shittier languages whose grammar optimizes those quotes out. for everybody who doesn't mind, we're already using something like eshell. but we're also a tiny minority.
you might be interested in checking out tcl, which is surprisingly pleasant to use for both scripting and interaction.
>>
>>108617748
a lot of its criticisms are true but modern *nix is also tremendously improved over unix was in the 90s (and today). even back then it was very popular to install GNU stuff on a commercial unix box because it was just straight up better.
plus back then you weren't spoiled by the internet and had to rifle through manpages and docs yourself which seriously sucked ass, so there was a stronger argument to be made about the need for computer interfaces to be as intuitive as possible.

some of the complains have aged poorly though. particularly a lot of the hate wasn't about unix's implementation of a text-centric system so much as they had a bone to pick with the very concept of a text-centric system, which aged like piss.
>>
>>108618039
Just write a read macro implementing a shortened program command notation.
The real problem with Lisp shells is distinguishing between Lisp functions and Unix programs. That's why I gave up on my Lisp shell project.
>>
>>108612285
>a stand-alone execution environment for eshell.el
How would that even work?

>>108613775
I do want to send a patch but I first need to make sure that setting lexical-binding to t in eshell-mode doesn't break anything.
>>
>>108615346
I'm always impressed by the guys on here who use thread-last, so I rewrote the first function using it.
(defun list-directories-in-path (path)
"Return a list of directories in the given PATH."
(thread-last
(directory-files path t)
(seq-remove (lambda (dir)
(or (string= "." (file-name-nondirectory dir))
(string= ".." (file-name-nondirectory dir)))))
(seq-filter #'file-directory-p)
(mapcar (lambda (p) (concat p "/")))))
>>
>>108617748
i remember it has a whole chapter dedicated to hating on usenet lol.
it makes a lot of good points about various technical deficits in unix. interestingly most of them were already fixed in plan 9, contemporaneous to when this book came out.
a lot of the points it makes though are mostly about ecosystem fragmentation, and that's not really caused by any of unix's problems really, just how mass adoption works when your audience are all programmers.

>>108618121
yeah you can do that, but you end up basically just reimplementing a shell language as you end up making more and more things expressible in that reader
>The real problem with Lisp shells is distinguishing between Lisp functions and Unix programs
i think there's a specific CL implementation that still lets you define an eval-hook, but otherwise it's tough yeah. when i made my own toy lisp shell my solution to this was i giving eval a "fallthrough", so if a function cell didn't exist it checked if it was a valid path to a binary and used a special apply on that, and only if that also failed was an undefined-function error sent out.
>>
>>108563402
yef
>>
How large is your Lisp system?
(let ((a 0)) (asdf:map-systems (lambda (b) (declare (ignore b)) (incf a))) a)
> 545 (10 bits, #x221)
(length (list-all-packages))
> 756 (10 bits, #x2F4)
>>
Cojure documentary just dropped
https://www.youtube.com/watch?v=Y24vK_QDLFg
>>
>>108618515
it does not reflect well on the video if they didn't even put the effort into the thumbnail
>>
File: file.png (30 KB, 475x300)
30 KB PNG
>>108618371
CHVN> (let ((a 0)) (asdf:map-systems (lambda (b) (declare (ignore b)) (incf a))) a)
238 (8 bits, #xEE, #o356, #b11101110)
CHVN> (length (list-all-packages))
355 (9 bits, #x163)


>>108618515
I thought the thumbnail was LLM-generated, too, but I was wrong. It's rare to see hand-drawn art in the West these days. There's a lot of hand drawn art in the UHH though:
>>108617748
>>
>>108618515
well fug :DDDD
>>
>>108618558
I remember when he Stuart Sierra. What the fuck, man. Why does this shit keep happening? What fucking black magic did the jews cast?
>>
>>108618556
>It is not AI
that's even worse unless it's bad on purpose, as a joke
>>
>>108618576
Yep I watched a few of Stuart's talks. This change really surprised me.
>>
>>108618515
I just finished watching it. I knew the gist of a lot of the story from just being around all these years, but it filled in a lot of details that I wasn't privy too. I'm also happy for Rich and his retirement, and I hope he has a lot of fun creating things for years to come.
>>
I want to read ebooks and write I guess notes/annotations whatever they're called to them, flip around to my notes quickly and conveniently along with their context with the book, is there a package for that or is this one of the kind of things I have to "extend"? So like install nov and expand it's functionality?
>>
>>108619863
Look into org-noter.
https://github.com/org-noter/org-noter
https://github.com/fuxialexander/org-pdftools
>>
File: chat-with-rich.png (399 KB, 1488x550)
399 KB PNG
>>108618515
https://events.zoom.us/ev/Apqcp-NO_Trnb6g9nA7QbXl2E7YD3rAIk3Ur45-JNsYrQ7GrNABQ~AvQxs5XTZP6T6qdwZ3vD_NqwstDUQECO8TYZJ7mtDrVmMm8zUfARyv4HSw
>>
Julia-styled Multiple Dispatch for Clojure
https://github.com/replikativ/raster
>>
>>108620099
org-noter looks exactly like what I was interested in, thanks
>>
Is there anything like Elisp's seq-let for CL?
>>
File: 1681812295096583.png (241 KB, 580x640)
241 KB PNG
>>108620802
destructuring-bind, which is more powerful than seq-let, because it accepts lambda lists
the loop macro itself can also destructure, which has the same capacity as `seq-let'
(loop :for (a b c d . rest) :on *data*
:do (format t "a: ~A, b: ~A, c: ~A, d: ~A~%" a b c d))
>>
File: 1764225816080911.png (11 KB, 1887x87)
11 KB PNG
>tree shitter is once again having explosive diarrhea
>>
File: 1772176679342294.png (465 KB, 1528x1018)
465 KB PNG
>>108621175
>attempt to validate my anger through google
>blasted with gay sex propaganda from wikipedia
>>
>>108618241
(seq-map #'file-name-as-directory)
>>
>>108621351
Nice. I replaced the last mapcar with this. There are a lot of file-name-* functions I wasn't aware of.
>>
File: unix-dmr.png (230 KB, 1542x1934)
230 KB PNG
>>108617748
>>
That book is a lot of fun if you take it in stride. But it also has many valid points, I even keep "-i" file in my home directory ever since like a proper Unix victim
>>
>>108622565
>>108617748
...
>>
File: cap_EP01_sub_00:09:56_02.jpg (401 KB, 1920x1080)
401 KB JPG
>>108618515
Started watching just now. He got old...
>>108618576
wtf that's Stuart? I thought it was just a random tranny...
>>
>>108618558
My opinion of Clojure just dropped.
>>
>>108624948
Programmers are incredibly weak to the Warp.
>>
>>108625034
https://ludic.mataroa.blog/blog/praise-the-machine-spirit/
>>
File: 1766065377210923.png (178 KB, 425x527)
178 KB PNG
>*doesn't write docstrings in your path*
What do?
>>
>>108625311
Give the functions meaningful names.
>>
>>108625311
Give the names meaningful functions.
>>
>>108625311
Pray that the spirit of Christ compels someone to come to his aid and send him a pull request with English docstrings.
>>
>>108620965
I'm surprised loop can do this. It's useful, but it has nothing to do with looping.
>>
File: @stylewarning.png (188 KB, 600x883)
188 KB PNG
>>108618515
https://nitter.net/stylewarning/status/2044927750251729183
>>
How the hell do I use lisp on Windows?
I want to simply feed the interpreter scripts from the file system. I'm using Portacle but the little shit doesn't just accept the scripts as arguments from the CLI.
>>
File: 1771187423946354.png (142 KB, 390x280)
142 KB PNG
syntax-ppss
>>
>>108626821
I'm surprised you got Portacle working at all. But it's just an emacs wrapper, so the intended workflow is to code in emacs and evaluate in a connected REPL with slime. If you want to make and run a standalone script from the CLI, then sbcl needs to be on your path and you can use the --script argument. You might additionally need to include a quicklisp preamble if your script loads libraries. Alternatively, if you're going to do a lot of scripting, there's roswell: https://github.com/roswell/roswell
>>
>>108626821
I don't use Windows, but almost every beginner to intermediate tier question I had about Common Lisp was answered by consulting the Common Lisp Cookbook by @vindarel.
https://lispcookbook.github.io/cl-cookbook/
The section on scripting and building executables should help.
https://lispcookbook.github.io/cl-cookbook/scripting.html

Also, stop using Portacle. The author deprecated it years ago.
https://github.com/portacle/portacle/issues/182

Instead, use winget to install sbcl.
https://winget.run/pkg/SBCL/SBCL
winget install -e --id SBCL.SBCL

Then follow the instructions for setting up Quicklisp.
https://www.quicklisp.org/beta/#installation
When my laptop still had Windows on it, I tried this for shits and giggles, and it was surprisingly painless. It's seriously not any harder than getting started in any other language.

As for editor, pick one from here.
https://lispcookbook.github.io/cl-cookbook/editor-support.html
You don't have to use Emacs if you don't want to. I love it, but you don't have to.
>>
>>108617458
One of my favorite features of eshell is that you can put your cursor on any line in an eshell buffer and hit RET to execute that line. This lets me write programs that output eshell commands, and I can treat that output as sort of a menu of options that I get to choose from.
>HOWEVER, There's a problem.
What if the command I chose generates a lot of output and the menu of commands scrolled out of sight? Scrolling up gets annoying. Using eshell-previous-prompt helps, but that gets annoying too after a while.
>MY SOLUTION
(defun eshell-send-input-save-position ()
"Send input but scroll back to where I was."
(interactive)
(let* ((start (window-start))
(vscroll (window-vscroll))
(p (point)))
(eshell-send-input)
(set-window-start (selected-window) start)
(set-window-vscroll (selected-window) vscroll)))

(keymap-set eshell-mode-map "C-<return>" #'eshell-send-input-save-position)


I use this by having two windows open into the same eshell buffer. One window is for the menu of commands, and it doesn't scroll. The other window is for the output, and it gets to scroll freely. On the menu side, I hit C-RET to execute eshell commands and I use the output side to peruse the data.
>>
>>108626821
If you don't want to think about your development tools, you could just use Racket.
https://racket-lang.org/
It offers a Scheme-derived language with lots of libraries included in the standard library. It also comes with an IDE called DrRacket, so you don't have to think about setting up an editing environment.

Running scripts in Windows is documented clearly and is straightforward.
https://docs.racket-lang.org/guide/scripts.html#%28part._.Windows_.Batch_.Files%29
>>
File: 1762029547857146.png (5 KB, 87x42)
5 KB PNG
my emac wont group with the emac shortcut
im using "C:\Program Files\Emacs\emacs-30.2\bin\emacsclientw.exe" -nta ""
>>
>>108631172
can you run emacs -nw in the console on windows?
Win11 has a new shortcut (Win + ~) which toggles a quake-style console.
>>
...yes i can run emacs -nw on powershell.. not sure why you asked that
i dont have windows terminal so no quake mode for me

to bea bit more clear about my issue i start my emacs every time I boot with this simple service:

set HOME=%HOME%
del /q %HOME%\.emacs.d\server\*
C:\Progra~1\Emacs\emacs-30.2\bin\runemacs.exe --daemon --chdir %HOME%

i then have a pinned shortcut with this:
"C:\Program Files\Emacs\emacs-30.2\bin\emacsclientw.exe" -nta ""

this shortcut either executes the emacs client, or in case the daemon isn't up, a normal emacs instance.

the issue is, the shortcut when calling emacs client has a different ID (I believe this happens because the shortcut points to one executable, which then correctly calls another, this one of course having a another ID)

this does sound more like a /fwt/ question but the people there are still trying to figure out how to run .reg files or something...

ive also read
https://www.gnu.org/software/emacs/manual/html_node/emacs/emacsclient-Options.html
https://www.gnu.org/software/emacs/manual/html_node/emacs/Windows-Startup.html
but i couldnt find anything of use regarding this problem there, but im dumb
>>
File: 1751750169346949.gif (2.31 MB, 498x332)
2.31 MB GIF
>>108631438
>>108631676
i forgor to quote
>>
>>108631676
I forgot which one worked at last but it's on the following page:
>https://www.emacswiki.org/emacs/EmacsMsWindowsIntegration
>>
>(asdf:load-system 'some-thing)
>MISSING DEPENDENCY
>download dependency, transfer to computer
>try again
>MISSING DEPENDENCY
Lads, surely there's an easier way to do this. I'm working on an air-gapped machine.
What's the sane way to figure out all the dependencies I need that doesn't involve manually checking every single .asd file in the chain?
>>
>>108632603
I suppose if you have the hard drive space, you could just download everything in quicklisp and mirror it locally
>>
>>108632603
>Lads, surely there's an easier way to do this.
I thought to myself that quicklisp itself has to figure this out, so there must be code in there that does it. I grepped in the source for the word "dependency" and I found a generic function called dependency-tree.
(ql-dist:dependency-tree :str)
>>
File: HF7q4EJasAAtzVF.jpg (1.11 MB, 2731x4096)
1.11 MB JPG
I have a CL question about making a round trip from a class instance to JSON string and back again. Assume we're using the following libraries:
https://github.com/Zulu-Inuoe/jzon
https://github.com/rudolfochrist/cl-change-case

Assume the following code exists:
(defun to-camel-case (k)
"Change the symbol `k' to a camelCase string (for JSON serialization)."
(change-case:camel-case (string k)))

(defclass post ()
((blog-id
:initarg :blog-id
:accessor blog-id
:documentation "")
(posted-on
:initarg :posted-on
:accessor posted-on
:documentation "datetime of post")
(title
:initarg :title
:accessor title
:documentation "")
(content
:initarg :content
:accessor content
:documentation "content of post")))

(defparameter p1 (make-instance 'post :blog-id 1 :posted-on "2026-04-18T14:00:00" :title "Hi" :content "Hello"))

(defparameter json (jzon:stringify p1 :coerce-key #'to-camel-case))

(defparameter data (jzon:parse json :key-fn #'change-case:param-case))

(defparameter p2 (new 'post data))


How would you implement `new' such that p1 and p2 had the same slot values?
>>
File: 1758756848125806.png (16 KB, 421x219)
16 KB PNG
>>108632337
i dont think these solutions do what i actually want
i can pin emacsclient to my taskbar with no problems, but then if i dont have the server open it would show an error (as it should), what im looking for is a shortcut for (if server is up open emacsclient if not open emacs) that still has a single taskbar icon
the shortcut that does most of that is, as i said, "C:\Program Files\Emacs\emacs-30.2\bin\emacsclientw.exe" -nta "", it just doesn't group the icons up
>>
>>108633215
Tangentially, I'm curious if Elisp has something to help with camelCase <=> kebab-case transformation in a JSON context.
>>
Any obscure lisps worth using?
>>
>>108634815
I wish LFE gained more traction.
https://lfe.io/
>>
>>108635110
That's amazing anon. It runs on the BEAM? Cool

Know more?
>>
>>108621175
>>108621182
Turns out this is due to an arch bug that will be fixed Soon
>>
File: 1765263994021439.jpg (164 KB, 500x500)
164 KB JPG
I just tried using dape, and it's DOPE
>>
>>108629652
winget... chocolatey... scoop... why did windows fags replicate the fragmentation of linux for installing things
>>
This was posted before, but what is the usual/good back-end stack for a clojure api? I have a project idea, I'd like to implement it in clojure to learn the language.
>>
Why would I use spacemacs or doomacs? I need like 3 plugins to achieve my perfect workflow, why people use these 'distros'?
>>
>>108638387
I have the same question. The answer I usually get is that you're supposed to start on a distro and migrate to Emacs.

But who the fuck starts on Emacs knowing enough Vim for the distros?
>>
>>108638398
Me.

I switched from emacs to vim after I've seen the crazy shit tsoding does with it without evil mode.

I don't know, maybe I should try out some distros?
>>
>>108638423
from vim to emacs*
>>
>write code in CL
>feels great, restart system is amazing, debugging by far the best of any language
>try Scheme
>it’s the cleanest most gorgeous language I’ve ever used
>but geiser sucks compared to slime/sly, CL debugging absolutely mogs it
>go back to CL
>feels bad, Scheme is more beautiful
>go to Scheme again
>feels bad, debugging sucks
This sucks ass
>>
>>108638398
There are a lot of vim users out there. I was one of them. I also didn't know any elisp in the beginning, so the big curated emacs configs were a good way for me to get introduced to what emacs was capable of.
>>
>>108638626
Clojure?
>>
>>108638387
doom emacs is more actively maintained, the guy is devoted and the community is bigger
>>
>>108638834
i cant read, disregard this post
>>
>>108638644
Clojure is much uglier and I don’t think Java messages are nice restarts
>>
does anyone have the emacs calligraphy art logo thats shaped like a gnu?
>>
>>108638387
All of Emacs' default settings are stupid, which is why even my "minimalist" dependency-free custom config with more or less vanilla keybindings is about 200 lines long.

If you then also want keybindings that aren't shit, you're going to have to install evil/meow/helheim, and with evil you're gonna sink like 500 lines worth of keymaps into configuring the packages you use.

Installing Doom is just a lot easier than that.
>>
File: xemacs_black.png (283 KB, 2489x1814)
283 KB PNG
>>108638998
https://github.com/egstatsml/emacs_fancy_logos/
the main emacs logo is a gnu made from G, N, U and a cursive-like text "emacs"
this other version is a gnu made out of E, M, A, C, S
>>
>>108638998
>>108639279
https://www.ee.torontomu.ca/~elf/emacs/logo/logo.html
>>
Why not use elisp as a web app? Horizontal scaling by just adding more emacs
>>
How much code do you anons usually write in a week?
I find it weird how I seemingly don't write a lot of code.
>>
>>108639713
>lisp thread
>anons don’t actually write any code
pottery
>>
>>108639232
>All of Emacs' default settings are stupid
Only retards say this.
>>
>>108639232
>about 200 lines long
that's really not much in elisp terms, specially with good docstrings/comments
>>
>>108639983
A lot of them are really bad, like iBuffer being disabled by default or having chords mapped to the function of an arrow key.
>>
>>108639991
it's like 120 different settings, and this doesn't include the OTHER 200 lines where I set up keybindings.

Granted, a good chunk is just turning on various optional packages, which I agree shouldn't be on by default simply for performance reasons.

But compare to e.g. FISH, which I spend about as much time in as emacs, yet because it has sensible defaults, my fish config is like 5 lines, not counting the various aliases and functions.
>>
>>108639713
maybe a couple hundred lines since i got a job, previously quite a bit more than that
>>
>>108638626
So what about Scheme do you find more beautiful etc than Common Lisp?
>>
I use Elisp and CL the most, but I think Clojure code is the best looking out of the lisps. The API design of their standard library is sane and has the least historical baggage. I think that helps people write cleaner code.
>>
>>108634815
I'm interested in playing with Kernel by John Shutt, but I'm having trouble finding an implementation.
>>
>>108639713
work on legacy shit. Most of the time small changes (10-100 loc) after hours of finding where the retard that wrote it 20 years ago fucked up.
>>
>>108639713
Just going off git commits (so very infalted) I've been averaging about 2000 lines per week for the last 2 years.
>>
>>108633215
This will work as long as the slot values are simple scalars. If you start nesting objects, this won't work.
;; XXX: This is OK for shallow objects,
;; but it doesn't have a way of handling nested objects.
(defun new (class-name hash-table)
"Instantiate a new instance of `class-name' using the data from `hash-table'."
(apply #'make-instance
class-name
(loop for k being the hash-key using (hash-value v) of hash-table
append (list (intern (string-upcase k) :keyword) v))))
>>
>>108639713
I barely program at all anymore. Emacs is still essential to my workflows and would be arduously difficult for me to replace.
>>
>>108638626
> “debugging sucks”
You mean fancy video-game like debugging facilities aren’t as fun on scheme?
I’m thinking it’s you.
Try debugging without those.
Practice writing code that is incrementally tested as you build it out.
Develop habits that produce code that is inherently debuggable or has no bugs to begin with.
Don’t write 100s of lines of shit and *then* run it for the first time and try and fix it leaning heavily on “magic” debugging facilities.
Try building your own debugging facilities as you need them. Familiarize yourself with modifying and re-compiling the scheme interpreter.
>>
>>108633288
> json
JSON is poison. It’s not even Javascript compatible, it’s just pure retardation.
Since you’re here, you might as well look into something called “s-expressions” which can replace your shitass JSON format.
When you get rid of JSON for sexps, eventually someone will see it and say “holy shit, this guy was enlightened”
>>
>>108642807
Sometimes, you have to interop with non lisp systems that aren't under your control.
>>
>>108640500
> Clojure code is the best looking out of the lisps
Nonsense. We don’t need the [] and {} shit in there. For one, it glamorizes using those constructs. Might as well start writing Perl code and just forget about lisps if you like using {{{maps}}} everywhere.
What they didn’t realize was lisp syntax is more than just using () for lists. A lot more. Which is really too bad that they missed the while point right at the get-go, and the closure guys are probably living in the nightmare of having realized their mistake now… but being unable to stop the runaway zealotry train.
>>
>>108642807
json is very hard to avoid these days. it's mediocre but the garbage it replaced is way worse
lmao at using it for shit like config files though
>>
>>108640508
> kernel
Go look at xscheme by david betz.
This was the first scheme I used under DOS besides autolisp.
>>
>>108642786
This is a lot of cope when you know full well that Common Lisp has an objectively amazing environment for this and even scheme just doesn’t compare, like no shit you use the repl to test functions lol, that doesn’t mean that Common Lisp restarts aren’t still a phenomenal feature, this is just a weird take
you can do all the stuff you said but it doesn’t change the fact Common Lisp does that exceptionally well
Also
>develop code that has no bugs
lol this is nocoder tier advice
>>108640500
How? Clojure seems by far the ugliest lisp to me imo
>>
>>108642786
Idiot-tier post.
Slime or sly or whatever you’re using let you inspect so much that you gain far more insight than what you can get in Geiser. If you’re advocating writing your own this is just implicitly accepting the original point that those tools are in fact good despite the paragraph you spent bitching about someone liking them for no reason.
>>
>>108638946
>I don’t think Java messages are nice restarts
oh yeah the error messages definitely suck in Clojure, but he's right that it does have very nice tools for debugging and profiling:
https://github.com/flow-storm/flow-storm-debugger

https://github.com/clojure-goes-fast/clj-async-profiler

>>108643130
>Clojure seems by far the ugliest lisp to me
NTA but regardless of superficial things like the amount or kind of parens used etc., Clojure code in the wild is mostly written in a very clean functional style that is both easy to read and has a very high signal-to-noise ratio.
Clojure's use of {} for mappings also helps make the syntax a lot more clear, especially in the context of webshit with hiccup and json.
>>
>>108643505
Alright, I might’ve been hasty in my negative judgement. I’ll reconsider my opinion on Clojure then. Thanks for the info
>>
>>108642876
>What they didn’t realize was lisp syntax is more than just using () for lists
I can't imagine the amount of narcissism it takes to assume this is esoteric knowledge that the clojure designer simply didn't know about.
>>
>>108634815
Janet is cool. Not technically a Lisp though, it's in the Clojure family. Carp also seems interesting.
>>
>>108643313
> tools are in fact good
Exactly they are just tools.
If I needed to, I can inspect the entire core image or memory dump. But, I write code in a way that I hardly ever need to do that because I learned. Do likewise gents.

Helpful hint to get you started: minimize (rather than maximize) the use of
(setf …)
>>
>>108643635
> hasty in my negative judgement
No, you weren’t.
The syntax looks like “line noise” and will probably get worse.

> esoteric knowledge that the clojure designer simply didn't know about
The other showstopper is clojure’s affinity for the Java virtual machine. The suckage of that idea truth-functionally invalidates and calls into question everything else.

I imagine it will only get worse as they fiddle with the language.
>>
>>108645812
Shut up man, you’re replying to a completely valid point to just give the most inane and basic bitch tier advice while acting like you’re dishing out sage wisdom. Everyone knows all this stuff. It has nothing to do with slime being a great development tool and better than geiser currently is, which was the actual post you replied to.
>>
>>108645855
>The syntax looks like “line noise”
nigga just switch to ruby at that point
>>
File: hitler2026.jpg (573 KB, 1488x2381)
573 KB JPG
https://racket-lang.org/
(define (swastika #:bg (bg "white")
#:fg (fg "black"))
(overlay
(flip-horizontal
(rotate
45
(polygon (map (lambda (xy) (apply make-posn xy))
'((0 0)
(36 0)
(36 24)
(48 24)
(48 0)
(60 0)

(60 36)
(36 36)
(36 48)
(60 48)
(60 60)

(24 60)
(24 36)
(12 36)
(12 60)
(0 60)

(0 24)
(24 24)
(24 12)
(0 12)))
"solid"
fg)))
(circle 45 "solid" bg)))


(define (germany1935 #:bg (bg "red"))
(overlay
(swastika)
(rectangle 200 120 "solid" bg))) ; 3:5 ratio (official)

(define s (scale (/ 1488 200) (germany1935 #:bg (make-color #x88 #x0d #x14 255))))


Happy Birthday!
>>
>>108647476
Based function, but what's the appeal of Racket over other lisps?
>>
>>108647529
best native gui framework
>>
>>108647476
Happy birthday

Don't cry because it's over, smile because it happened
>>
>>108647539
Well shit, I'm sold.
I spent all morning fucking around with the ltk library, and while I don't really have any complaints, the documentation seems to assume I have a great deal more knowledge about the underlying stuff than I actually do, and it's been an uphill slog, to put it lightly.
>>
>>108647476
You need to put this at the top.
#lang racket
(require 2htdp/image)
(require lang/posn)
(require srfi/1)

That should be enough to get it working. There's a save-image function if you want to save the output to a file.
(save-image s "germany1935.png")


>>108647529
>what's the appeal of Racket over other lisps?
If you like the Scheme style and want access to a very big standard library, Racket might appeal to you. They also have a really good documentation culture. Not only do they make a community-wide effort to document their code, they also have really nice tooling around it in the form of Scribble.
https://docs.racket-lang.org/scribble/
>>
I've started using Emacs without a theme, it's pretty nice desu.
>>
File: e30.png (230 KB, 1080x1243)
230 KB PNG
>>108649825
I don't use a theme either, I just change a handful of the colors
>>
>>108640175
Neither of those things can be classified as 'really bad' by anyone other than a retard. So point stands.
>>
>>108639713
couple hundred lines per week, sometimes 1 or 2 thousand. Note though that a good chunk of it is written by LLM's
Here's stats on a hobby project I've been working on these past 7 days:
===============================================================================
Language Files Lines Code Comments Blanks
===============================================================================
CSS 1 64 42 19 3
Dart 3 419 354 6 59
JavaScript 1 4 4 0 0
===============================================================================
Total 5 487 400 25 62
===============================================================================
>>
File: 4gstats.png (172 KB, 1080x1759)
172 KB PNG
>>108651995
I thought 4chan had mangled that post, but it actually looks fine in 4g
>>
>>108647613
Yeah, for someone who's used to docstrings, it's hard to beat racketgui. tcl/tk's documentation is high quality, but contained within man pages and the online docs. Don't know why it's the case, tcl itself is perfectly capable of doing its own docstrings. Plus I imagine you start having questions which get into tcl's own functionality. I like it as a language, truly. The fact it got away with not having a GC for 15 years is an insane feat for a turing complete language. But at the same time, racketgui is perfectly serviceable and way less mental overhead.
>>
Any tips on generating code?
Not even transpiling, more like generating a certain code structure depending on values from a json file.
I'm doing it in elisp I'm trying to generate a lua data structure from the contents of a json file, but only know elisp so I'm hacking away at it by using insert, but it feels incredibly shitty to have the code as strings, should I just use the language in question (lua) or is there a more common convention for generating foreign code from Lisps
>>
>>108653097
Pretty trivially, you just build the AST first.
'(indexOne indexTwo :someKey someVal :someOtherKey (anotherTableVal1 anotherTableVal2 anotherTableVal3))


And you just walk it so you end up with.
{
indexOne;
indexTwo;
someKey = someVal;
someOtherKey = {
anotherTableVal1;
anotherTableVal2;
anotherTableVal3;
};
}

No need for insert, just map and append.
>>
>>108653097
I'm not sure I understand your question. Can you show me an example of the data you have and a result you want?
>>
>>108645855
Retard alert
>>
>>108653097
Show us an example of JSON data to use as input and the desired output.
>>
Sacha and Prot Talk Emacs
https://www.youtube.com/watch?v=djE_pVlgDHg
>>
How do you even get ideas on what kind of stuff to write? Most of the things I want to do can already be done so I don't see a reason to write yet another package that does the same thing. The things that haven't been done need resources that are beyond what I posses so how do you do this?
>>
>>108655492
>How do you even get ideas on what kind of stuff to write?
They just come. Sometimes, it helps to have a quiet moment to yourself. You could be doing something completely unrelated like taking a walk, and an idea will come to you. The other way an idea often comes is when you feel pain or discomfort and a solution floats into your mind.
>>
File: 1598475186323.png (106 KB, 255x247)
106 KB PNG
>>108655492
>Most of the things I want to do can already be done so I don't see a reason to write yet another package that does the same thing
then write yet another package that does the same thing better
really, just stop being a huge downer pussy and enjoy writing things that are specifically tailored to your needs
>>
>>108655492
>The things that haven't been done need resources that are beyond what I posses

| thought this to be the case for me too. But as I got better it stopped being the case, also for me it's always about scope.
>can I do X?
>yes, here's a package/lib that does X,Y,Z,A,B,C
I just want X, and I want it to be the best possible way to do X possible.

>Can I expand Y? is it documented?
>no, you can't expand Y in this way, and it's not documented
Then I make my own Y, and make it so I can expand it however I want, and other too, and fully document the whole thing so that I don't forget how to do so in 2 months or don't need to explain it that much to others.
>>
>>108655605
>and fully document the whole thing
What format do you write your documents in?
>>
File: rudolf-steiner.png (680 KB, 860x850)
680 KB PNG
>>
new bake >>108655774
>>
>>108655784
based early bread baker
>>
>>108655492
I have tons of ideas, I just don't have the time to implement them
>>
>>108655966
Right? Ideas feel abundant.



[Advertise on 4chan]

Delete Post: [File Only] Style:
[Disable Mobile View / Use Desktop Site]

[Enable Mobile View / Use Mobile Site]

All trademarks and copyrights on this page are owned by their respective parties. Images uploaded are the responsibility of the Poster. Comments are owned by the Poster.