1-- 2-- SPDX-License-Identifier: BSD-2-Clause 3-- 4-- Copyright (c) 2015 Pedro Souza <pedrosouza@freebsd.org> 5-- All rights reserved. 6-- 7-- Redistribution and use in source and binary forms, with or without 8-- modification, are permitted provided that the following conditions 9-- are met: 10-- 1. Redistributions of source code must retain the above copyright 11-- notice, this list of conditions and the following disclaimer. 12-- 2. Redistributions in binary form must reproduce the above copyright 13-- notice, this list of conditions and the following disclaimer in the 14-- documentation and/or other materials provided with the distribution. 15-- 16-- THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND 17-- ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 18-- IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 19-- ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE 20-- FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 21-- DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 22-- OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 23-- HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 24-- LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 25-- OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 26-- SUCH DAMAGE. 27-- 28 29local core = require("core") 30local hook = require("hook") 31 32local color = {} 33 34local function recalcDisabled() 35 color.disabled = not color.isEnabled() 36end 37 38-- Module exports 39color.BLACK = 0 40color.RED = 1 41color.GREEN = 2 42color.YELLOW = 3 43color.BLUE = 4 44color.MAGENTA = 5 45color.CYAN = 6 46color.WHITE = 7 47 48color.DEFAULT = 9 49color.BRIGHT = 1 50color.DIM = 2 51 52function color.isEnabled() 53 local c = loader.getenv("loader_color") 54 if c ~= nil then 55 return c:lower() ~= "no" and c ~= "0" 56 end 57 return true 58end 59 60function color.escapefg(color_value) 61 if color.disabled then 62 return '' 63 end 64 return core.KEYSTR_CSI .. "3" .. color_value .. "m" 65end 66 67function color.resetfg() 68 if color.disabled then 69 return '' 70 end 71 return color.escapefg(color.DEFAULT) 72end 73 74function color.escapebg(color_value) 75 if color.disabled then 76 return '' 77 end 78 return core.KEYSTR_CSI .. "4" .. color_value .. "m" 79end 80 81function color.resetbg() 82 if color.disabled then 83 return '' 84 end 85 return color.escapebg(color.DEFAULT) 86end 87 88function color.escape(fg_color, bg_color, attribute) 89 if color.disabled then 90 return "" 91 end 92 if attribute == nil then 93 attribute = "" 94 else 95 attribute = attribute .. ";" 96 end 97 return core.KEYSTR_CSI .. attribute .. 98 "3" .. fg_color .. ";4" .. bg_color .. "m" 99end 100 101function color.default() 102 if color.disabled then 103 return "" 104 end 105 return color.escape(color.DEFAULT, color.DEFAULT) 106end 107 108function color.highlight(str) 109 if color.disabled then 110 return str 111 end 112 -- We need to reset attributes as well as color scheme here, just in 113 -- case the terminal defaults don't match what we're expecting. 114 return core.KEYSTR_CSI .. "1m" .. str .. core.KEYSTR_CSI .. "22m" 115end 116 117recalcDisabled() 118hook.register("config.loaded", recalcDisabled) 119 120return color 121