2023-11-05 15:30:11 +00:00
|
|
|
# lite
|
|
|
|
|
|
|
|
![screenshot](https://user-images.githubusercontent.com/3920290/81471642-6c165880-91ea-11ea-8cd1-fae7ae8f0bc4.png)
|
|
|
|
|
|
|
|
## Overview
|
|
|
|
lite is a lightweight text editor written mostly in Lua — it aims to provide
|
|
|
|
something practical, pretty, *small* and fast, implemented as simply as
|
|
|
|
possible; easy to modify and extend, or to use without doing either.
|
|
|
|
|
|
|
|
|
|
|
|
## Getting Started
|
|
|
|
When lite is started it's typically opened with a *project directory* — this
|
|
|
|
is the directory where your project's code and other data resides. The project
|
|
|
|
directory is set once when lite is started and, for the duration of the
|
|
|
|
session, cannot be changed.
|
|
|
|
|
|
|
|
To open lite with a specific project directory the directory name can be passed
|
|
|
|
as a command-line argument *(`.` can be passed to use the current directory)* or
|
|
|
|
the directory can be dragged onto either the lite executable or a running
|
|
|
|
instance of lite.
|
|
|
|
|
|
|
|
The main way of opening files in lite is through the `core:find-file` command
|
|
|
|
— this provides a fuzzy finder over all of the project's files and can be
|
|
|
|
opened using the **`ctrl+p`** shortcut by default.
|
|
|
|
|
|
|
|
Commands can be run using keyboard shortcuts, or by using the `core:find-command`
|
|
|
|
command bound to **`ctrl+shift+p`** by default. For example, pressing
|
|
|
|
`ctrl+shift+p` and typing `newdoc` then pressing `return` would open a new
|
|
|
|
document. The current keyboard shortcut for a command can be seen to the right
|
|
|
|
of the command name on the command finder, thus to find the shortcut for a command
|
|
|
|
`ctrl+shift+p` can be pressed and the command name typed.
|
|
|
|
|
|
|
|
|
|
|
|
## User Module
|
|
|
|
lite can be configured through use of the user module. The user module can be
|
|
|
|
used for changing options in the config module, adding additional key bindings,
|
|
|
|
loading custom color themes, modifying the style or changing any other part of
|
|
|
|
lite to your personal preference.
|
|
|
|
|
|
|
|
The user module is loaded by lite when the application starts, after the plugins
|
|
|
|
have been loaded.
|
|
|
|
|
|
|
|
The user module can be modified by running the `core:open-user-module` command
|
|
|
|
or otherwise directly opening the `data/user/init.lua` file.
|
|
|
|
|
|
|
|
|
|
|
|
## Project Module
|
|
|
|
The project module is an optional module which is loaded from the current
|
|
|
|
project's directory when lite is started. Project modules can be useful for
|
|
|
|
things like adding custom commands for project-specific build systems, or
|
|
|
|
loading project-specific plugins.
|
|
|
|
|
|
|
|
The project module is loaded by lite when the application starts, after both the
|
|
|
|
plugins and user module have been loaded.
|
|
|
|
|
|
|
|
The project module can be edited by running the `core:open-project-module`
|
|
|
|
command — if the module does not exist for the current project when the
|
|
|
|
command is run it will be created.
|
|
|
|
|
|
|
|
|
|
|
|
## Commands
|
|
|
|
Commands in lite are used both through the command finder (`ctrl+shift+p`) and
|
|
|
|
by lite's keyboard shortcut system. Commands consist of 3 components:
|
|
|
|
* **Name** — The command name in the form of `namespace:action-name`, for
|
|
|
|
example: `doc:select-all`
|
|
|
|
* **Predicate** — A function that returns true if the command can be ran, for
|
|
|
|
example, for any document commands the predicate checks whether the active
|
|
|
|
view is a document
|
|
|
|
* **Function** — The function which performs the command itself
|
|
|
|
|
|
|
|
Commands can be added using the `command.add` function provided by the
|
|
|
|
`core.command` module:
|
|
|
|
```lua
|
|
|
|
local core = require "core"
|
|
|
|
local command = require "core.command"
|
|
|
|
|
|
|
|
command.add("core.docview", {
|
|
|
|
["doc:save"] = function()
|
|
|
|
core.active_view.doc:save()
|
|
|
|
core.log("Saved '%s', core.active_view.doc.filename)
|
|
|
|
end
|
|
|
|
})
|
|
|
|
```
|
|
|
|
|
|
|
|
Commands can be performed programatically (eg. from another command or by your
|
|
|
|
user module) by calling the `command.perform` function after requiring the
|
|
|
|
`command` module:
|
|
|
|
```lua
|
|
|
|
local command = require "core.command"
|
|
|
|
command.perform "core:quit"
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
## Keymap
|
|
|
|
All keyboard shortcuts in lite are handled by the `core.keymap` module. A key
|
|
|
|
binding in lite maps a "stroke" (eg. `ctrl+q`) to one or more commands (eg.
|
|
|
|
`core:quit`). When the shortcut is pressed lite will iterate each command
|
|
|
|
assigned to that key and run the *predicate function* for that command — if the
|
|
|
|
predicate passes it stops iterating and runs the command.
|
|
|
|
|
|
|
|
An example of where this used is the default binding of the `tab` key:
|
|
|
|
``` lua
|
|
|
|
["tab"] = { "command:complete", "doc:indent" },
|
|
|
|
```
|
|
|
|
When tab is pressed the `command:complete` command is attempted which will only
|
|
|
|
succeed if the command-input at the bottom of the window is active. Otherwise
|
|
|
|
the `doc:indent` command is attempted which will only succeed if we have a
|
|
|
|
document as our active view.
|
|
|
|
|
|
|
|
A new mapping can be added by your user module as follows:
|
|
|
|
```lua
|
|
|
|
local keymap = require "core.keymap"
|
|
|
|
keymap.add { ["ctrl+q"] = "core:quit" }
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
## Plugins
|
|
|
|
Plugins in lite are normal lua modules and are treated as such — no
|
|
|
|
complicated plugin manager is provided, and, once a plugin is loaded, it is never
|
|
|
|
expected be to have to unload itself.
|
|
|
|
|
|
|
|
To install a plugin simply drop it in the `data/plugins` directory — installed
|
|
|
|
plugins will be automatically loaded when lite starts. To uninstall a plugin the
|
|
|
|
plugin file can be deleted — any plugin (including those included with lite's
|
|
|
|
default installation) can be deleted to remove its functionality.
|
|
|
|
|
|
|
|
If you want to load a plugin only under a certain circumstance (for example,
|
|
|
|
only on a given project) the plugin can be placed somewhere other than the
|
|
|
|
`data/plugins` directory so that it is not automatically loaded. The plugin can
|
|
|
|
then be loaded manually as needed by using the `require` function.
|
|
|
|
|
|
|
|
Plugins can be downloaded from the [plugins repository](https://github.com/rxi/lite-plugins).
|
|
|
|
|
|
|
|
|
|
|
|
## Color Themes
|
|
|
|
Colors themes in lite are lua modules which overwrite the color fields of lite's
|
2023-11-15 19:14:14 +00:00
|
|
|
`core.style` module. Color themes should be placed in the `data/themes`
|
2023-11-05 15:30:11 +00:00
|
|
|
directory.
|
|
|
|
|
|
|
|
A color theme can be set by requiring it in your user module:
|
|
|
|
```lua
|
2023-11-15 19:14:14 +00:00
|
|
|
require "themes.winter"
|
2023-11-05 15:30:11 +00:00
|
|
|
```
|
|
|
|
|
|
|
|
Color themes can be downloaded from the [color themes repository](https://github.com/rxi/lite-colors).
|
|
|
|
|