zaje is a syntax highlighter that aims to cover all your shell colouring needs.
It can act as an ad-hoc replacement for cat and, with a spot of one-line shell
functions tail and other friends.
Highlighting output in the shell is hardly a novel idea and its effectiveness
is generally agreed to be high:)
There are other tools that provide similar functionality, for instance, supercat and grc.
However, with this project, I was looking to create a tool that can effectively replace cat, tail
and other traditional utils with zero to little effort.
- Supports over 100 lexers for programming languages, configuration and log formats and UNIX commands (this is done using the highlight Go package)
- Can accept input as an argument as well as from an
STDINstream - Can detect the lexer to use based on:
- The file name (when acting in
catmode) - The first line of text (so it will usually work nicely when piping as well)
- The file name (when acting in
- Supports explicit specification of the lexer to use via a command-line arg and an
ENVvar - Easily to deploy: since it's a Go CLI app, it's one, statically linked executable with no dynamic deps
- Easily extendable: see Revising and adding new lexers for details
COMMANDS: help, h Shows a list of commands or help for one command
GLOBAL OPTIONS: --syn-dir ZAJE_SYNDIR, -s ZAJE_SYNDIR Path to lexer files. The ZAJE_SYNDIR ENV var is also honoured. If neither is set, ~/.config/zaje/syntax_files will be used. [$ZAJE_SYNDIR]
--lexer value, -l value config file to use when parsing input. When none is passed, zaje will attempt to autodetect based on the file name or first line of input. You can set the path to lexer files by exporting the ZAJE_SYNDIR ENV var. If not exported, /etc/zaje/highlight will be used.
--debug, -d Run in debug mode.
--help, -h show help
--print-version, -V print only the version
--build-info, --bi Print build info.
To use zaje as a cat replacement:
$ zaje /path/to/fileTo replace tail -f:
$ tail -f /path/to/file | zaje -l server-log -(- will make zaje read progressively from STDIN)
Jesse Portnoy jesse@packman.io
See Revising and adding new lexers.
statement: will colour the char group green
identifier: will colour the char group blue
special: will colour the char group red
constant.string | constant | constant.number: will colour the char group cyan
constant.specialChar: will colour the char group magenta
type: will colour the char group yellow
comment: high.green will colour the char group bright green
preproc: will colour the char group bright red
Specifying the colour names in the YML is also supported, see df.yaml for an example.
If your new lexer doesn't work as expected, run zaje with -d or --debug to get more info.