1986 - ZX Spectrum 48 Kbyte RAM+ROM, Z80 Assembly, 4th Forth, ~9yo
1993 - 386DX40 4MB RAM
1994 - Microchip PIC16C84 MCU
8-bit data, 12/14-bit code, 8-level stack Assembly, Mary Forth & Flash Forth
bash
q.exe
)vim
& screen
TextMate
on PPC iBookSublime Text 2
under both Linux & MacDip toes into JetBrains’ RubyMine
, but went back to SublimeText
Tried every editor under the sun for editing with proportional fonts
and editing Clojure, without a REPL, using boot
& its reloading
capabilities.
Sublime Text 3
+ SublimeREPL
Emacs
+ CIDER
/ inf-clojure
NetBeans
Eclipse
Atom
(now Pulsar
) + Chlorine
jEdit
LightTable
VS Code
+ Calva
vim
+ Fireplace
/ vim-iced
and all the niche ones, like:
Liquid
https://github.com/mogenslund/liquid (https://salza.dk/)Nightcode
https://github.com/oakes/NightcodeNightlight
https://sekao.net/nightlight/Paravim
https://sekao.net/paravim/While looking for a rowanj GitX
alternative, I remembered from
RubyMine
, how good its VCS support was, so I spent a week learning
IntelliJ CE (Community Edition)
and another week Cursive
and
structural editing, then taught my 5 people team in another ~2 weeks,
by pair-programming with them in rotation.
Emacs
again, but
more seriously. I had about 2-3 previous failed attempts to learn it
in the previous decades. No one, who was a proponent of it could use
it as well, as I could use other editors…Mostly because of the limitations, I think it’s a lot easier to teach Clojure, but it’s also faster to make new-comers effective.
For that reason, I think bbatsov’s inf-clojure
has a great potential
to be a beginner tool, if we could bridge the differences between the
Emacs philosophy and the CUA / IDE land, by either
come up with an Emacs syllabus, which is quick and easy to learn.
port back some of the features into Emacs, if they are philosophically compatible
I don’t have extensive experience with the following tools, but I saw them break 1st hand, when I was trying them 1-3 years ago.
If the use of clojure-lsp
would be as reliable as Cursive
’s, then
inf-clojure
would make even more sense.
Nowadays clojure-lsp
has actually already surpassed Cursive
in its
refactoring capabilities, but Emacs’ built-in eglot
LSP client seems to be
a bit flaky still and lsp-mode
is a bit heavy, custom rolled, opinionated
and doesn’t extensively leverage Emacs’ built-in facilities.
Treesitter integration is not really there yet stability-wise, though it would be a great way for static-analysis based
Extend / Shrink selection
actions with Opt-Up/Down
+ Left/Right
In vanilla Emacs
backward-up-list
(C-M-<up>/u
)mark-sexp
(C-M-SPC
)exchange-point-and-mark
(C-x C-x
)
or expand-region.el
C-=
repeatedlyRecent Files
(Cmd-E
) action
slurp/barf only forwards is largely enough Cmd-Shift-J/K
refactoring (Ctrl-T
, like refacTor)
Cmd-Shift-C
copies full-path, but we need the fully-qualified namespace
symbolclojure-lsp rename --from some.name.space --to other.name.space
https://clojure-lsp.io/
brew remove clojure-lsp
brew install clojure-lsp/brew/clojure-lsp-native
let
blockletfn
and verify it worksletfn
to top-levelletfn
and just delete line
it, to clean upThe following constraints are very useful for beginners IMHO and take away a lot of mental burden.
Built-in Send Top Form to REPL
binding Cmd-Shift-P
is a bit quirky,
though it blends in well with other default bindings.
In vanilla Emacs it’s eval-defun
(C-M-x
like eXecute)
In CIDER it’s cider-eval-defun-at-point
(C-M-x
too)
or cider-pprint-eval-defun-at-point
(C-c C-f
, like deFun?)
or a handful of other options and bindings.
It’s too many options for a beginner and still a lot of mental overhead even for a seasoned user, though I’m beginning to feel the need for these after about a decade of development :)
Send Form Before Caret
sparsely
Re-execute last command
REPL command
Cmd-Ctrl-Enter
& ^C C
defprotocol
s, because that would invalidate existing usages :(