Evergreen
🌳 Treesitter support for Lite XL.
Evergreen adds Treesitter syntax highlighting support for Lite XL. It is work in progress, but functions well.
Warning Evergreen is only tested on Linux and will definitely not work on Windows.
Showcase
Without Evergreen | With Evergreen |
---|---|
Supported Languages
If you want more languages supported, open an issue.
Requirements
- Lite XL 2.1+ or Pragtical
- ltreesitter (automatic, manually or via LuaRocks)
Install
Express Install
Evergreen can be easily installed with Miq by adding this to your plugin declaration:
{'TorchedSammy/Evergreen.lxl'},
Manually
- Git clone Evergreen into Lite XL plugins directory Or symlink:
cd ~/Downloads
git clone https://github.com/TorchedSammy/Evergreen.lxl
ln -s ~/Downloads/Evergreen.lxl ~/.config/lite-xl/plugins/evergreen
ltreesitter Installation
Automatic
The easiest way to install ltreesitter is by not installing it at all! Evergreen will automatically download a compatible ltreesitter build and reload itself.
If it fails to download for any reason though, that should be reported as an issue here. In the mean time, ltreesitter can be installed manually.
Manual Install
The simplest way to install ltreesitter is to run the following command (assuming LuaRocks is installed):
luarocks install ltreesitter --local --dev
This may work, but ltreesitter does not officially support Lite XL. You may encounter problems when installing it via LuaRocks which might return error messages similar to these or cause crashes:
Sat Jun 17 13:36:37 2023 [ERROR] Failed loading /home/user/.luarocks/lib/lua/5.4/ltreesitter.so: /home/user/.luarocks/lib/lua/5.4/ltreesitter.so: undefined symbol: lua_checkstack at /home/user/.local/bin/lite-xl/data/core/init.lua:1226
stack traceback:
[C]: in function 'system.load_native_plugin'
[C]: in function 'require'
...hacuber2a03/.config/lite-xl/plugins/evergreen/parser.lua:2: in main chunk
[C]: in function 'require'
.../user/.config/lite-xl/plugins/evergreen/init.lua:21: in main chunk
[C]: in function 'require'
[C]: in function 'xpcall'
/home/user/.local/bin/lite-xl/data/core/init.lua:1225: in function 'core.try'
/home/user/.local/bin/lite-xl/data/core/init.lua:1013: in function 'core.load_plugins'
/home/user/.local/bin/lite-xl/data/core/init.lua:793: in function 'core.init'
[string "local core..."]:8: in function <[string "local core..."]:2>
[C]: in function 'xpcall'
[string "local core..."]:2: in main chunk
In that case, you need to install a special version of ltreesitter for Lite XL.
Note You must upgrade to the
master
version of Lite XL.
You can either compile ltreesitter via the command below:
git clone --recursive -b lite-xl-plugin-api https://github.com/takase1121/ltreesitter.git
cd ltreesitter
make ltreesitter.so
cp ltreesitter.so ~/.config/lite-xl/ltreesitter.so
Or download an appropriate release from here, where ltreesitter.so is Linux, and ltreesitter.dll is Windows.
Usage
To use Evergreen, you have to install the parser for your language of choice.
This can be done with the Evergreen: Install
command.
The next thing to do is add style variables for the highlighting groups in your config. This can be done like:
local style = require 'core.style'
style.syntax['<name>'] = '#ffffff'
There are a lot of highlight groups to have better control over what specific
parts to highlight. This may be overwhelming for some people though, so
some of these have aliases to the default Lite XL style variables,
and groups like keyword.return
will default to the keyword
group,
conditional.ternary
will default to conditional
if its set, etc.
Evergreen will warn in the log if there are any groups missing, you can look at this to see what to set to highlight.
These are the available highlight groups:
attribute
boolean
: A group to highlight booleans specificallycharacter
comment
comment.documentation
: Doc commentsconditional
: Keywords relating to conditionals (if
/else
)conditional.ternary
constant
constant.builtin
: Constants that are builtins to the language (Go'siota
,nil
)constructor
: Constructors (likenew
functions)define
exception
: Keywords relating to exceptions (try
andcatch
)field
: Like a field in a Lua tablefloat
function
: Function declarationfunction.call
: Function callfunction.macro
include
: Keywords related to including modules/packageskeyword.function
: The function operator in a language (likefunc
in Go)keyword.operator
: Operators that are words (likeand
,or
in Lua)keyword.return
: Thereturn
operatorlabel
method
method.call
namespace
number
operator
parameter
: Parameters to a function (in declaration)preproc
: Preprocessor directives (#if
in C)punctuation.delimiter
: Punctuation that delimits items (,
and:
)punctuation.brackets
: Brackets of all kinds (()
or{}
, etc)punctuation.special
:#
in rust, treated as an operator by defaultrepeat
: Keywords relating to loops (while
,for
)storageclass
:static
,const
in Cstorageclass.lifetime
: Specifically for lifetimes in Rust currentlystring
tag
: HTML/JSX tagstag.delimiter
: <>tag.attribute
: Tag attributestext.diff.add
: Highlights additions in diffstext.diff.delete
: Highlights deletions in diffstype
type.builtin
: Builtin types (int
,bool
)type.definition
type.qualifier
: Type qualifiers (private
,public
)variable
variable.builtin
: Builtin variables (this
,self
)
License
MIT