Common Lisp editor/IDE with high expansibility
ls
and pwd
by @cxxxr in https://github.com/lem-project/lem/pull/842
:set
& :cd
by @fukamachi in https://github.com/lem-project/lem/pull/908
lem.asd
. by @pseudomata in https://github.com/lem-project/lem/pull/973
lem:this-command-keys
and lem:universal-argument-of-this-command
by @fukamachi in https://github.com/lem-project/lem/pull/986
.
to repeat the last operator command by @fukamachi in https://github.com/lem-project/lem/pull/989
dd
to delete to the end of buffer when the arg is larger than the number of line by @fukamachi in https://github.com/lem-project/lem/pull/995
.
by @fukamachi in https://github.com/lem-project/lem/pull/1000
*this-command-keys*
by @fukamachi in https://github.com/lem-project/lem/pull/1006
diw
and daw
to vi-mode by @fukamachi in https://github.com/lem-project/lem/pull/1012
l
invoked on an empty line not to go to the previous line. by @fukamachi in https://github.com/lem-project/lem/pull/1017
i"
, a"
, i(
and a(
by @fukamachi in https://github.com/lem-project/lem/pull/1014
$
allow to take a uarg. by @fukamachi in https://github.com/lem-project/lem/pull/1038
o
for visual mode to swap points by @fukamachi in https://github.com/lem-project/lem/pull/1037
S
to delete the whole line (same as cc
). by @fukamachi in https://github.com/lem-project/lem/pull/1040
gg
allow to take a uarg by @fukamachi in https://github.com/lem-project/lem/pull/1039
scrolloff
option to vi-mode by @fukamachi in https://github.com/lem-project/lem/pull/1035
Y
to yank to the end of the line by @fukamachi in https://github.com/lem-project/lem/pull/1041
r
to work in visual block state by @fukamachi in https://github.com/lem-project/lem/pull/1036
c
flag to :s
. by @fukamachi in https://github.com/lem-project/lem/pull/1046
vi-line
by @fukamachi in https://github.com/lem-project/lem/pull/1049
diw
at the beginning spaces (indent) of the line not to delete newlines by @fukamachi in https://github.com/lem-project/lem/pull/1051
:vs
by @fukamachi in https://github.com/lem-project/lem/pull/1058
<Leader>
key to vi-mode. by @fukamachi in https://github.com/lem-project/lem/pull/1079
H
, M
, L
not to scroll when scrolloff
option is set. by @fukamachi in https://github.com/lem-project/lem/pull/1081
x
not to raise an error for an empty buffer. by @fukamachi in https://github.com/lem-project/lem/pull/1082
o
to indent properly. by @fukamachi in https://github.com/lem-project/lem/pull/1083
window-has-following-lines-p
to work when the last displayed line is wrapped by @fukamachi in https://github.com/lem-project/lem/pull/1084
=
and J
not to include the next line. by @fukamachi in https://github.com/lem-project/lem/pull/1087
dG
to delete to the end of the buffer instead of the beginning. by @fukamachi in https://github.com/lem-project/lem/pull/1088
window-has-following-lines-p
not to mistake an empty line as the buffer end by @fukamachi in https://github.com/lem-project/lem/pull/1090
cc
not to raise an error in an empty buffer. by @fukamachi in https://github.com/lem-project/lem/pull/1091
(def |foo bar|
by @cxxxr in https://github.com/lem-project/lem/pull/1114
dc
in vi-mode by @cxxxr in https://github.com/lem-project/lem/pull/1119
x
, X
, S
in visual block state. by @fukamachi in https://github.com/lem-project/lem/pull/1131
WORD
text object. by @ilya-fiveisky in https://github.com/lem-project/lem/pull/1160
prompt-for-directory
when certain keyword arguments are given by @fukamachi in https://github.com/lem-project/lem/pull/1167
markdown-mode
command markdown-insert-link
by @Sasanidas in https://github.com/lem-project/lem/pull/1169
Full Changelog: https://github.com/lem-project/lem/compare/v2.1.0...v2.2.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.
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
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/lem-page/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
For more information about testing: https://lem-project.github.io/lem-page/development/implementations-details/
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/lem-page/modes/elixir/
M-x open-at-poin
For now, it can detect and correctly open, symbols definitions, paths and URLs.
https://github.com/lem-project/lem/assets/13656378/fef2534b-e952-4777-87bb-dede04f7fa66
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/lem-page/usage/usage/#find-file-in-project
fd
if it finds it, allowing to exclude typical files and folders (node_modules/, .git/ etc).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.s
sorts files by last modification time, then by size, then back to alphabetical order.help
command was added.space
, +
, -
, _
I have implemented a feature to graphically display the inheritance relationship of classes in a tree structure.
https://github.com/lem-project/lem/assets/13656378/5d4e998e-b69a-4e89-9638-c5aecd0874cc
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.
Changed the UI for evaluating expressions with C-x C-e
.
https://github.com/lem-project/lem/assets/13656378/0af6911b-440a-4a8e-9351-9d2314cb7151
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.
https://github.com/lem-project/lem/assets/13656378/374cc4c4-55bf-4c1b-a380-8b9bcf2756b2
You can trace the selected function using M-x lisp-toggle-trace (C-c C-t)
.
https://github.com/lem-project/lem/assets/13656378/95c6f891-2709-4699-87b2-292d75345065
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.
https://github.com/lem-project/lem/assets/13656378/cffd9dca-a6e3-4fd5-aec5-2313dfe90299
Expressions using micros:watch
will display the evaluation results on the right side
display details of the currently selected symbol.
Improved displayed by M-x lisp-describe-symbol (C-c C-d d)
quickload
command in REPL shortcut. It offers autocompletion on the available Quicklisp packages and installs the selected one.
,change-package
, ,quickload
, ,cd
, ,sayonara
.,ql
.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
https://github.com/lem-project/lem/issues/688
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 ?
.
Added sidebar and filer.
You can open it with C-x d
.
M-x toggle-frame-fullscreen
, added set-display-title
.accelerated
to software
https://github.com/lem-project/lem/pull/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)
M-q
the key binding for the standard close operation
https://github.com/lem-project/lem/pull/770
The highlight of this release is the implementation of the SDL2 frontend. This feature adds mouse support, graphic capabilities, and Windows support.
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.
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.
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.
Furthermore, the selected theme is saved as a plist in $HOME/.lem/config.lisp and applied when the editor is restarted.
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).
Furthermore, I've updated the design of the completion window that appears with commands like C-x C-f.
I've improved the UI for displaying multiple candidates when using grep
or M-.
I've improved the display when opening directories using M-x Find File(C-x C-f). Major updates include:
I've made completion calculations asynchronous. This improvement reduces lag during completion calculations.
Several minor improvements have been made:
Many bug fixes and refactorings for vi-mode have been contributed by @theangelperalta.
There have been numerous other changes, including:
There are several unresolved issues related to SDL2:
define-command
arg-descriptor doesn’t have compatibility with old versions.define-xxxx
. Before this version, it was only highlighted until define-
.slime
command becomes non-blocking. While connecting swank-server animation on mode-line would be shown.define-xxxx
のdefine-
までしか色がつかなかかったのを修正。M-x describe-bindings
get-prompt-input-string
interface.rectangle-string
are implemented.See ChangeLog.md
see ChangeLog.md