A Swift library with a dedicated command-line tool to colorise plain code (e.g. for terminal output), HTML files code blocks or attributed strings (e.g. for macOS or iOS apps).
Currently supported languages:
- Zsh/Bash
- Swift (with Splash)
- Xml
- Xml enhanced (better visualisation of the tags)
- Plist
- Json
- Yaml
Currently offered themes:
- Dracula
- Xcode light (default)
- Xcode dark
Themes to be added:
- [] Obsidian
- [] Tomorrow
You can ask for a language support or a theme by opening an issue. You can also implement a language support if you prefer. The following screenshots show the different usages of Lux.
iOS app with an enhanced XML format
Octory (new) wiki sample
Zsh on iPad. A script from Scripting OSX to notarise a command-line tool.
With the following Plist file
<key>properties</key>
<dict>
<key>Type</key>
<string>Input</string>
<key>InputType</key>
<string>List</string>
<key>IsAllowed</key>
<true/>
</dict>
Here is how the library could inject terminal colors:
\033[38;5;8m<key>\033[39m\033[38;5;161mproperties\033[39m\033[38;5;8m</key>\033[39m
\033[38;5;8m<dict>\033[39m
\033[38;5;8m<key>\033[39m\033[38;5;161mType\033[39m\033[38;5;8m</key>\033[39m
\033[38;5;8m<string>\033[39m\033[39mInput\033[39m\033[38;5;8m</string>\033[39m
\033[38;5;8m<key>\033[39m\033[38;5;161mInputType\033[39m\033[38;5;8m</key>\033[39m
\033[38;5;8m<string>\033[39m\033[39mList\033[39m\033[38;5;8m</string>\033[39m\
\033[38;5;8m<key>\033[39m\033[38;5;161mIsAllowed\033[39m\033[38;5;8m</key>\033[39m
\033[38;5;8m<true/>\033[39m\n\033[38;5;8m</dict>\033[39m"
Or Css classes:
<span class="plist-tag"><key></span><span class="plist-key-name">properties</span><span class="plist-tag"></key></span>
<span class="plist-tag"><dict></span>
<span class="plist-tag"><key></span><span class="plist-key-name">Type</span><span class="plist-tag"></key></span>
<span class="plist-tag"><string></span><span class="plist-key-value">Input</span><span class="plist-tag"></string></span>
<span class="plist-tag"><key></span><span class="plist-key-name">InputType</span><span class="plist-tag"></key></span>
<span class="plist-tag"><string></span><span class="plist-key-value">List</span><span class="plist-tag"></string></span>
<span class="plist-tag"><key></span><span class="plist-key-name">IsAllowed</span><span class="plist-tag"></key></span>
<span class="plist-tag"><true/></span>
<span class="plist-tag"></dict></span>
You can then customise those classes in your CSS file. This wiki page describes each format CSS classes.
Note: For HTML text, the library will take a HTML string as input. In HTML, &
is specified with &
, chevrons are written with <
for <
and >
for >
. Thus, when using a HTML injector, you can call its function escapingHTML()
if you give it plain text as input. Otherwise, nothing has to be done when the input is already HTML encoded.
For the command line tool inject
command, the default behavior is to replace those special characters before injecting colors. You can change this behavior with the --no-escape-html
flag if you already have a HTML-encoded string as input. To escape those characters, Lux uses the following extension.
Use the following command.
brew install ABridoux/formulae/lux
It will download the notarized executable from the latest release.
You can download the latest version of the executable from the releases. Note that the executable is notarized. Also, a notarized lux package is provided.
After having unzipped the file, you can install it if you want to:
install lux /usr/local/bin/
Here is a command which downloads the latest version of the program and install it in /usr/local/bin. Run it to download and install the latest version of the program. It erases the current version you may have.
curl -LO https://github.com/ABridoux/lux/releases/latest/download/lux.zip && \
unzip lux.zip && \
rm lux.zip && \
install lux /usr/local/bin && \
rm lux
Lux 0.4.3 and later are compatible with Linux. You can download the tar
archive "lux-linux" in the releases. In case you got an error regarding "libswiftCore.so" when executing the binary, you can checkout this solution.
- To find all lux versions, please browse the releases page.
- When deploying a package (with a MDM for example), it might be useful to add the version to the name. To get lux latest version: simply run
lux version
to get your installed lux version. Also, if you are using scout, you can runcurl --silent "https://api.github.com/repos/ABridoux/lux/releases/latest" | scout tag_name
to get the latest version available on the Github repository.
Start by importing the package in your file Packages.swift.
let package = Package (
...
dependencies: [
.package(url: "https://github.com/ABridoux/lux", from: "0.1.0")
],
...
)
You can then import Lux
in a file.
Thanks to all the contributors of Lux, especially to Damien Rivet who makes code reviews when he has the time. Also, many thanks to the team behind swift-argument-parser who keeps doing an incredible work. Also, many thanks to John Sundell for his several articles regarding an API development, and for the Splash library as well as all its contributors.
Font used for the logo: Flashlight by Bexxtype]
Lux aims to be community project, and anyone is welcome to contribute. As it is still a young project, some bugs may appear, or some text not colorised correctly. If you encounter such problem, please open a issue to describe it and try to add a use case to reproduce the bug. Hopefully, it should be resolved in the following release.
You can read here how to add a new language to Lux. A wiki page explaining theming will be available soon.
- Colorize terminal with Swift to colorise the output in the terminal.
- Terminal colors list
- Encode code block to HTML