Draft:Lem

From Wikipedia, the free encyclopedia
  • Comment: No citations or references at all. If this information is first-hand, possible conflict of interest also. -- NotCharizard 🗨 17:39, 26 August 2023 (UTC)

Lem
Original author(s)cxxxr
Stable release
2.1 / 18 July 2023
Written inCommon Lisp
Operating systemLinux, macOS, Windows
PlatformCross-platform
Available inEnglish
TypeText editor
License MIT
Websitelem-project.github.io/lem-page/

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[1].

Editing with Lem[edit]

Commands[edit]

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 save-buffer 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[2].

Major modes[edit]

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[3] 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[4].

Minor modes[edit]

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[edit]

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[5][6]. 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[7], making it suitable for editing other programming languages that would not have a default major mode.

Performance[edit]

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

References[edit]

Category:Free file comparison tools Category:Free integrated development environments Category:Free software programmed in Lisp Category:Free text editors Category:Linux integrated development environments Category:Linux text editors Category:MacOS text editors Category:Text editors Category:Unix text editors Category:Windows text editors