This page is not created by, affiliated with, or supported by Slack Technologies, Inc.
2023-10-26
Channels
- # announcements (7)
- # babashka (6)
- # beginners (41)
- # clara (27)
- # clerk (2)
- # cljs-dev (6)
- # clojure (121)
- # clojure-europe (31)
- # clojure-nl (2)
- # clojure-norway (98)
- # clojure-uk (12)
- # clojuredesign-podcast (7)
- # conjure (5)
- # cursive (22)
- # holy-lambda (22)
- # hoplon (9)
- # hyperfiddle (19)
- # leiningen (9)
- # malli (4)
- # music (1)
- # nbb (6)
- # off-topic (10)
- # podcasts-discuss (1)
- # polylith (4)
- # re-frame (2)
- # reitit (2)
- # releases (1)
- # sci (1)
- # shadow-cljs (59)
- # sql (9)
- # vim (41)
- # xtdb (23)
Morn! Nå har jeg hørt på siste podkast med @christian767 og @magnars, og føler meg motivert til å gi Emacs et nytt forsøk.
Moro! Kan anbefale deg å bare starte rett på https://github.com/magnars/emacsd-reboot hvis du vil ha en autentisk Emacs-opplevelse på Mac med norsk tastatur.
Ja, det var det jeg mente. Da må jeg moderere meg til at jeg ikke vet om jeg har brukt vim 😄
Det var det som slo meg også, vi
kunne for alt jeg vet vært en symlink til vim
, men det er det tydeligvis ikke på min maskin.
erik@keep ardoq-docker % type -a vim
vim is /usr/bin/vim
erik@keep ardoq-docker % type -a vi
vi is /usr/bin/vi
erik@keep ardoq-docker %
Tipper vi-kommandoene deres er symlinker (eller hardlinker) til vim. Har ikke sett en ikke-vim vi in the wild på mange år. På min maskin (MacOS):
$ ls -l /usr/bin/vi
lrwxr-xr-x 1 root wheel 3 Sep 2 09:35 /usr/bin/vi@ -> vim
Jaggu har du rett, @U06BEJGKD!
erik@keep ardoq-docker % ls -l /usr/bin/vi
lrwxr-xr-x 1 root wheel 3 Sep 16 15:28 /usr/bin/vi -> vim
erik@keep ardoq-docker % cat /usr/bin/vim
#!/usr/bin/emacs -e evil-mode
erik@keep ardoq-docker %
Dæven!sååååå … jeg leste denne tråden akkurat nå.
$ cat ~/.zsh_history | tail -n 30
: 1698241381:0;bbin
: 1698241523:0;javac -h
: 1698241528:0;java --help
: 1698241534:0;javac --help
: 1698241572:0;bb --help
: 1698241574:0;bb --help
: 1698310000:0;hometemp
: 1698310004:0;mkcd neilproj
: 1698310008:0;neil dep add org.clojure/clojure
: 1698310014:0;cat deps.edn
: 1698310060:0;neil dep add hiccup/hiccup
: 1698310064:0;cat deps.edn
: 1698310073:0;neil dep add -h
: 1698310078:0;neil dep upgrade -h
: 1698310093:0;vim deps.edn
: 1698310122:0;git init .
: 1698310128:0;git add . && git commit -m "LOL"
: 1698310131:0;it st
: 1698310132:0;git st
: 1698310134:0;cat dp3e
: 1698310136:0;cat deps.edn
: 1698310140:0;neil dep upgrade
: 1698310145:0;cat deps.edn
: 1698310162:0;git st
: 1698310295:0;bash
: 1698310311:0;,promptsimple
: 1698310322:0;cat ~/.zsh_history | grep -n 10
: 1698310329:0;cat ~/.zsh_history | tail -n 10
: 1698310338:0;cat ~/.zsh_history | tail -n 20
: 1698310343:0;cat ~/.zsh_history | tail -n 30
Blasfemi? 😄
(jeg bruker for øvrig vim-bindings inni emacsen min)@magnars, jeg gjorde nettopp følgende:
1. Installerte siste versjon av Emacs via https://emacsformacosx.com
2. Forket ditt emacsd-reboot
repo i GitHub
3. Installerte alt du nevner under "out of band dependencies" i README.md
4. Fjernet min eksisterende ~/.emacs.d
→ mv .emacs.d .emacs.d-OLD
5. Klonet min fork til ~/Code/emacsd-reboot
6. Lagde denne symlink: ln -s ~/Code/emacsd-reboot/ ~/.emacs.d
7. Startet Emacs
Etter en stund med nedlastninger, ser alt ut til å fungere! Kult.
Det er noen warnings der, men jeg vet ikke om de er noe å bry seg om.
Du trenger ikke bry deg om warnings - de er nok mest til de som har skrevet pakkene - men gjør obs på at @christian767 hadde dårlig erfaring med symlink. Den lastet ned avhengighetene hver gang Emacs startet eller noe i den duren.
Det finnes også Emacs-verktøy for å bygge mellom emacs-configer. Feks: https://github.com/plexus/chemacs2 (fra Clojure-communityet sin egen @U07FP7QJ0). Uten at jeg vet hva Magnar og Christian har lagt opp til i sin config!
Jeg er fornøyd meg å kunne ta Magnar og Christian sitt oppsett for god fisk og bare bruke det rått frem til jeg har lært meg bedre hvordan ting funker og kan endre på ting selv 😅
Mitt hovedproblem var å lære Clojure og Emacs samtidig. Jeg ble frustrert over at min mangel på kunnskap om editoren kom i veien for Clojure-læringen. Bare noe så banalt som å åpne et "prosjekt" som en mappe, navigere rundt og starte REPL var treigt og rart sammenlignet med VS Code + Calva.
ref det siste:
• s-p p
lar deg velge mellom prosjekter som du tidligere har åpnet i Emacs. Første gang må du navigere dit med C-x C-f
• s-p f
lar deg finne filer i nåværende prosjekt
• C-c M-j
starter CIDER
(`s-p` betyr "hold super og trykk p", hvor super er Emacs-navn på option-tasten på mac)
Da har du de viktigste modifier keys lett tilgjengelig: M
rett ved space (command) og C
på en svær og fin tast rett på home row
Ligger de bindingene allerede i ditt repo, eller må jeg endre på noe for å binde Caps Lock til Control?
Er det noen som vet årsaken til denne feilen når jeg starter Emacs? :thinking_face: Jeg finner ingen referanse/path til mappen "projectile" i fila init.el
Jeg bruker en fork av @magnars sin config (uendret enn så lenge): https://github.com/leifericf/emacsd-reboot
Feilmeldingen sier at projectile (https://github.com/bbatsov/projectile) mangler. Det ser ut som projectile er satt opp her: https://github.com/leifericf/emacsd-reboot/blob/main/packages/setup-projectile.el
… men jeg klarer ikke se noe galt, så usikker på hva du kan gjøre for å fikse dette.
Mulig jeg er på villspor. Magnar eller Christian kan sikkert hjelpe deg med denne!
Problemet er at projectile blir required før det er blitt installert. Det er en bug som er lett å introdusere, siden det kun påvirker "bootstrappingen", og koden ble antageligvis lagt til på en maskin hvor projectile var installert! Legger ved en patch som bør la deg åpne ting uten kræsj 🙂
Jeg har nå oppdatert repo'et med: 1. en fiks for denne feilen 2. lagt til tips og triks i README
Det fungerte fint, ja! Jeg fikk testet det ut nå. > When you start using emacs for the first time, your habits fight you every inch of the way. Your fingers long for the good old familiar keybindings. Veldig sant! > This is my personal emacs configuration. I am constantly tuning it to my preferences. You should consider doing the same. Maybe start with a blank emacs + Technomancy's better-defaults package, and then dig through this repo for useful nuggets, instead of forking it directly. Godt poeng, og takk for tipset! Jeg gjorde et forsøk på det først, men sleit med å få ting til å funke. Det er vel bare en relativt stor terskel man må komme seg over i starten.
Ja, hvis du skal skrive i hovedsak Clojure på et norsk tastatur, så endres anbefalingen min til å bare bruke min config, egentlig 😅
@magnars Ja, det blir nok stort sett for Clojure og Fennel (og kanskje litt Lua hvis nødvendig).
Jepp! Lua er de facto standard i spillbransjen for å kontrollere C/C++ spillmotorer.
Jeg har bare såvidt prøvd (tror jeg er akkurat for ung for å ha hengt på IRC), men M-x erc
er innebygget, og funker helt fint.
Denne spillmotoren er skrevet i C++ for Lua: https://love2d.org — Ganske cool!
Og TIC-80 er en annen retro spillmotor skrevet for Lua: https://tic80.com
Jeg var mye på IRC som tenåring, og har ikke tenkt på det på leeenge. Men det er der alle Fennel folka henger.
Et annet Emacs-relatert spørsmål: Nå holder jeg på å sette opp støtte for Fennel. Det gjøres slik (https://git.sr.ht/~technomancy/fennel-mode):
(autoload 'fennel-mode "/path/to/fennel-mode/fennel-mode" nil t)
(add-to-list 'auto-mode-alist '("\\.fnl\\'" . fennel-mode))
Men! Hvor er det lurt å putte de linjene der?
Hvis jeg tenker rett, og følger malen til @magnars, bør jeg lage en ny fil (f.eks. fennel.el
) under settings
mappa, og putte alt som har med Fennel (og kanskje Lua) å gjøre inn der.Hvis fennel-mode er satt skikkelig opp så skal du ikke trenge alt det staffasjet der.
(use-package fennel-mode)
Dette bør erstatte alt over. Ytterligere konfigurasjon kan kreves, da.hvis du også legger det inn i setup-fennel.el
i packages
-mappa, så blir det lastet automatisk når du starter emacs.
En annen ting vi har til felles, @magnars (som jeg hørte om i podkasten): > In 2012, I read The Pragmatic Programmer by Dave Thomas and Andy Hunt. It inspired me to learn a new programming language each year, and I’ve kept at it since then except for a few years when there were too many other things occupying my mind. […] I eventually swayed to check out some talks because I love Lisp. Rich Hickey’s talks blew me away and convinced me to take the plunge. (https://clojureverse.org/t/introduce-yourself/1327/296?u=leif) Og https://clojureverse.org/t/introduce-yourself/1327/305?u=leif siden da.
Eller… Jeg har blitt tvunget til å lære meg C# på nytt da 😅 Men bortsett fra det, ja.
For mitt vedkommende var det @U5E9UP66T som overbeviste meg over alt for mye champagne på en nyttårsfest til å velge Clojure for 2020.
Rust var så pass annorlunda att jag satte mig ner och tittade på det efter 10+ år av inte vilja lära mig något nytt språk efter Clojure
mitt giv etter å lære nye, kule programmeringsspråk dabbet også av etter jeg begynte å skjønne Clojure. Man slipper liksom å bytte ut Clojure for å få lære nye ideer — siden nye ideer ofte kan embeddes rett i språket (lite syntaks, vekt på data)
Takker og bukker! Bruker FontAwesome, men via @font-face
. På tide å fikse det! SVG er jo mye bedre.
hypotetisk. Hvis FontAwesome hadde lisens som tillatte det, ville du da laget biblioteket som en svær Clojure med
(def file-pdf [:svg ,,,])
;; ... og alle de andre ikonene ...
? Eller hadde du fremdeles gått for å ha SVG-filer ett sted og laste mer dynamisk med Clojure?Trenger ikke å svare hypotetisk. Dersom det var open source hadde jeg droppa steget der du selv må laste ned ikonet: https://github.com/cjohansen/phosphor-clj
Men nei, ikke en stor clojure, jeg vil kunne snakke om ikoner som data (keyword vs funksjonskall), og jeg vil ha effektiv tree-shaking i cljs
Skjønner, takk! Jeg liker navnerom med def-er. Lite herk. Men det gjør en antagelse om at man alltid vil snakke om hele verdien, ikke kun navnet. For øvrig - kul bruk av nøkkelord med navnerom!
Jeg vil være med å spikke flis jeg óg! Liker du alternativ 1 eller alternativ 2 best?
Kontekst:
• Disse lever i navnerommet minapp.steel.i-profile
, som beskriver geometriske egenskaper for tverrsnitt av stålbjelker
• Jeg gjør select-keys
fordi map-et man starter med inneholder parametre (som kan skaleres med *), men også inneholder andre ting, som blir direkte feil hvis de tas med.
Hva med alternativ 3:
(defn scale [profile factor]
(-> (select-keys profile geometry-parameters)
(update-vals * factor)))
Ref https://www.kodemaker.no/blogg/2019-10-clojure-update/ 😅 hashtaggdeteralltidenbloggpost
sikker på at dette funker for update-vals?
user> (def ipe300 {:r 15, :wy 557, :s 7.1, :prefix "IPE", :wz 80.5, :h 300, :b 150, :iz 6.04, :t 10.7, :iy 83.6, :profile 300, :a 5.38})
;; => #'user/ipe300
user> (update-vals ipe300 :r * 2)
Execution error (ArityException) at user/eval41937 (REPL:30).
Wrong number of args (4) passed to: clojure.core/update-vals
user> (doc update-vals)
-------------------------
clojure.core/update-vals
([m f])
m f => {k (f v) ...}
Given a map m and a function f of 1-argument, returns a new map where the keys of m
are mapped to result of applying f to the corresponding values of m.
;; => nil
Såvidt jeg kan se av docstring, har ikke update-vals
en variadisk variant?https://ask.clojure.org/index.php/12107/update-keys-and-update-vals-missing-the-args-from-update
Jeg går videre med
(defn scale
"Shrink or expand a profile with a factor"
[profile factor]
(-> (select-keys profile geometry-parameters)
(update-vals (partial * factor))))
. Samme signatur, navn og parametre som cjohansens alternativ 3, men partial for å få koden til å funke.
Det jeg likte med (scale-by profile * factor)
var at * var eksplisitt. Men den gir et bredere grensesnitt enn (scale profile factor)
, og jeg har ingen argumenter for at det skal skaleres med noe annet enn *
.
(jeg skal bruke dette til å lage pene SVG-er som har riktig stroke width på streken med små / store figurer. Fant ut at jeg kunne skalere domeneobjektene mine, og la “lag SVG”-funksjonen være).
Takk for innspill! 💯 🙌Denne videoen var ganske morsom 😂 https://www.youtube.com/watch?v=SGBuBSXdtLY Se noen kodere prøve å lese en jumbo Clojure-funksjon… uten å kunne Clojure fra før av.
Er det noen som vet årsaken til denne feilen når jeg starter Emacs? :thinking_face: Jeg finner ingen referanse/path til mappen "projectile" i fila init.el
Jeg bruker en fork av @magnars sin config (uendret enn så lenge): https://github.com/leifericf/emacsd-reboot
Et annet Emacs-relatert spørsmål: Nå holder jeg på å sette opp støtte for Fennel. Det gjøres slik (https://git.sr.ht/~technomancy/fennel-mode):
(autoload 'fennel-mode "/path/to/fennel-mode/fennel-mode" nil t)
(add-to-list 'auto-mode-alist '("\\.fnl\\'" . fennel-mode))
Men! Hvor er det lurt å putte de linjene der?
Hvis jeg tenker rett, og følger malen til @magnars, bør jeg lage en ny fil (f.eks. fennel.el
) under settings
mappa, og putte alt som har med Fennel (og kanskje Lua) å gjøre inn der.