diff --git a/README.md b/README.md index a5e0badc..07f1f55a 100644 --- a/README.md +++ b/README.md @@ -1,126 +1,76 @@ # Lite XL -![screenshot-dark](https://user-images.githubusercontent.com/433545/111063905-66943980-84b1-11eb-9040-3876f1133b20.png) +[![Discord Badge Image]](https://discord.gg/SR4ArdYr) -A lightweight text editor written in Lua, adapted from [lite](https://github.com/rxi/lite) +![screenshot-dark] -* **[Get Lite XL](https://github.com/franko/lite-xl/releases/latest)** — Download - for Windows, Linux and Mac OS (notarized app). -* **[Get started](doc/usage.md)** — A quick overview on how to get started -* **[Get plugins](https://github.com/franko/lite-plugins)** — Add additional - functionality, adapted for Lite XL -* **[Get color themes](https://github.com/rxi/lite-colors)** — Add additional colors - themes +A lightweight text editor written in Lua, adapted from [lite]. -Lite XL has support for high DPI display on Windows and Linux and, since 1.16.7 release, it supports **retina displays** on Mac OS. +* **[Get Lite XL]** — Download for Windows, Linux and Mac OS (notarized app). +* **[Get plugins]** — Add additional functionality, adapted for Lite XL. +* **[Get color themes]** — Add additional colors themes. + +Please refer to our [website] for the user and developer documentation, +including [build] instructions. + +Lite XL has support for high DPI display on Windows and Linux and, +since 1.16.7 release, it supports **retina displays** on macOS. Please note that Lite XL is compatible with lite for most plugins and all color themes. -We provide a separate lite-plugins repository for Lite XL, because in some cases some adaptations may be needed to make them work better with Lite XL. -The repository with modified plugins is http://github.com/franko/lite-plugins. +We provide a separate lite-plugins repository for Lite XL, because in some cases +some adaptations may be needed to make them work better with Lite XL. +The repository with modified plugins is https://github.com/franko/lite-plugins. -The changes and differences between Lite XL and rxi/lite are listed in the [changelog](https://github.com/franko/lite-xl/blob/master/changelog.md). +The changes and differences between Lite XL and rxi/lite are listed in the +[changelog]. ## Overview -Lite XL is derived from lite. It is a lightweight text editor written mostly in Lua — it aims to provide -something practical, pretty, *small* and fast easy to modify and extend, or to use without doing either. +Lite XL is derived from lite. +It is a lightweight text editor written mostly in Lua — it aims to provide +something practical, pretty, *small* and fast easy to modify and extend, +or to use without doing either. -The aim of Lite XL compared to lite is to be more user friendly, improve the quality of font rendering, and reduce CPU usage. +The aim of Lite XL compared to lite is to be more user friendly, +improve the quality of font rendering, and reduce CPU usage. ## Customization -Additional functionality can be added through plugins which are available in -the [plugins repository](https://github.com/rxi/lite-plugins) or in the [Lite XL-specific plugins repository](https://github.com/franko/lite-plugins). -Additional color themes can be found in the [colors repository](https://github.com/rxi/lite-colors). +Additional functionality can be added through plugins which are available in +the [plugins repository] or in the [Lite XL plugins repository]. + +Additional color themes can be found in the [colors repository]. These color themes are bundled with all releases of Lite XL by default. -The editor can be customized by making changes to the [user module](data/user/init.lua). - -## Building - -You can build Lite XL yourself using Meson. - -In addition, the `build-packages.sh` script can be used to compile Lite XL and create an OS-specific package for Linux, Windows or Mac OS. - -The following libraries are required: - -- freetype2 -- SDL2 - -The following libraries are **optional**: - -- libagg -- Lua 5.2 - -If they are not found, they will be downloaded and compiled by Meson. -Otherwise, if they are present, they will be used to compile Lite XL. - -On Debian-based systems the required libraries and Meson can be installed using the following commands: - -```sh -# To install the required libraries: -sudo apt install libfreetype6-dev libsdl2-dev - -# To install Meson: -sudo apt install meson -# or pip3 install --user meson -``` - -To build Lite XL with Meson the commands below can be used: -```sh -meson setup --buildtype=release build -meson compile -C build -meson install -C build -``` - -If you are using a version of Meson below 0.54 you need to use diffent commands to compile and install: - -```sh -meson setup --buildtype=release build -ninja -C build -ninja -C build install -``` - -When performing the `meson setup` command you may enable the `-Dportable=true` option to specify whether files should be installed as in a portable application. - -If `portable` is enabled, Lite XL is built to use a `data` directory placed next to the executable. -Otherwise, Lite XL will use unix-like directory locations. -In this case, the `data` directory will be `$prefix/share/lite-xl` and the executable will be located in `$prefix/bin`. -`$prefix` is determined when the application starts as a directory such that `$prefix/bin` corresponds to the location of the executable. - -The `user` directory does not depend on the `portable` option and will always be `$HOME/.config/lite-xl`. -`$HOME` is determined from the corresponding environment variable. -As a special case on Windows the variable `$USERPROFILE` will be used instead. - -If you compile Lite XL yourself, it is recommended to use the script `build-packages.sh`: - -```sh -bash build-packages.sh -``` - -The script will run Meson and create a zip file with the application or, for linux, a tar compressed archive. -Lite XL can be easily installed by unpacking the archive in any directory of your choice. - -On Windows two packages will be created, one called "portable" using the "data" folder next to the executable and -the other one using a unix-like file layout. Both packages works correctly. The one with unix-like file layout -is meant for people using a unix-like shell and the command line. - -Please note that there aren't any hard-coded directories in the executable, so that the -package can be extracted and used in any directory. - -Mac OS X is fully supported and a notarized app disk image is provided in the [release page](https://github.com/franko/lite-xl/releases). -In addition the application can be compiled using the generic instructions given above. - ## Contributing -Any additional functionality that can be added through a plugin should be done -as a plugin, after which a pull request to the -[plugins repository](https://github.com/rxi/lite-plugins) can be made. -If the plugin uses any Lite XL-specific functionality, please open a pull request to the -[Lite XL plugins repository](https://github.com/franko/lite-plugins). +Any additional functionality that can be added through a plugin should be done +as a plugin, after which a pull request to the [plugins repository] can be made. + +If the plugin uses any Lite XL-specific functionality, +please open a pull request to the [Lite XL plugins repository]. Pull requests to improve or modify the editor itself are welcome. -## License +## Licenses + This project is free software; you can redistribute it and/or modify it under -the terms of the MIT license. See [LICENSE](LICENSE) for details. +the terms of the MIT license. See [LICENSE] for details. + +See the [licenses] file for details on licenses used by the required dependencies. + + +[Discord Badge Image]: https://img.shields.io/discord/847122429742809208?label=discord&logo=discord +[screenshot-dark]: https://user-images.githubusercontent.com/433545/111063905-66943980-84b1-11eb-9040-3876f1133b20.png +[lite]: https://github.com/rxi/lite +[website]: https://lite-xl.github.io +[build]: https://lite-xl.github.io/en/build +[Get Lite XL]: https://github.com/franko/lite-xl/releases/latest +[Get plugins]: https://github.com/franko/lite-plugins +[Get color themes]: https://github.com/rxi/lite-colors +[changelog]: https://github.com/franko/lite-xl/blob/master/changelog.md +[Lite XL plugins repository]: https://github.com/franko/lite-plugins +[plugins repository]: https://github.com/rxi/lite-plugins +[colors repository]: https://github.com/rxi/lite-colors +[LICENSE]: LICENSE +[licenses]: licenses/licenses.md diff --git a/doc/contributors.md b/doc/contributors.md deleted file mode 100644 index 4313e465..00000000 --- a/doc/contributors.md +++ /dev/null @@ -1,43 +0,0 @@ -## rxi - -Original development of lite editor. - -## Francesco Abbate (franko) - -Creator of lite-xl fork from rxi/lite. - -## Takase (takase1121) - -NagView and X Window database resource query for Xft.dpi setting. - -## Nils Kvist (budRich) - -Popup window replacement with CommandView dialog. - -## liquidev - -Tab style and animations improvements. - -## adamharrison - -Multi-language syntax highlighting and many other improvements. - -## vincens2005 - -Syntax highlighting improvements. - -## Janis-Leuenberger - -Add keymap bindings help file and macOS testing. - -## Mat Mariani (mathewmariani) - -Help for Mac OS port. Some resources taken from mathewmariani/lite-macos. - -## daubaris - -Initial implementation of Xft.dpi query using xrdb command. - -## Robert Štojs (netrobert) - -Continuos integration configuration diff --git a/doc/default-keymap.md b/doc/default-keymap.md deleted file mode 100644 index 72bca33c..00000000 --- a/doc/default-keymap.md +++ /dev/null @@ -1,113 +0,0 @@ -# Default keymap - -*Note: When using macOS `ctrl` refers to the command key.* - -| Key combination | Actions | -| --------------------- | ----------------------------------- | -| ctrl+shift+p | core:find-command | -| ctrl+p | core:find-file | -| ctrl+o | core:open-file | -| ctrl+n | core:new-doc | -| ctrl+shift+c | core:change-project-folder | -| ctrl+shift+o | core:open-project-folder | -| alt+return | core:toggle-fullscreen | -| alt+shift+j | root:split-left | -| alt+shift+l | root:split-right | -| alt+shift+i | root:split-up | -| alt+shift+k | root:split-down | -| alt+j | root:switch-to-left | -| alt+l | root:switch-to-right | -| alt+i | root:switch-to-up | -| alt+k | root:switch-to-down | -| ctrl+w | root:close | -| ctrl+tab | root:switch-to-next-tab | -| ctrl+shift+tab | root:switch-to-previous-tab | -| ctrl+pageup | root:move-tab-left | -| ctrl+pagedown | root:move-tab-right | -| alt+1 | root:switch-to-tab-1 | -| alt+2 | root:switch-to-tab-2 | -| alt+3 | root:switch-to-tab-3 | -| alt+4 | root:switch-to-tab-4 | -| alt+5 | root:switch-to-tab-5 | -| alt+6 | root:switch-to-tab-6 | -| alt+7 | root:switch-to-tab-7 | -| alt+8 | root:switch-to-tab-8 | -| alt+9 | root:switch-to-tab-9 | -| ctrl+f | find-replace:find | -| ctrl+r | find-replace:replace | -| f3 | find-replace:repeat-find | -| shift+f3 | find-replace:previous-find | -| ctrl+g | doc:go-to-line | -| ctrl+s | doc:save | -| ctrl+shift+s | doc:save-as | -| ctrl+z | doc:undo | -| ctrl+y | doc:redo | -| ctrl+x | doc:cut | -| ctrl+c | doc:copy | -| ctrl+v | doc:paste | -| ctrl+insert | doc:copy | -| shift+insert | doc:paste | -| escape | command:escape | -| escape | doc:select-none | -| escape | dialog:select-no | -| tab | command:complete | -| tab | doc:indent | -| shift+tab | doc:unindent | -| backspace | doc:backspace | -| shift+backspace | doc:backspace | -| ctrl+backspace | doc:delete-to-previous-word-start | -| ctrl+shift+backspace | doc:delete-to-previous-word-start | -| delete | doc:delete | -| shift+delete | doc:delete | -| ctrl+delete | doc:delete-to-next-word-end | -| ctrl+shift+delete | doc:delete-to-next-word-end | -| return | command:submit | -| return | doc:newline | -| return | dialog:select | -| keypad enter | command:submit | -| keypad enter | doc:newline | -| keypad enter | dialog:select | -| ctrl+return | doc:newline-below | -| ctrl+shift+return | doc:newline-above | -| ctrl+j | doc:join-lines | -| ctrl+a | doc:select-all | -| ctrl+d | find-replace:select-next | -| ctrl+d | doc:select-word | -| ctrl+l | doc:select-lines | -| ctrl+/ | doc:toggle-line-comments | -| ctrl+up | doc:move-lines-up | -| ctrl+down | doc:move-lines-down | -| ctrl+shift+d | doc:duplicate-lines | -| ctrl+shift+k | doc:delete-lines | -| left | doc:move-to-previous-char | -| left | dialog:previous-entry | -| right | doc:move-to-next-char | -| right | dialog:next-entry | -| up | command:select-previous | -| up | doc:move-to-previous-line | -| down | command:select-next | -| down | doc:move-to-next-line | -| ctrl+left | doc:move-to-previous-word-start | -| ctrl+right | doc:move-to-next-word-end | -| ctrl+[ | doc:move-to-previous-block-start | -| ctrl+] | doc:move-to-next-block-end | -| home | doc:move-to-start-of-line | -| end | doc:move-to-end-of-line | -| ctrl+home | doc:move-to-start-of-doc | -| ctrl+end | doc:move-to-end-of-doc | -| pageup | doc:move-to-previous-page | -| pagedown | doc:move-to-next-page | -| shift+left | doc:select-to-previous-char | -| shift+right | doc:select-to-next-char | -| shift+up | doc:select-to-previous-line | -| shift+down | doc:select-to-next-line | -| ctrl+shift+left | doc:select-to-previous-word-start | -| ctrl+shift+right | doc:select-to-next-word-end | -| ctrl+shift+[ | doc:select-to-previous-block-start | -| ctrl+shift+] | doc:select-to-next-block-end | -| shift+home | doc:select-to-start-of-line | -| shift+end | doc:select-to-end-of-line | -| ctrl+shift+home | doc:select-to-start-of-doc | -| ctrl+shift+end | doc:select-to-end-of-doc | -| shift+pageup | doc:select-to-previous-page | -| shift+pagedown | doc:select-to-next-page | diff --git a/doc/usage.md b/doc/usage.md deleted file mode 100644 index 90f6dc8d..00000000 --- a/doc/usage.md +++ /dev/null @@ -1,209 +0,0 @@ -# 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. - -Lite XL is based on the Lite editor itself and provide some enhancements -while remaining generally compatible with Lite. - - -## Getting Started -Lite works using a *project directory* — this is the directory where your -project's code and other data resides. - -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. - -Once started the project directory can be changed using the command -`core:change-project-folder`. The command will close all the documents -currently opened and switch to the new project directory. - -If you want to open a project directory in a new window the command -`core:open-project-folder` will open a new editor window with the selected -project directory. - -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 `$HOME/.config/lite-xl/init.lua` file. - -On Windows, the variable `$USERPROFILE` will be used instead of -`$HOME`. - -Please note that Lite XL differs from the standard Lite editor for the location -of the user's module. - -## 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. - -## Big directories -Often projects contain compiled, bundled or downloaded files which you don't want to edit. These files can be excluded from projects by configuring `config.ignore_files`. Such a configuration might look like `config.ignore_files = { "^%.", "node_modules" }`. This will exclude the `node_modules` folder and any file starting with `.`. You can add this to a user or project module. - -If a project has more files than the maximum (configured with `config.max_project_files`) lite-xl will switch to a different mode where files are lazily loaded. - -_Note: Because of lazy loading `core:find-file` will open `core:open-file` instead._ - -## Add directories to a project - -In addition to the project directories it is possible to add other directories -using the command `core:add-directory`. -Once added a directory it will be shown in the tree-view on the left side and -the additional files will be reachable using the `ctrl+p` command (find file). -The additonal files will be also visible when searching across the project. - -The additional directories can be removed using the command `core:remove-directory`. - -When you will open again Lite XL on the same project folder the application will -remember your workspace including the additonal project directories. - -Since version 1.15 Lite XL does not need a workspace plugin as it is now -bundled with the editor. - - -## Create new empty directory - -Using the command `files:create-directory` or control-click in a directory in the -tree-view to create a new empty subdirectory. - - -## 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" } -``` - -A list of default mappings can be viewed [here](./default-keymap.md). - - -## 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 `plugins` directory in the user -module directory. -When Lite XL starts it will first load the plugins included in the data directory -and will then loads the plugins located in the user module directory. - -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 -`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). - - -## Restarting the editor - -If you modifies the user configuration file or some of the Lua implementation files you may -restart the editor using the command `core:restart`. -All the application will be restarting by keeping the window that is already in use. - - -## Color Themes -Colors themes in lite are lua modules which overwrite the color fields of lite's -`core.style` module. -Pre-defined color methods are located in the `colors` folder in the data directory. -Additional color themes can be installed in the user's directory in a folder named -`colors`. - -A color theme can be set by requiring it in your user module: -```lua -core.reload_module "colors.winter" -``` - -In the Lite editor the function `require` is used instead of `core.reload_module`. -In Lite XL `core.reload_module` should be used to ensure that the color module -is actually reloaded when saving the user's configuration file. - -Color themes can be downloaded from the [color themes repository](https://github.com/rxi/lite-colors). -They are included with Lite XL release packages. - diff --git a/doc/licenses.md b/licenses/licenses.md similarity index 100% rename from doc/licenses.md rename to licenses/licenses.md