Skip to content

Releases: lem-project/lem

Nightly Build - 20251127-0142

10 Aug 19:45
378cb30

Choose a tag to compare

Pre-release
Merge pull request #2006 from mychris/feature/bookmark-extension

Adds a new bookmark package.

Nightly Build (macOS) - 20250810-1943

10 Aug 18:19

Choose a tag to compare

Pre-release

To launch lem.app, execute the following command

xattr -dr com.apple.quarantine lem.app/

Nightly Build (Linux) - 20250810-0811

10 Aug 08:11

Choose a tag to compare

Pre-release

Automatic nightly build from main branch

Commit: e89fac5

Nightly Build (Linux) - 20250810-0102

10 Aug 01:02
90cbd65

Choose a tag to compare

Pre-release

Automatic nightly build from main branch

Commit: 90cbd65

Nightly Build (Linux) - 20250810-0054

10 Aug 00:54

Choose a tag to compare

Pre-release

Automatic nightly build from main branch

Commit: c1f1379

Nightly Build (Linux) - 20250809-1923

09 Aug 19:23

Choose a tag to compare

Pre-release

Automatic nightly build from main branch

Commit: ae4339f

v2.3.0

15 Jul 13:23

Choose a tag to compare

What's Changed

Read more

v2.2.0

09 Feb 15:09

Choose a tag to compare

What's Changed

Read more

v2.1.0

18 Jul 10:36
e6586e2

Choose a tag to compare

We are happy to release Lem 2.1.0.

The highlights of this release are many: a new files viewer on the sidebar, many Common Lisp editing improvements, project-aware commands, a website with documentation, support for more Common Lisp implementations, and many more.

This release is brought to you by old and new contributors, many thanks to them! In no particular order: @Neshamon, @jcs090218, @theangelperalta, @avitkauskas, @snmsts, @RadSpaceEd, @jsparkes, @BierLiebHaber, @t-sin, @VitoVan, @seanfarley, @vindarel, @Sasanidas and @cxxxr.

We have decided to write this release note for each author of each Pull Request as an experiment.

@Sasanidas

Website

Detective (imenu)

  • [Added] Add imenu (detective) support for Lem

Detective is the imenu equivalent from GNU Emacs, the key different is from a design perspective, is ready to be expanded and work with different source sources(tree-sitter for example) rather than mostly work with regex (even tho this is the default search behavior).

The new imenu-like commands are:

  • M-x detective-function : Shows a prompt with auto-completion of the current functions on the buffer.
  • M-x detective-class : Shows a prompt with auto-completion of the current classes on the buffer.
  • M-x detective-package : Shows a prompt with auto-completion of the current packages on the buffer.
  • M-x detective-variable : Shows a prompt with auto-completion of the current variables on the buffer.

Also, two new movement commands, that moves from reference to references on the buffer:

  • M-x detective-next : Moves the point(cursor) to the next reference.
  • M-x detective-previous : Moves the point(cursor) to the previous reference.

For now, this functionality is only available on Common Lisp buffers.

https://vimeo.com/845685109?share=copy

Emacs Lisp mode

  • [Added] Add support for Emacs Lisp
    A new major mode for editing Emacs Lisp code, with the ability to connect to a GNU Emacs
    instance to get more updated information.

The main idea of this is to help users to test the difference between Emacs Lisp and Common Lisp and also in the future to port some Emacs Lisp functionality from working within Lem itself.
https://lem-project.github.io/modes/elisp

  • [Added] RPC Emacs↔Lem
    This simple GNU Emacs package is meant to be used for interaction with internal
    Emacs utilities from Lem, for now only supports some basic operations with auto-completion.
    https://github.com/lem-project/lemmigton

    emacs-lisp

Support for ECL, ABCL, Clasp and CCL

  • [Added] Lem with other CL implementations
    For now, still SBCL is the main implementation, ECL and CCL should work fairly well
    and ABCL and Clasp are still work in progress, working but with minor bugs.

For more information about testing:
https://lem-project.github.io/development/implementations-details/

Elixir mode

  • [Added] Basic support for Elixir language
    A new major mode for the Elixir programming language, with basic syntax highlight and REPL interaction with the command M-x run-elixir

For a more complete experience, it’s also recommended to use LSP server (https://github.com/elixir-lsp/elixir-ls), for more information about the capabilities and how to configure it:
https://lem-project.github.io/modes/elixir/

Thing at point

  • [Added] Add thingatp functionality
    The idea of this feature is to mimic the equivalent version of GNU Emacs but with an interactive approach, for a more interactive usage. There is a simple command that can be trigger “at point” (or cursor) M-x open-at-poin

For now, it can detect and correctly open, symbols definitions, paths and URLs.

thingatp.mp4

@vindarel

Project-aware commands

  • added: M-x project-find-file allows to choose a file among the list of all files pertaining to the current project. This command is bound to C-x p f. See more: https://lem-project.github.io/usage/usage/#find-file-in-project
    • this command uses fd if it finds it, allowing to exclude typical files and folders (node_modules/, .git/ etc).
  • more project-aware commands were added: switch project, delete buffers, project-root, project-root-directory…

Find files recursively

  • added: M-x find-file-recursively, not bound to a key by default, does the same as project-find-file but starts at the buffer’s directory, not at the project root.

Directory-mode

  • added: pressing s sorts files by last modification time, then by size, then back to alphabetical order.

Other

  • a simple help command was added.
  • added more vi keys: space, +, -, _
  • the right Alt key (sometimes referedd to as Alt Gr) is not recognized as an Alt key anymore, allowing to use it to write characters as it is meant to.
  • more fixes, translations and improvements.

@cxxxr

Lisp Mode

Class Inheritance Tree

I have implemented a feature to graphically display the inheritance relationship of classes in a tree structure.

class-inheritance-tree.mp4

You can use M-x lisp-browse-class-as-tree to display the inheritance tree with the specified class as the root.

You can also open an inspector by selecting a node.

Currently, this feature is only available for SDL2.

Evaluating and printing

Changed the UI for evaluating expressions with C-x C-e.

eval.mp4

When you call M-x show-context-menu (M-h) on the expression targeted by the evaluation result, you can select an action (such as inspect) for the evaluation value.

It is now possible to associate the output strings and objects in REPL.
Using the micros:micros-print function allows you to print values to the REPL and perform inspect.

print.mp4

You can trace the selected function using M-x lisp-toggle-trace (C-c C-t).

trace.mp4

You can choose the values of arguments and return values, and inspect them.

You can also use the M-x lisp-trace-list (C-c T) command to display a list of currently traced functions and untrace them.

It is now possible to micros:watch a specific value in real time.

watcher.mp4

Expressions using micros:watch will display the evaluation results on the right side

Completion

display details of the currently selected symbol.

https://user-images.githubusercontent.com/13656378/244414425-e36e2d9a-1630-4ce5-bdf4-5bacfb131536.png

Describe symbol

Improved displayed by M-x lisp-describe-symbol (C-c C-d d)

describe-symbol

REPL

  • Added the quickload command in REPL shortcut. It offers autocompletion on the available Quicklisp packages and installs the selected one.
    • all REPL shorcuts start with a coma: ,change-package, ,quickload, ,cd, ,sayonara.
    • tip: fuzzy completion allows to type ,ql.
  • Show loading spinner during evaluation

Micros (forked SLIME)

I created a repository called micros, which is a fork of slime in lem-project, and used it in lem.

For more information, please see the issue below

#688

Documentation Mode

https://user-images.githubusercontent.com/13656378/243097762-e803cfd2-c433-4774-a7a2-573b1d0aa8d0.png

The documentation mode displays commands and their bindings in the lem buffer.

The commands are clickable and selecting them will jump to their definition location.

You can display it with M-x documentation-describe-bindings.

It comes in addition of the describe-.* commands, such as describe-key bound on C-x ?.

Filer / Sidebar

Added sidebar and filer.

https://user-images.githubusercontent.com/13656378/244865248-cdd9715e-9992-4980-974b-3fca230f074b.png

You can open it with C-x d.


SDL2

  • sdl2: fix retina mouse coordinates by @seanfarley
    #822
  • Fix some minor SDL2 paper cuts by @seanfarley
    #831
    • added M-x toggle-frame-fullscreen, added set-display-title.
  • fix blurry text on Apple retina display by @VitoVan
    #799
  • Add a launcher script for SDL2 frontend for roswell users by @t-sin
    #637
  • Improved display of images to buffer: added commands for scaling and display of resolution in mode line
    #629
  • add a super key support in SDL2
    https://github.com/lem...
Read more

v2.0.0

22 May 11:45

Choose a tag to compare

SDL2 Frontend

The highlight of this release is the implementation of the SDL2 frontend. This feature adds mouse support, graphic capabilities, and Windows support.

Graphics

Thanks to SDL2's graphics feature, it is now possible to display images and shapes. You can draw at any location on a specified buffer or window.
screenshot-1

Mouse Support

I've added support for mouse clicks and scrolling. Moreover, inserting S-expressions at the cursor position with a middle mouse click, as well as selection by double-click or triple-click, has been made possible.

Addition of Color Themes

Until now, the default themes were limited to emacs-dark and emacs-light. However, with this release, I've added over 180 new themes. These themes were created by @lukpank.
https://github.com/lukpank/lem-base16-themes

Additionally, I've added the M-x list-color-themes command, which allows you to display and select from the list of available themes.

color-theme

Furthermore, the selected theme is saved as a plist in $HOME/.lem/config.lisp and applied when the editor is restarted.

UI Improvement

I have significantly improved the default look of lem. I've changed the look & feel of elements such as floating-window borders, frame-multiplexer tabs, and the mode line. Moreover, I've added highlighting to the line at the cursor position.

I've also revamped the UI for listing buffers (C-x C-b) and displaying the slime connection list (M-x lisp-connection-list).

list-buffers

Furthermore, I've updated the design of the completion window that appears with commands like C-x C-f.

grep

I've improved the UI for displaying multiple candidates when using grep or M-.

screenshot-grep

directory-mode

I've improved the display when opening directories using M-x Find File(C-x C-f). Major updates include:

  • Display of emojis corresponding to files
  • Added mouse support
  • Ability to open files not supported by lem with external programs

screenshot-directory-mode

Asynchronous Completion

I've made completion calculations asynchronous. This improvement reduces lag during completion calculations.

Lisp Mode

Several minor improvements have been made:

  • Indent adjustment when yanking
  • Addition of a feature that does not insert ')' when there's no corresponding opening parenthesis
  • Adjustment of output position to REPL
  • Hovering over underlined parts during function/file compilation pops up messages

compile-error

vi-mode

Many bug fixes and refactorings for vi-mode have been contributed by @theangelperalta.
vi-mode

Other Changes

There have been numerous other changes, including:

  • Add var and defun for removing trailing whitespace on save #608 (@rearman )
  • Close socket gracefully when `slime-quit' #622 (@kchanqvq )
  • Addition of json-mode
  • Minor changes and large-scale refactoring, such as replacing internal modules used in lsp-mode, language-server
  • A significant number of bug fixes

Known Issues

There are several unresolved issues related to SDL2:

  • The SDL2 frontend may not work with certain graphic drivers, especially when installing graphic drivers on Linux.
  • On Linux, the system may become unresponsive when returning from suspend.
  • Modifier key changes in macOS settings or Linux's xmodmap may not be reflected.