v2.1.0
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
- Lem now has a web page: https://lem-project.github.io/ It is also translated in Chinese (and hopefully, soon in Japanese)
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
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 commandM-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 toC-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).
- this command uses
- 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 asproject-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.
Describe symbol
Improved displayed by M-x lisp-describe-symbol (C-c C-d d)
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
.
- all REPL shorcuts start with a coma:
- 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
Documentation Mode
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.
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
, addedset-display-title
.
- added
- 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
#633 - SDL2: change renderer option from
accelerated
tosoftware
#787
It is also possible to have a transparent background, with this line (to put in your Lem init file):
(sdl2-ffi.functions:sdl-set-window-opacity (lem-sdl2::display-window lem-sdl2::*display*) 0.9)
Functions
- Fixed overlays not being considered when finding the x position in a window by @BierLiebHaber
#815 - Add bindings for C-Home and C-End to jump to beginning and end of buffer by @jsparkes
#779 - Correct spelling of associate. by @jsparkes
#798 - Implement get-font-list for windows. by @jsparkes
#800 - Added C-S-Backspace command that kills the whole line by @RadSpaceEd
#723 - fix error on build by @snmsts
#651 - Make
M-q
the key binding for the standard close operation
#770 - Specify by base color names
#814
Document
- Document some color theme functions by @Neshamon
#760 - feat(lisp-mode): Add command to eval buffer by @jcs090218
#668 - chore: Document some point commands by @jcs090218
#670 - chore: Document functions in other.lisp by @jcs090218
#671 - chore: Document clipboard.lisp by @jcs090218
#675 - chore: Document some functions in window.lisp by @jcs090218
#681 - chore: Document functions in echo.lisp by @jcs090218
#685 - chore: Document color.lisp by @jcs090218
#689 - chore: Document version.lisp by @jcs090218
#704 - chore: Document command.lisp by @jcs090218
#740
vi-mode
- [VI-MODE] • Enhance define-vi-state to allow expose more of the defclass CLOS functionality. by @theangelperalta
#700 - fix typo in name vi-open-adove by @avitkauskas
#655