lem icon indicating copy to clipboard operation
lem copied to clipboard

Things I miss (a lot!) in Lem

Open svetlyak40wt opened this issue 6 years ago • 20 comments

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

  1. Things I miss (a lot!) in Lem
    1. A ChangeLog.md
    2. Bindings
      1. (DONE) C-c ~ (or C-c v) repl-sync to syncronize current package
      2. (DONE) C-w to delete previous word
      3. (DONE) Undo is not bound to C-/
      4. (DONE) Paredit should indent line after the new-line
      5. (DONE) Something like C-u C-Space or pop-global-mark
      6. (partial) C-s C-w - to search thing a point
      7. (DONE) Double C-s should start searching a previous term
      8. (OK) C-c x to export symbol at point (as in SLY)
    3. Gotchas
      1. Unable to start Lem's lisp repl when you already connected to other Lisp process and have a REPL
      2. (DONE) Lisp-mode should kee history between restarts
      3. (DONE) Grep should search in the whole project
      4. C-u C-c C-c should compile defun with (optimize (debug 3) (safety 3) (speed 0))
    4. Modes
      1. (MERGED) Package Manager
      2. Lispy-mode
      3. (third-party) Bookmarks
      4. (STARTED) Org-Mode
      5. (STARTED) Magit
      6. Helm
      7. (OK) Projectile (with helm integration)
      8. (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 [2024-07-24]

DONE C-w to delete previous word

  • State "DONE" from [2019-08-26 Mon 09:27]

(Can be bound to backward-delete-word

DONE Undo is not bound to C-/

  • State "DONE" from [2019-08-26 Mon 19:54]

(DONE) Paredit should indent line after the new-line

  • DONE

(DONE) Something like C-u C-Space or pop-global-mark

  • DONE: use C-space and C-x C-x exchange-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-grep bound to C-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

svetlyak40wt avatar Aug 26 '19 17:08 svetlyak40wt

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.

svetlyak40wt avatar Aug 26 '19 17:08 svetlyak40wt

What do you mean by package manager?

snmsts avatar Aug 27 '19 04:08 snmsts

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?

svetlyak40wt avatar Aug 27 '19 07:08 svetlyak40wt

Implemented a subset of the Lispy's functionality in the Pareto mode.

svetlyak40wt avatar Jan 13 '20 17:01 svetlyak40wt

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.

svetlyak40wt avatar Jan 13 '20 17:01 svetlyak40wt

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).

vindarel avatar Jun 14 '23 13:06 vindarel

treemacs, centaur tabs

rajcspsg avatar Jun 14 '23 14:06 rajcspsg

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.

vindarel avatar Jun 14 '23 14:06 vindarel

treemacs, centaur tabs

There are tabs already, but not as polish as centaur tabs :+1:

Sasanidas avatar Jun 14 '23 16:06 Sasanidas