Draft:Lem

Lem is a text editor/IDE developped in Common Lisp heavily inspired by GNU Emacs and Neovim. Its extensibility is comparable to Emacs in the sense that both are extensible with a Lisp language, in the case of Lem, it's extensible with Common Lisp. It uses SBCL as the main implementation to compile the project, but it supports other implementations.

Commands
In its normal editing mode, Lem behaves similarly to GNU Emacs by allowing the user to type text with the keyboard and move the editing point with arrow keys. Pressing the control key and/or the alt key in conjunction with a regular key produces modified keystrokes. Commands such as  combine multiple modified keystrokes.

There is also a convenient "vi-mode" (despite the name, it emulates vim more than plain vi) which enables Lem to behave in a similar matter, using "normal", "insert" and "visual" vim-like commands.

Major modes
Lem can display or edit a variety of different types of text and adapts its behavior by entering add-on modes called "major modes". There are major modes for many different purposes including editing ordinary text files, the source code of many markup and programming language. Each major mode involves a Common Lisp program that extends the editor to behave more conveniently for the specified type of text. Major modes typically provide some or all of the following common features:


 * Syntax highlighting: combinations of fonts and colors.
 * Automatic indentation to maintain consistent formatting within a file.
 * Special editing commands, such as commands to jump to the beginning or the end of a function while editing a programming file.

A number of major modes are provided by default that help editing different types of programming languages, including popular ones like Python, JavaScript, Java, Go or again Rust, as well as modes for markup languages like Markdown, HTML, CSS, XML, JSON or again YAML.

Lem also has a directory mode heavily inspired by GNU Emacs' Dired.

Minor modes
The use of "minor modes" enables further customization. A Lem buffer can use only one major mode at a time, but multiple minor modes can operate simultaneously. This allows an easy way to extend the behavior of a major mode.

Extensibility
Lem can be modified and extended in Common Lisp, a multi-purpose programming language which (unlike Emacs Lisp for example) is not tied to the editor. It is possible to add new commands and major-modes, or again to change the editor's behavior while it runs, thanks to Common Lisp's image-based development.

It has built it support for LSP, making it suitable for editing other programming languages that would not have a default major mode.

Performance
Lem's performance should be really good when compiled with SBCL, mostly because SBCL is a high-performance native compiler, so Lem can use all its optimizations by default.