27
Lite XL - Fast, Lightweight, Extensible Text Editor
These are some of the text editors I've used:
- Notepad++
- Sublime Text 3 and 4
- VSCode
- Atom
After having tried different text editors I used to go with Sublime Text. It was somewhat lightweight (25 MB) and it was fast on small projects. This was until I ran into rxi/lite, a tiny (1 MB) and really fast text editor, which is incredibly easy to write plugins and syntax highlighting for. After having used this editor for some time, I realized that the editor wasn't really being updated anymore, this is where I ran into lite-xl. A fork of lite but with the focus on better rendering and even better performance.
One of the things I didn't like about Sublime Text was creating plugins and syntax highlighting. This is for Sublime Text:
Below is a syntax definition file for our logs. It is good for a starting point because it is simple.
patterns:
- name: text.command
match: \"command\":[0-9]{4}
- name: text.command_name
match: \"command_name\":\"(.*?)\"
captures:
'1': {name : text.command_name.1}
- name: text.fsm
match: (.*)(FSM :.*(\[.*\]).*)
captures:
'1': {name : text.fsm.prefix}
'2': {name : text.fsm.suffix}
'3': {name : text.fsm.event}
- name: text.errors
match: (.*(\"error_code\":[1-9]).*)
captures:
'1': {name : text.error.fullline}
'2': {name : text.error.code}
- name: text.ping
match: .*\"command\":8888.*
- name: text.exception.message
match: (.*)Exception(.*)
- name: text.exception.stacktrace
match: ^((?![0-9]{8}).)*$
- name: text.log.error
match: .*\| E \|.*
Sure, while that might be somewhat simple, that is not fully complete syntax highlighting for a regular programming language, that would require more definitions. Try however, to take a look at this:
-- mod-version:1 -- lite-xl 1.16
local syntax = require "core.syntax"
syntax.add {
files = { "%.wren$" },
comment = "//",
patterns = {
{ pattern = "//.-\n", type = "comment" },
{ pattern = { "/%*", "%*/" }, type = "comment" },
{ pattern = { '"', '"', '\\' }, type = "string" },
{ pattern = { "'", "'", '\\' }, type = "string" },
{ pattern = "-?%.?%d+", type = "number" },
{ pattern = "%.%.%.?", type = "operator" },
{ pattern = "[<>!=]=", type = "operator" },
{ pattern = "[%+%-=/%*%^%%<>!~|&?:]", type = "operator" },
{ pattern = "[%a_][%w_]*%s*%f[(\"{]", type = "function" },
{ pattern = "[%a_][%w_]*", type = "symbol" },
},
symbols = {
["break"] = "keyword",
["class"] = "keyword",
["construct"] = "keyword",
["else"] = "keyword",
["false"] = "keyword",
["for"] = "keyword",
["foreign"] = "keyword",
["if"] = "keyword",
["import"] = "keyword",
["in"] = "keyword",
["is"] = "keyword",
["null"] = "keyword",
["return"] = "keyword",
["static"] = "keyword",
["super"] = "keyword",
["this"] = "keyword",
["true"] = "keyword",
["var"] = "keyword",
["while"] = "keyword",
["this"] = "keyword2",
["true"] = "literal",
["false"] = "literal",
["null"] = "literal",
},
}
This is syntax highlighting for the Wren programming language, it's normal and short Lua code. The regex matching might look a bit unfamiliar if you're not used to Lua, and that's because Lua has it's own lightweight regex alternative called "patterns". It's almost exactly like regex, and does not take very long to learn.
Now how would make use of this syntax highlighting? You just move your .lua file into the lite-xl/plugins folder... that's it.
What if you wanted to edit the source code or change something about the application? You just open up the lite-xl directory and start making the changes you want. This can be anything from the interface to the way documents are processed and more. You have full customizability.
Plugins are also easy to make, and there's quite a lot to get inspiration and/or help from: https://github.com/lite-xl/lite-plugins
I highly recommend anyone to give lite-xl a try if they like minimalism, efficiency and extensibility: https://github.com/lite-xl/lite-xl
27