Things I miss (a lot!) in Lem
Today I've tried to use Lem for work on one of my pet projects. Here is the list of things I was lacking to be productive:
Table of Contents
-
Things I miss (a lot!) in Lem
- A ChangeLog.md
-
Bindings
- (DONE) C-c ~ (or C-c v) repl-sync to syncronize current package
- (DONE) C-w to delete previous word
- (DONE) Undo is not bound to C-/
- (DONE) Paredit should indent line after the new-line
- (DONE) Something like C-u C-Space or pop-global-mark
- (partial) C-s C-w - to search thing a point
- (DONE) Double C-s should start searching a previous term
- (OK) C-c x to export symbol at point (as in SLY)
-
Gotchas
- Unable to start Lem's lisp repl when you already connected to other Lisp process and have a REPL
- (DONE) Lisp-mode should kee history between restarts
- (DONE) Grep should search in the whole project
- C-u C-c C-c should compile defun with (optimize (debug 3) (safety 3) (speed 0))
-
Modes
- (MERGED) Package Manager
- Lispy-mode
- (third-party) Bookmarks
- (STARTED) Org-Mode
- (STARTED) Magit
- Helm
- (OK) Projectile (with helm integration)
- (STARTED) YaSnippet
Things I miss (a lot!) in Lem
A ChangeLog.md
Bindings
DONE C-c ~ (or C-c v) repl-sync to syncronize current package
- State "DONE" from
DONE C-w to delete previous word
- State "DONE" from
(Can be bound to backward-delete-word
DONE Undo is not bound to C-/
- State "DONE" from
(DONE) Paredit should indent line after the new-line
- DONE
(DONE) Something like C-u C-Space or pop-global-mark
- DONE: use
C-spaceandC-x C-xexchange-point-mark, see https://github.com/lem-project/lem/pull/1785/
to jump to the previous place where cusor was. Like bm-toggle function from Gnu Emacs.
With prefix argument (e.g., \\[universal-argument] \\[set-mark-command]), \ jump to the mark, and set the mark from position popped off the local mark ring (this does not affect the global mark ring). Use \\[pop-global-mark] to jump to a mark popped off the global mark ring (see `pop-global-mark').
(partial) C-s C-w - to search thing a point
There is a function isearch-forward-symbol-at-point
(edit: vi-mode has * and # that do exactly that)
(DONE) Double C-s should start searching a previous term
- DONE
(OK) C-c x to export symbol at point (as in SLY)
- DONE 90%: there is the command
M-x lisp-add-export.
Gotchas
Unable to start Lem's lisp repl when you already connected to other Lisp process and have a REPL
(DONE) Lisp-mode should keep history between restarts
Probably…
- DONE
(DONE) Grep should search in the whole project
I don't know where it searches, but only not in my project's root :(
Should work like helm-projectile-ag or helm-projectile-grep.
- DONE: there is now
M-x project-grepbound toC-x p g.
C-u C-c C-c should compile defun with (optimize (debug 3) (safety 3) (speed 0))
Modes
(MERGED) Package Manager
- merged: https://github.com/lem-project/lem-extension-manager/
Lispy-mode
(third-party) Bookmarks
- see https://github.com/mychris/lem-bookmark
(STARTED) Org-Mode
- it's brewing…
- 2025, August: organ-mode does: highlighting, (fast) parsing, viewing org-agenda todos, export to LaTeX. In early development.
(STARTED) Magit
- lem-legit: https://github.com/lem-project/lem/blob/main/extensions/legit/README.md
M-x legit-status
Helm
(OK) Projectile (with helm integration)
- project-aware commands were added (no special "helm integration")
(STARTED) YaSnippet
I hope these things will be solved someday. We should do a lot of work to make Lem a really feature full IDE for CL.
If somebody has his own list of "missing features", I'd like to learn about them.
What do you mean by package manager?
What do you mean by package manager?
I mean a way to discover and install third-party extesions (modes). Something like Gnu Emacs's M-x list-packages.
For example, I want to port a lispy-mode to lem. What do I need to to to make it available to all other Lem's users?
Implemented a subset of the Lispy's functionality in the Pareto mode.
By the way, probably, the package manager can use Ultralisp's API, to list all systems, tagged as lem. However, the tagging should be added to the Ultralisp.org first.
Projectile
A few project-related commands were added :rocket:
https://lem-project.github.io/lem-page/usage/usage/#find-file-in-project
M-x project-find-file
with auto-completion of a shrinking list, not far from Helm.
M-x project-delete-buffers, project-directory
C-x d (M-x filer) opens a tree view on the left at the project root
We can fix grep to search on the project root.
under src/commands/project.lisp.
edit: M-x project-switch was added (C-x p p).
treemacs, centaur tabs
treemacs
There's M-x filer (C-x d) added after Lem 2.0, a project file viewer (not managing many projects).
https://lem-project.github.io/lem-page/usage/usage/#filer
(Sure it's simpler, the base is here)
(edit) with the comment below I learned about tabs: M-x toggle-tabbar.
treemacs, centaur tabs
There are tabs already, but not as polish as centaur tabs :+1: