Colorize text with ANSI escape sequences (8, 16, 256 or TrueColor)
Using lazy.nvim:
{
"m00qek/baleia.nvim",
version = "*",
config = function()
vim.g.baleia = require("baleia").setup({ })
-- Command to colorize the current buffer
vim.api.nvim_create_user_command("BaleiaColorize", function()
vim.g.baleia.once(vim.api.nvim_get_current_buf())
end, { bang = true })
-- Command to show logs
vim.api.nvim_create_user_command("BaleiaLogs", vim.g.baleia.logger.show, { bang = true })
end,
}
To automatically colorize when a new line is added use
vim.g.baleia = require("baleia").setup({ })
vim.api.nvim_create_autocmd({ "BufWinEnter" }, {
pattern = "*.txt",
callback = function()
vim.g.baleia.automatically(vim.api.nvim_get_current_buf())
end,
})
This will register every buffer that matches .txt
to be automatically
colorized.
To automatically colorize text added to the quickfix use BufReadPost
vim.g.baleia = require("baleia").setup({ })
vim.api.nvim_create_autocmd({ "BufReadPost" }, {
pattern = "quickfix",
callback = function()
vim.api.nvim_set_option_value("modifiable", true, { buf = buffer })
vim.g.baleia.automatically(vim.api.nvim_get_current_buf())
vim.api.nvim_set_option_value("modified", false, { buf = buffer })
vim.api.nvim_set_option_value("modifiable", false, { buf = buffer })
end,
})
When calling the setup
function, the following options are available:
option | default value | description |
---|---|---|
name | "BaleiaColors" | prefix used to name highlight groups |
strip_ansi_codes | true | remove ANSI color codes from text |
line_starts_at | 1 (one-indexed) | at which column start colorizing |
colors | NR_8 | table mapping 256 color codes to vim colors |
async | true | highlight asynchronously |
log | "ERROR" | log level, possible values are ERROR, WARN, INFO or DEBUG |
This can be used to colorize Conjure log buffer. To do it you must tell conjure to not strip ANSI escape codes:
{
"m00qek/baleia.nvim",
version = "*",
config = function()
vim.g.conjure_baleia = require("baleia").setup({ line_starts_at = 3 })
local augroup = vim.api.nvim_create_augroup("ConjureBaleia", { clear = true })
vim.api.nvim_create_user_command("BaleiaColorize", function()
vim.g.conjure_baleia.once(vim.api.nvim_get_current_buf())
end, { bang = true })
vim.api.nvim_create_user_command("BaleiaLogs", vim.g.conjure_baleia.logger.show, { bang = true })
end,
},
{
"Olical/conjure",
ft = { "clojure", "fennel" },
config = function()
require("conjure.main").main()
require("conjure.mapping")["on-filetype"]()
end,
init = function()
-- Print color codes if baleia.nvim is available
local colorize = require("lazyvim.util").has("baleia.nvim")
vim.g["conjure#log#strip_ansi_escape_sequences_line_limit"] = colorize and 1 or nil
-- Disable diagnostics in log buffer and colorize it
vim.api.nvim_create_autocmd({ "BufWinEnter" }, {
pattern = "conjure-log-*",
callback = function()
local buffer = vim.api.nvim_get_current_buf()
vim.diagnostic.enable(false, { bufnr = buffer })
if colorize and vim.g.conjure_baleia then
vim.g.conjure_baleia.automatically(buffer)
end
end,
})
end,
},
Enable logs with
vim.g.baleia = require("baleia").setup({ log = 'DEBUG' })
vim.api.nvim_create_user_command("BaleiaLogs", vim.g.conjure_baleia.logger.show, { bang = true })
You can set the log level to ERROR
, WARN
, INFO
or DEBUG
. You can see
the logs using BaleiaLogs
.
baleia
provides two functions, buf_set_lines
and buf_set_text
, that have
the same interface as the default vim.api.nvim_buf_set_lines
and
vim.api.nvim_but_set_text
. Using those is very efficient because they do all
color detection and ANSI code stripping before writing anything to the buffer.
Example:
local new_lines = { '\x1b[32mHello \x1b[33mworld!' }
-- appending using Neovim standard API
local lastline = vim.api.nvim_buf_line_count(0)
vim.api.nvim_buf_set_lines(0, lastline, lastline, true, new_lines)
-- appending using Baleia API
local lastline = vim.api.nvim_buf_line_count(0)
local baleia = require('baleia').setup { }
baleia.buf_set_lines(0, lastline, lastline, true, new_lines)