/
ansi_color.cljc
51 lines (42 loc) · 1.16 KB
/
ansi_color.cljc
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
(ns matcher-combinators.ansi-color
"Colorize console text. Mostly copied from Bruce Hauman's Figwheel project")
(def ^:dynamic *use-color* true)
(def ANSI-CODES
{:reset "[0m"
:bright "[1m"
:blink-slow "[5m"
:underline "[4m"
:underline-off "[24m"
:inverse "[7m"
:inverse-off "[27m"
:strikethrough "[9m"
:strikethrough-off "[29m"
:default "[39m"
:white "[37m"
:black "[30m"
:red "[31m"
:green "[32m"
:blue "[34m"
:yellow "[33m"
:magenta "[35m"
:cyan "[36m"
:bg-default "[49m"
:bg-white "[47m"
:bg-black "[40m"
:bg-red "[41m"
:bg-green "[42m"
:bg-blue "[44m"
:bg-yellow "[43m"
:bg-magenta "[45m"
:bg-cyan "[46m"})
(defn- ansi-code [code]
(when (and *use-color* code)
(str \u001b code)))
(defn- style* [s & codes]
(str (clojure.string/join (map ansi-code codes)) s (ansi-code "[0m")))
(defn style [s & codes]
(apply style* s (map ANSI-CODES codes)))
(defn set-color [color]
(print (str (ansi-code (ANSI-CODES color)))))
(defn reset []
(print (str (ansi-code (ANSI-CODES :reset)))))