-
-
Notifications
You must be signed in to change notification settings - Fork 234
Open
Labels
Description
Summary
This issue tracks the implementation of language modes for languages that are commonly supported by other editors (VS Code, Emacs, Neovim) but are currently missing in Lem.
Background
Lem currently supports 38 language modes. Other major editors support 60+ languages out of the box. This gap affects Lem's competitiveness as a general-purpose editor.
High Priority (Popular Languages)
These are widely-used languages that should be prioritized:
- C++ - TIOBE rank make lem.asd loadable. #2, essential for systems/game development
- PHP - TIOBE rank Don't crash when write-squence is called on buffer-output-stream with string #6, widely used in web development
- C# - TIOBE rank eval-print-last-sexp raises an error when evaluating atom at the start of buffer #5, essential for .NET/Unity
- Clojure - Lisp dialect, important given Lem's Lisp heritage
- Kotlin - TIOBE rank info-popupの挙動? #14, official Android language
- Perl - TIOBE rank add '[del]' and bind. #19, text processing and scripting
Medium Priority (Domain-Specific)
Languages important in specific domains:
- LaTeX/TeX - Essential for academic/technical documents
- R - Data science and statistics
- Julia - Scientific computing (fast-growing)
- F# - Functional programming on .NET
- Groovy - Jenkins/Gradle build scripts
- SCSS/Sass - CSS preprocessor, standard in web dev
- Less - CSS preprocessor
- Dockerfile - Container definitions, essential for DevOps
- PowerShell - Windows administration
- Objective-C - iOS/macOS legacy development
- D - Systems programming language
Low Priority (Niche/Legacy)
- CoffeeScript - JavaScript alternative (declining)
- Svelte - Web framework
- Handlebars - Template engine
- Pug/Jade - HTML template
- Slim - HTML template (Ruby)
- Pascal/Delphi - Legacy
- Visual Basic - Legacy
- BibTeX - Bibliography management
- INI - Config file format
- ABAP - SAP
- ShaderLab - Unity shaders
- Razor - ASP.NET templates
- XSL/XSLT - XML transformation
- CUDA - GPU computing
- Batch (.bat) - Windows scripts
- Stylus - CSS preprocessor (declining)
Emerging Languages (Future Consideration)
- Zig - Next-gen systems language
- Gleam - Typed language on BEAM VM
- Crystal - Ruby-like compiled language
- Fennel - Lisp on Lua
- Janet - Embeddable Lisp
- Odin - Game development
Implementation Notes
Each language mode should ideally include:
- Syntax highlighting (regex-based or tree-sitter)
- Indentation support (
calc-indent-function) - LSP configuration (if language server exists)
- begin/end-of-defun navigation
Minimum Implementation
(define-major-mode <lang>-mode language-mode
(:name "<Language>"
:keymap *<lang>-mode-keymap*
:syntax-table *<lang>-syntax-table*
:mode-hook *<lang>-mode-hook*))References
- Existing modes:
extensions/rust-mode/,extensions/go-mode/ - LSP config examples:
extensions/python-mode/lsp-config.lisp - Tree-sitter examples:
extensions/json-mode/tree-sitter/
Contributing
Contributions are welcome! If you'd like to implement a language mode:
- Check if tree-sitter grammar exists for the language
- Check if LSP server exists
- Create a new directory under
extensions/ - Follow existing mode patterns
Please comment on this issue if you're working on a specific language to avoid duplication.
vindarel