-
Notifications
You must be signed in to change notification settings - Fork 0
/
ansi.clj
68 lines (47 loc) · 1.24 KB
/
ansi.clj
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
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
(ns io.axrs.cli-tools.ansi
(:require
[clojure.string :as str]))
(defn strip [s]
(str/replace s #"\e\[.*?m" ""))
(def csi "\u001b[")
(def suffix "m")
(def reset-font (str csi suffix))
(defn black [s]
(str csi 30 suffix s reset-font))
(defn red [s]
(str csi 31 suffix s reset-font))
(defn green [s]
(str csi 32 suffix s reset-font))
(defn yellow [s]
(str csi 33 suffix s reset-font))
(defn blue [s]
(str csi 34 suffix s reset-font))
(defn magenta [s]
(str csi 35 suffix s reset-font))
(defn cyan [s]
(str csi 36 suffix s reset-font))
(defn white [s]
(str csi 37 suffix s reset-font))
(defn bright-red [s]
(str csi 91 suffix s reset-font))
(defn bright-green [s]
(str csi 92 suffix s reset-font))
(defn bright-yellow [s]
(str csi 93 suffix s reset-font))
(defn bright-blue [s]
(str csi 94 suffix s reset-font))
(defn bright-magenta [s]
(str csi 95 suffix s reset-font))
(defn bright-cyan [s]
(str csi 96 suffix s reset-font))
(defn bright-white [s]
(str csi 97 suffix s reset-font))
(defprotocol TermText
(width [this])
(value [this]))
(defn hyperlink [url text]
(reify TermText
(width [this]
(count (strip text)))
(value [this]
(str "\u001b]8;;" url "\u0007" text "\u001b]8;;\u0007"))))