rcalc 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: 9cb69e198b3962c319a9c650f89801e90546052ae251cb3c210da79c60ba0057
4
+ data.tar.gz: 9ab7f2bde1836cdd5bb9be3721639d38bcc545d87193835b96290849c31e24f5
5
+ SHA512:
6
+ metadata.gz: 953935bc9a637ebcc8a9c01e060e8368c5687b43d9afd3c4a3d2fa7f5e144298f8678d7104b3d9b90b0de9dc21e420e3151a0c1839d1099189a76d5f2d3eb3f3
7
+ data.tar.gz: c07ed1ba3efd59fc3c63bb509cff8cd43daedf156066ce6c1460a0c28b2501c5b2c83437b4e1c794f4e6f1770c60fd76c044070fb8746d72fe107ad6e762eb06
data/Gemfile ADDED
@@ -0,0 +1,6 @@
1
+ # frozen_string_literal: true
2
+
3
+ source 'https://rubygems.org'
4
+
5
+ # Specify your gem's dependencies in base.gemspec
6
+ gemspec
data/exe/README.md ADDED
@@ -0,0 +1,3 @@
1
+ # Executable folder
2
+
3
+ There should only be one file here which has the same name as the gem, if this gem is a commandline gem.
@@ -0,0 +1,161 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Rcalc
4
+ class Terminal
5
+ def initialize
6
+ @continuous_listen = false
7
+ end
8
+
9
+ def blocking_console_query(query, listen_until)
10
+ # send query and block wait for response
11
+ res = ''
12
+ $stdin.raw do |stdin|
13
+ $stdout << "#{esc}#{query}"
14
+ $stdout.flush
15
+
16
+ finished = false
17
+ loop do
18
+ c = stdin.getc
19
+ res << c if c
20
+ listen_until.split.each do |d|
21
+ finished = true if c == d
22
+ end
23
+ break if finished
24
+ end
25
+ end
26
+ res
27
+ end
28
+
29
+ def pos
30
+ m = blocking_console_query('6n', 'R').match(/(?<row>\d+);(?<column>\d+)/)
31
+ [Integer(m[:column]), Integer(m[:row])]
32
+ end
33
+
34
+ def size
35
+ # get current position
36
+ x, y = pos
37
+
38
+ # try go to the ends of the earth
39
+ goto!(9999, 9999)
40
+
41
+ # get that position
42
+ tx, ty = pos
43
+
44
+ # go back to current pos
45
+ goto!(x, y)
46
+
47
+ [tx, ty]
48
+ end
49
+
50
+ def esc
51
+ "\e["
52
+ end
53
+
54
+ def e!(command)
55
+ print "#{esc}#{command}"
56
+ end
57
+
58
+ TERMINAL_COMMANDS.each do |name, code|
59
+ define_method "#{name}!" do
60
+ e! code
61
+ end
62
+ end
63
+
64
+ TERMINAL_TOGGLES.each do |name, code|
65
+ define_method "enable_#{name}!" do
66
+ e! "#{code}h"
67
+ end
68
+
69
+ define_method "disable_#{name}!" do
70
+ e! "#{code}l"
71
+ end
72
+ end
73
+
74
+ def color!(id)
75
+ e! "38;5;#{id}m"
76
+ end
77
+
78
+ def bgcolor!(id)
79
+ e! "48;5;#{id}m"
80
+ end
81
+
82
+ TERMINAL_COLORS.each do |name, code|
83
+ define_method "color_#{name}!" do
84
+ color!(code)
85
+ end
86
+
87
+ define_method "bgcolor_#{name}!" do
88
+ bgcolor!(code)
89
+ end
90
+ end
91
+
92
+ def rgb!(r, g, b)
93
+ e! "38;2;#{r};#{g};#{b}m"
94
+ end
95
+
96
+ def goto!(x, y)
97
+ e! "#{y};#{x}f"
98
+ end
99
+
100
+ def split(collect)
101
+ res = []
102
+
103
+ inside_esc = false
104
+ current = ''
105
+ collect.each_char do |chr|
106
+ # start of esc
107
+ if chr == "\e"
108
+ inside_esc = true
109
+
110
+ # if there already is escaped content in the buffer,
111
+ # send it out and clear the buffer
112
+ unless current.empty?
113
+ res << current
114
+ current = ''
115
+ end
116
+ end
117
+
118
+ if inside_esc
119
+ # if we are inside an escape, add chars to the buffer
120
+ current << chr
121
+ else
122
+ # for all other characters, we just
123
+ res << chr
124
+ end
125
+ end
126
+
127
+ # if we were inside an escape, we need to send out the final set
128
+ res << current if inside_esc
129
+
130
+ res
131
+ end
132
+
133
+ def listen!(&block)
134
+ $stdin.raw do |stdin|
135
+ collect = ''
136
+
137
+ finished = false
138
+ loop do
139
+ c = stdin.getch(min: 0, time: 0.01)
140
+
141
+ if c.nil?
142
+ if collect.length.positive?
143
+
144
+ # sometimes multiple tokens appear inside a result
145
+ # so we split it out and send them to the block
146
+ split(collect).each do |token|
147
+ finished = block.call(token)
148
+ end
149
+ end
150
+ collect = ''
151
+
152
+ else
153
+ collect += c
154
+ end
155
+
156
+ break if finished
157
+ end
158
+ end
159
+ end
160
+ end
161
+ end
@@ -0,0 +1,605 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Rcalc
4
+ TERMINAL_COLORS = {
5
+ black: 0,
6
+ maroon: 1,
7
+ green: 2,
8
+ olive: 3,
9
+ navy: 4,
10
+ purple: 5,
11
+ teal: 6,
12
+ silver: 7,
13
+ grey: 8,
14
+ gray: 8,
15
+ red: 9,
16
+ lime: 10,
17
+ yellow: 11,
18
+ blue: 12,
19
+ fuchsia: 13,
20
+ magenta: 13,
21
+ aqua: 14,
22
+ cyan: 14,
23
+ white: 15,
24
+
25
+ xterm_black: 16,
26
+ xterm_maroon: 52,
27
+ xterm_green: 22,
28
+ xterm_olive: 58,
29
+ xterm_navy: 17,
30
+ xterm_purple: 54,
31
+ xterm_teal: 36,
32
+ xterm_silver: 250,
33
+ xterm_grey: 244,
34
+ xterm_gray: 244,
35
+ xterm_red: 196,
36
+ xterm_lime: 46,
37
+ xterm_yellow: 226,
38
+ xterm_blue: 21,
39
+ xterm_fuchsia: 201,
40
+ xterm_magenta: 201,
41
+ xterm_aqua: 51,
42
+ xterm_cyan: 51,
43
+ xterm_white: 231,
44
+
45
+ xterm_0: 16,
46
+ xterm_1: 52,
47
+ xterm_2: 22,
48
+ xterm_3: 58,
49
+ xterm_4: 17,
50
+ xterm_5: 54,
51
+ xterm_6: 36,
52
+ xterm_7: 250,
53
+ xterm_8: 244,
54
+ xterm_9: 196,
55
+ xterm_10: 46,
56
+ xterm_11: 226,
57
+ xterm_12: 21,
58
+ xterm_13: 201,
59
+ xterm_14: 51,
60
+ xterm_15: 231,
61
+
62
+ css_grey: 244,
63
+ css_gray: 244,
64
+ css_red: 196,
65
+ css_lime: 46,
66
+ css_yellow: 226,
67
+ css_blue: 21,
68
+ css_fuchsia: 201,
69
+ css_magenta: 201,
70
+ css_aqua: 51,
71
+ css_cyan: 51,
72
+ css_white: 231,
73
+ css_gold: 220,
74
+
75
+ grey0: 16,
76
+ navyblue: 17,
77
+ darkblue: 18,
78
+ blue3: 19,
79
+ blue2: 20,
80
+ blue1: 21,
81
+ darkgreen: 22,
82
+ deepskyblue4: 23,
83
+ deepskyblue1: 24,
84
+ deepskyblue2: 25,
85
+ dodgerblue3: 26,
86
+ dodgerblue2: 27,
87
+ green4: 28,
88
+ springgreen4: 29,
89
+ turquoise4: 30,
90
+ deepskyblue3: 31,
91
+ deepskyblue5: 32,
92
+ dodgerblue1: 33,
93
+ green3: 34,
94
+ springgreen3: 35,
95
+ darkcyan: 36,
96
+ lightseagreen: 37,
97
+ deepskyblue6: 38,
98
+ deepskyblue7: 39,
99
+ green1: 40,
100
+ springgreen1: 41,
101
+ springgreen2: 42,
102
+ cyan3: 43,
103
+ darkturquoise: 44,
104
+ turquoise2: 45,
105
+ green2: 46,
106
+ springgreen5: 47,
107
+ springgreen6: 48,
108
+ mediumspringgreen: 49,
109
+ cyan2: 50,
110
+ cyan1: 51,
111
+ darkred: 52,
112
+ deeppink4: 53,
113
+ purple4: 54,
114
+ purple1: 55,
115
+ purple3: 56,
116
+ blueviolet: 57,
117
+ orange4: 58,
118
+ grey37: 59,
119
+ mediumpurple4: 60,
120
+ slateblue3: 61,
121
+ slateblue1: 62,
122
+ royalblue1: 63,
123
+ chartreuse4: 64,
124
+ darkseagreen4: 65,
125
+ paleturquoise4: 66,
126
+ steelblue: 67,
127
+ steelblue3: 68,
128
+ cornflowerblue: 69,
129
+ chartreuse3: 70,
130
+ darkseagreen1: 71,
131
+ cadetblue: 72,
132
+ cadetblue1: 73,
133
+ skyblue3: 74,
134
+ steelblue1: 75,
135
+ chartreuse1: 76,
136
+ palegreen3: 77,
137
+ seagreen3: 78,
138
+ aquamarine3: 79,
139
+ mediumturquoise: 80,
140
+ steelblue2: 81,
141
+ chartreuse2: 82,
142
+ seagreen2: 83,
143
+ seagreen1: 84,
144
+ seagreen4: 85,
145
+ aquamarine1: 86,
146
+ darkslategray2: 87,
147
+ darkred1: 88,
148
+ deeppink1: 89,
149
+ darkmagenta: 90,
150
+ darkmagenta1: 91,
151
+ darkviolet: 92,
152
+ purple2: 93,
153
+ orange1: 94,
154
+ lightpink4: 95,
155
+ plum4: 96,
156
+ mediumpurple3: 97,
157
+ mediumpurple1: 98,
158
+ slateblue2: 99,
159
+ yellow4: 100,
160
+ wheat4: 101,
161
+ grey53: 102,
162
+ lightslategrey: 103,
163
+ mediumpurple: 104,
164
+ lightslateblue: 105,
165
+ yellow1: 106,
166
+ darkolivegreen3: 107,
167
+ darkseagreen: 108,
168
+ lightskyblue3: 109,
169
+ lightskyblue1: 110,
170
+ skyblue2: 111,
171
+ chartreuse5: 112,
172
+ darkolivegreen1: 113,
173
+ palegreen1: 114,
174
+ darkseagreen3: 115,
175
+ darkslategray3: 116,
176
+ skyblue1: 117,
177
+ chartreuse6: 118,
178
+ lightgreen: 119,
179
+ lightgreen1: 120,
180
+ palegreen2: 121,
181
+ aquamarine2: 122,
182
+ darkslategray1: 123,
183
+ red3: 124,
184
+ deeppink2: 125,
185
+ mediumvioletred: 126,
186
+ magenta3: 127,
187
+ darkviolet1: 128,
188
+ purple5: 129,
189
+ darkorange3: 130,
190
+ indianred: 131,
191
+ hotpink3: 132,
192
+ mediumorchid3: 133,
193
+ mediumorchid: 134,
194
+ mediumpurple2: 135,
195
+ darkgoldenrod: 136,
196
+ lightsalmon3: 137,
197
+ rosybrown: 138,
198
+ grey63: 139,
199
+ mediumpurple5: 140,
200
+ mediumpurple6: 141,
201
+ gold3: 142,
202
+ darkkhaki: 143,
203
+ navajowhite3: 144,
204
+ grey69: 145,
205
+ lightsteelblue3: 146,
206
+ lightsteelblue: 147,
207
+ yellow3: 148,
208
+ darkolivegreen2: 149,
209
+ darkseagreen2: 150,
210
+ darkseagreen5: 151,
211
+ lightcyan3: 152,
212
+ lightskyblue2: 153,
213
+ greenyellow: 154,
214
+ darkolivegreen4: 155,
215
+ palegreen4: 156,
216
+ darkseagreen6: 157,
217
+ darkseagreen7: 158,
218
+ paleturquoise1: 159,
219
+ red1: 160,
220
+ deeppink3: 161,
221
+ deeppink5: 162,
222
+ magenta1: 163,
223
+ magenta2: 164,
224
+ magenta4: 165,
225
+ darkorange1: 166,
226
+ indianred1: 167,
227
+ hotpink1: 168,
228
+ hotpink2: 169,
229
+ orchid: 170,
230
+ mediumorchid1: 171,
231
+ orange3: 172,
232
+ lightsalmon1: 173,
233
+ lightpink3: 174,
234
+ pink3: 175,
235
+ plum3: 176,
236
+ violet: 177,
237
+ gold1: 178,
238
+ lightgoldenrod3: 179,
239
+ tan: 180,
240
+ mistyrose3: 181,
241
+ thistle3: 182,
242
+ plum2: 183,
243
+ yellow2: 184,
244
+ khaki3: 185,
245
+ lightgoldenrod2: 186,
246
+ lightyellow3: 187,
247
+ grey84: 188,
248
+ lightsteelblue1: 189,
249
+ yellow5: 190,
250
+ darkolivegreen5: 191,
251
+ darkolivegreen6: 192,
252
+ darkseagreen8: 193,
253
+ honeydew2: 194,
254
+ lightcyan1: 195,
255
+ red2: 196,
256
+ deeppink6: 197,
257
+ deeppink7: 198,
258
+ deeppink8: 199,
259
+ magenta5: 200,
260
+ magenta6: 201,
261
+ orangered1: 202,
262
+ indianred2: 203,
263
+ indianred3: 204,
264
+ hotpink: 205,
265
+ hotpink4: 206,
266
+ mediumorchid2: 207,
267
+ darkorange: 208,
268
+ salmon1: 209,
269
+ lightcoral: 210,
270
+ palevioletred1: 211,
271
+ orchid2: 212,
272
+ orchid1: 213,
273
+ orange2: 214,
274
+ sandybrown: 215,
275
+ lightsalmon2: 216,
276
+ lightpink1: 217,
277
+ pink1: 218,
278
+ plum1: 219,
279
+ gold2: 220,
280
+ lightgoldenrod1: 221,
281
+ lightgoldenrod4: 222,
282
+ navajowhite1: 223,
283
+ mistyrose1: 224,
284
+ thistle1: 225,
285
+ yellow6: 226,
286
+ lightgoldenrod5: 227,
287
+ khaki1: 228,
288
+ wheat1: 229,
289
+ cornsilk1: 230,
290
+ grey100: 231,
291
+ grey3: 232,
292
+ grey7: 233,
293
+ grey11: 234,
294
+ grey15: 235,
295
+ grey19: 236,
296
+ grey23: 237,
297
+ grey27: 238,
298
+ grey30: 239,
299
+ grey35: 240,
300
+ grey39: 241,
301
+ grey42: 242,
302
+ grey46: 243,
303
+ grey50: 244,
304
+ grey54: 245,
305
+ grey58: 246,
306
+ grey62: 247,
307
+ grey66: 248,
308
+ grey70: 249,
309
+ grey74: 250,
310
+ grey78: 251,
311
+ grey82: 252,
312
+ grey85: 253,
313
+ grey89: 254,
314
+ grey93: 255
315
+ }.freeze
316
+ end
317
+
318
+ # generated by taking that xterm color list and then doing:
319
+ # clrs = %w[
320
+ # 16 Grey0 #000000 rgb(0,0,0) hsl(0,0%,0%)
321
+ # 17 NavyBlue #00005f rgb(0,0,95) hsl(240,100%,18%)
322
+ # 18 DarkBlue #000087 rgb(0,0,135) hsl(240,100%,26%)
323
+ # 19 Blue3 #0000af rgb(0,0,175) hsl(240,100%,34%)
324
+ # 20 Blue2 #0000d7 rgb(0,0,215) hsl(240,100%,42%)
325
+ # 21 Blue1 #0000ff rgb(0,0,255) hsl(240,100%,50%)
326
+ # 22 DarkGreen #005f00 rgb(0,95,0) hsl(120,100%,18%)
327
+ # 23 DeepSkyBlue4 #005f5f rgb(0,95,95) hsl(180,100%,18%)
328
+ # 24 DeepSkyBlue4 #005f87 rgb(0,95,135) hsl(97,100%,26%)
329
+ # 25 DeepSkyBlue4 #005faf rgb(0,95,175) hsl(07,100%,34%)
330
+ # 26 DodgerBlue3 #005fd7 rgb(0,95,215) hsl(13,100%,42%)
331
+ # 27 DodgerBlue2 #005fff rgb(0,95,255) hsl(17,100%,50%)
332
+ # 28 Green4 #008700 rgb(0,135,0) hsl(120,100%,26%)
333
+ # 29 SpringGreen4 #00875f rgb(0,135,95) hsl(62,100%,26%)
334
+ # 30 Turquoise4 #008787 rgb(0,135,135) hsl(180,100%,26%)
335
+ # 31 DeepSkyBlue3 #0087af rgb(0,135,175) hsl(93,100%,34%)
336
+ # 32 DeepSkyBlue3 #0087d7 rgb(0,135,215) hsl(02,100%,42%)
337
+ # 33 DodgerBlue1 #0087ff rgb(0,135,255) hsl(08,100%,50%)
338
+ # 34 Green3 #00af00 rgb(0,175,0) hsl(120,100%,34%)
339
+ # 35 SpringGreen3 #00af5f rgb(0,175,95) hsl(52,100%,34%)
340
+ # 36 DarkCyan #00af87 rgb(0,175,135) hsl(66,100%,34%)
341
+ # 37 LightSeaGreen #00afaf rgb(0,175,175) hsl(180,100%,34%)
342
+ # 38 DeepSkyBlue2 #00afd7 rgb(0,175,215) hsl(91,100%,42%)
343
+ # 39 DeepSkyBlue1 #00afff rgb(0,175,255) hsl(98,100%,50%)
344
+ # 40 Green3 #00d700 rgb(0,215,0) hsl(120,100%,42%)
345
+ # 41 SpringGreen3 #00d75f rgb(0,215,95) hsl(46,100%,42%)
346
+ # 42 SpringGreen2 #00d787 rgb(0,215,135) hsl(57,100%,42%)
347
+ # 43 Cyan3 #00d7af rgb(0,215,175) hsl(68,100%,42%)
348
+ # 44 DarkTurquoise #00d7d7 rgb(0,215,215) hsl(180,100%,42%)
349
+ # 45 Turquoise2 #00d7ff rgb(0,215,255) hsl(89,100%,50%)
350
+ # 46 Green1 #00ff00 rgb(0,255,0) hsl(120,100%,50%)
351
+ # 47 SpringGreen2 #00ff5f rgb(0,255,95) hsl(42,100%,50%)
352
+ # 48 SpringGreen1 #00ff87 rgb(0,255,135) hsl(51,100%,50%)
353
+ # 49 MediumSpringGreen #00ffaf rgb(0,255,175) hsl(61,100%,50%)
354
+ # 50 Cyan2 #00ffd7 rgb(0,255,215) hsl(70,100%,50%)
355
+ # 51 Cyan1 #00ffff rgb(0,255,255) hsl(180,100%,50%)
356
+ # 52 DarkRed #5f0000 rgb(95,0,0) hsl(0,100%,18%)
357
+ # 53 DeepPink4 #5f005f rgb(95,0,95) hsl(300,100%,18%)
358
+ # 54 Purple4 #5f0087 rgb(95,0,135) hsl(82,100%,26%)
359
+ # 55 Purple4 #5f00af rgb(95,0,175) hsl(72,100%,34%)
360
+ # 56 Purple3 #5f00d7 rgb(95,0,215) hsl(66,100%,42%)
361
+ # 57 BlueViolet #5f00ff rgb(95,0,255) hsl(62,100%,50%)
362
+ # 58 Orange4 #5f5f00 rgb(95,95,0) hsl(60,100%,18%)
363
+ # 59 Grey37 #5f5f5f rgb(95,95,95) hsl(0,0%,37%)
364
+ # 60 MediumPurple4 #5f5f87 rgb(95,95,135) hsl(240,17%,45%)
365
+ # 61 SlateBlue3 #5f5faf rgb(95,95,175) hsl(240,33%,52%)
366
+ # 62 SlateBlue3 #5f5fd7 rgb(95,95,215) hsl(240,60%,60%)
367
+ # 63 RoyalBlue1 #5f5fff rgb(95,95,255) hsl(240,100%,68%)
368
+ # 64 Chartreuse4 #5f8700 rgb(95,135,0) hsl(7,100%,26%)
369
+ # 65 DarkSeaGreen4 #5f875f rgb(95,135,95) hsl(120,17%,45%)
370
+ # 66 PaleTurquoise4 #5f8787 rgb(95,135,135) hsl(180,17%,45%)
371
+ # 67 SteelBlue #5f87af rgb(95,135,175) hsl(210,33%,52%)
372
+ # 68 SteelBlue3 #5f87d7 rgb(95,135,215) hsl(220,60%,60%)
373
+ # 69 CornflowerBlue #5f87ff rgb(95,135,255) hsl(225,100%,68%)
374
+ # 70 Chartreuse3 #5faf00 rgb(95,175,0) hsl(7,100%,34%)
375
+ # 71 DarkSeaGreen4 #5faf5f rgb(95,175,95) hsl(120,33%,52%)
376
+ # 72 CadetBlue #5faf87 rgb(95,175,135) hsl(150,33%,52%)
377
+ # 73 CadetBlue #5fafaf rgb(95,175,175) hsl(180,33%,52%)
378
+ # 74 SkyBlue3 #5fafd7 rgb(95,175,215) hsl(200,60%,60%)
379
+ # 75 SteelBlue1 #5fafff rgb(95,175,255) hsl(210,100%,68%)
380
+ # 76 Chartreuse3 #5fd700 rgb(95,215,0) hsl(3,100%,42%)
381
+ # 77 PaleGreen3 #5fd75f rgb(95,215,95) hsl(120,60%,60%)
382
+ # 78 SeaGreen3 #5fd787 rgb(95,215,135) hsl(140,60%,60%)
383
+ # 79 Aquamarine3 #5fd7af rgb(95,215,175) hsl(160,60%,60%)
384
+ # 80 MediumTurquoise #5fd7d7 rgb(95,215,215) hsl(180,60%,60%)
385
+ # 81 SteelBlue1 #5fd7ff rgb(95,215,255) hsl(195,100%,68%)
386
+ # 82 Chartreuse2 #5fff00 rgb(95,255,0) hsl(7,100%,50%)
387
+ # 83 SeaGreen2 #5fff5f rgb(95,255,95) hsl(120,100%,68%)
388
+ # 84 SeaGreen1 #5fff87 rgb(95,255,135) hsl(135,100%,68%)
389
+ # 85 SeaGreen1 #5fffaf rgb(95,255,175) hsl(150,100%,68%)
390
+ # 86 Aquamarine1 #5fffd7 rgb(95,255,215) hsl(165,100%,68%)
391
+ # 87 DarkSlateGray2 #5fffff rgb(95,255,255) hsl(180,100%,68%)
392
+ # 88 DarkRed #870000 rgb(135,0,0) hsl(0,100%,26%)
393
+ # 89 DeepPink4 #87005f rgb(135,0,95) hsl(17,100%,26%)
394
+ # 90 DarkMagenta #870087 rgb(135,0,135) hsl(300,100%,26%)
395
+ # 91 DarkMagenta #8700af rgb(135,0,175) hsl(86,100%,34%)
396
+ # 92 DarkViolet #8700d7 rgb(135,0,215) hsl(77,100%,42%)
397
+ # 93 Purple #8700ff rgb(135,0,255) hsl(71,100%,50%)
398
+ # 94 Orange4 #875f00 rgb(135,95,0) hsl(2,100%,26%)
399
+ # 95 LightPink4 #875f5f rgb(135,95,95) hsl(0,17%,45%)
400
+ # 96 Plum4 #875f87 rgb(135,95,135) hsl(300,17%,45%)
401
+ # 97 MediumPurple3 #875faf rgb(135,95,175) hsl(270,33%,52%)
402
+ # 98 MediumPurple3 #875fd7 rgb(135,95,215) hsl(260,60%,60%)
403
+ # 99 SlateBlue1 #875fff rgb(135,95,255) hsl(255,100%,68%)
404
+ # 100 Yellow4 #878700 rgb(135,135,0) hsl(60,100%,26%)
405
+ # 101 Wheat4 #87875f rgb(135,135,95) hsl(60,17%,45%)
406
+ # 102 Grey53 #878787 rgb(135,135,135) hsl(0,0%,52%)
407
+ # 103 LightSlateGrey #8787af rgb(135,135,175) hsl(240,20%,60%)
408
+ # 104 MediumPurple #8787d7 rgb(135,135,215) hsl(240,50%,68%)
409
+ # 105 LightSlateBlue #8787ff rgb(135,135,255) hsl(240,100%,76%)
410
+ # 106 Yellow4 #87af00 rgb(135,175,0) hsl(3,100%,34%)
411
+ # 107 DarkOliveGreen3 #87af5f rgb(135,175,95) hsl(90,33%,52%)
412
+ # 108 DarkSeaGreen #87af87 rgb(135,175,135) hsl(120,20%,60%)
413
+ # 109 LightSkyBlue3 #87afaf rgb(135,175,175) hsl(180,20%,60%)
414
+ # 110 LightSkyBlue3 #87afd7 rgb(135,175,215) hsl(210,50%,68%)
415
+ # 111 SkyBlue2 #87afff rgb(135,175,255) hsl(220,100%,76%)
416
+ # 112 Chartreuse2 #87d700 rgb(135,215,0) hsl(2,100%,42%)
417
+ # 113 DarkOliveGreen3 #87d75f rgb(135,215,95) hsl(100,60%,60%)
418
+ # 114 PaleGreen3 #87d787 rgb(135,215,135) hsl(120,50%,68%)
419
+ # 115 DarkSeaGreen3 #87d7af rgb(135,215,175) hsl(150,50%,68%)
420
+ # 116 DarkSlateGray3 #87d7d7 rgb(135,215,215) hsl(180,50%,68%)
421
+ # 117 SkyBlue1 #87d7ff rgb(135,215,255) hsl(200,100%,76%)
422
+ # 118 Chartreuse1 #87ff00 rgb(135,255,0) hsl(8,100%,50%)
423
+ # 119 LightGreen #87ff5f rgb(135,255,95) hsl(105,100%,68%)
424
+ # 120 LightGreen #87ff87 rgb(135,255,135) hsl(120,100%,76%)
425
+ # 121 PaleGreen1 #87ffaf rgb(135,255,175) hsl(140,100%,76%)
426
+ # 122 Aquamarine1 #87ffd7 rgb(135,255,215) hsl(160,100%,76%)
427
+ # 123 DarkSlateGray1 #87ffff rgb(135,255,255) hsl(180,100%,76%)
428
+ # 124 Red3 #af0000 rgb(175,0,0) hsl(0,100%,34%)
429
+ # 125 DeepPink4 #af005f rgb(175,0,95) hsl(27,100%,34%)
430
+ # 126 MediumVioletRed #af0087 rgb(175,0,135) hsl(13,100%,34%)
431
+ # 127 Magenta3 #af00af rgb(175,0,175) hsl(300,100%,34%)
432
+ # 128 DarkViolet #af00d7 rgb(175,0,215) hsl(88,100%,42%)
433
+ # 129 Purple #af00ff rgb(175,0,255) hsl(81,100%,50%)
434
+ # 130 DarkOrange3 #af5f00 rgb(175,95,0) hsl(2,100%,34%)
435
+ # 131 IndianRed #af5f5f rgb(175,95,95) hsl(0,33%,52%)
436
+ # 132 HotPink3 #af5f87 rgb(175,95,135) hsl(330,33%,52%)
437
+ # 133 MediumOrchid3 #af5faf rgb(175,95,175) hsl(300,33%,52%)
438
+ # 134 MediumOrchid #af5fd7 rgb(175,95,215) hsl(280,60%,60%)
439
+ # 135 MediumPurple2 #af5fff rgb(175,95,255) hsl(270,100%,68%)
440
+ # 136 DarkGoldenrod #af8700 rgb(175,135,0) hsl(6,100%,34%)
441
+ # 137 LightSalmon3 #af875f rgb(175,135,95) hsl(30,33%,52%)
442
+ # 138 RosyBrown #af8787 rgb(175,135,135) hsl(0,20%,60%)
443
+ # 139 Grey63 #af87af rgb(175,135,175) hsl(300,20%,60%)
444
+ # 140 MediumPurple2 #af87d7 rgb(175,135,215) hsl(270,50%,68%)
445
+ # 141 MediumPurple1 #af87ff rgb(175,135,255) hsl(260,100%,76%)
446
+ # 142 Gold3 #afaf00 rgb(175,175,0) hsl(60,100%,34%)
447
+ # 143 DarkKhaki #afaf5f rgb(175,175,95) hsl(60,33%,52%)
448
+ # 144 NavajoWhite3 #afaf87 rgb(175,175,135) hsl(60,20%,60%)
449
+ # 145 Grey69 #afafaf rgb(175,175,175) hsl(0,0%,68%)
450
+ # 146 LightSteelBlue3 #afafd7 rgb(175,175,215) hsl(240,33%,76%)
451
+ # 147 LightSteelBlue #afafff rgb(175,175,255) hsl(240,100%,84%)
452
+ # 148 Yellow3 #afd700 rgb(175,215,0) hsl(1,100%,42%)
453
+ # 149 DarkOliveGreen3 #afd75f rgb(175,215,95) hsl(80,60%,60%)
454
+ # 150 DarkSeaGreen3 #afd787 rgb(175,215,135) hsl(90,50%,68%)
455
+ # 151 DarkSeaGreen2 #afd7af rgb(175,215,175) hsl(120,33%,76%)
456
+ # 152 LightCyan3 #afd7d7 rgb(175,215,215) hsl(180,33%,76%)
457
+ # 153 LightSkyBlue1 #afd7ff rgb(175,215,255) hsl(210,100%,84%)
458
+ # 154 GreenYellow #afff00 rgb(175,255,0) hsl(8,100%,50%)
459
+ # 155 DarkOliveGreen2 #afff5f rgb(175,255,95) hsl(90,100%,68%)
460
+ # 156 PaleGreen1 #afff87 rgb(175,255,135) hsl(100,100%,76%)
461
+ # 157 DarkSeaGreen2 #afffaf rgb(175,255,175) hsl(120,100%,84%)
462
+ # 158 DarkSeaGreen1 #afffd7 rgb(175,255,215) hsl(150,100%,84%)
463
+ # 159 PaleTurquoise1 #afffff rgb(175,255,255) hsl(180,100%,84%)
464
+ # 160 Red3 #d70000 rgb(215,0,0) hsl(0,100%,42%)
465
+ # 161 DeepPink3 #d7005f rgb(215,0,95) hsl(33,100%,42%)
466
+ # 162 DeepPink3 #d70087 rgb(215,0,135) hsl(22,100%,42%)
467
+ # 163 Magenta3 #d700af rgb(215,0,175) hsl(11,100%,42%)
468
+ # 164 Magenta3 #d700d7 rgb(215,0,215) hsl(300,100%,42%)
469
+ # 165 Magenta2 #d700ff rgb(215,0,255) hsl(90,100%,50%)
470
+ # 166 DarkOrange3 #d75f00 rgb(215,95,0) hsl(6,100%,42%)
471
+ # 167 IndianRed #d75f5f rgb(215,95,95) hsl(0,60%,60%)
472
+ # 168 HotPink3 #d75f87 rgb(215,95,135) hsl(340,60%,60%)
473
+ # 169 HotPink2 #d75faf rgb(215,95,175) hsl(320,60%,60%)
474
+ # 170 Orchid #d75fd7 rgb(215,95,215) hsl(300,60%,60%)
475
+ # 171 MediumOrchid1 #d75fff rgb(215,95,255) hsl(285,100%,68%)
476
+ # 172 Orange3 #d78700 rgb(215,135,0) hsl(7,100%,42%)
477
+ # 173 LightSalmon3 #d7875f rgb(215,135,95) hsl(20,60%,60%)
478
+ # 174 LightPink3 #d78787 rgb(215,135,135) hsl(0,50%,68%)
479
+ # 175 Pink3 #d787af rgb(215,135,175) hsl(330,50%,68%)
480
+ # 176 Plum3 #d787d7 rgb(215,135,215) hsl(300,50%,68%)
481
+ # 177 Violet #d787ff rgb(215,135,255) hsl(280,100%,76%)
482
+ # 178 Gold3 #d7af00 rgb(215,175,0) hsl(8,100%,42%)
483
+ # 179 LightGoldenrod3 #d7af5f rgb(215,175,95) hsl(40,60%,60%)
484
+ # 180 Tan #d7af87 rgb(215,175,135) hsl(30,50%,68%)
485
+ # 181 MistyRose3 #d7afaf rgb(215,175,175) hsl(0,33%,76%)
486
+ # 182 Thistle3 #d7afd7 rgb(215,175,215) hsl(300,33%,76%)
487
+ # 183 Plum2 #d7afff rgb(215,175,255) hsl(270,100%,84%)
488
+ # 184 Yellow3 #d7d700 rgb(215,215,0) hsl(60,100%,42%)
489
+ # 185 Khaki3 #d7d75f rgb(215,215,95) hsl(60,60%,60%)
490
+ # 186 LightGoldenrod2 #d7d787 rgb(215,215,135) hsl(60,50%,68%)
491
+ # 187 LightYellow3 #d7d7af rgb(215,215,175) hsl(60,33%,76%)
492
+ # 188 Grey84 #d7d7d7 rgb(215,215,215) hsl(0,0%,84%)
493
+ # 189 LightSteelBlue1 #d7d7ff rgb(215,215,255) hsl(240,100%,92%)
494
+ # 190 Yellow2 #d7ff00 rgb(215,255,0) hsl(9,100%,50%)
495
+ # 191 DarkOliveGreen1 #d7ff5f rgb(215,255,95) hsl(75,100%,68%)
496
+ # 192 DarkOliveGreen1 #d7ff87 rgb(215,255,135) hsl(80,100%,76%)
497
+ # 193 DarkSeaGreen1 #d7ffaf rgb(215,255,175) hsl(90,100%,84%)
498
+ # 194 Honeydew2 #d7ffd7 rgb(215,255,215) hsl(120,100%,92%)
499
+ # 195 LightCyan1 #d7ffff rgb(215,255,255) hsl(180,100%,92%)
500
+ # 196 Red1 #ff0000 rgb(255,0,0) hsl(0,100%,50%)
501
+ # 197 DeepPink2 #ff005f rgb(255,0,95) hsl(37,100%,50%)
502
+ # 198 DeepPink1 #ff0087 rgb(255,0,135) hsl(28,100%,50%)
503
+ # 199 DeepPink1 #ff00af rgb(255,0,175) hsl(18,100%,50%)
504
+ # 200 Magenta2 #ff00d7 rgb(255,0,215) hsl(09,100%,50%)
505
+ # 201 Magenta1 #ff00ff rgb(255,0,255) hsl(300,100%,50%)
506
+ # 202 OrangeRed1 #ff5f00 rgb(255,95,0) hsl(2,100%,50%)
507
+ # 203 IndianRed1 #ff5f5f rgb(255,95,95) hsl(0,100%,68%)
508
+ # 204 IndianRed1 #ff5f87 rgb(255,95,135) hsl(345,100%,68%)
509
+ # 205 HotPink #ff5faf rgb(255,95,175) hsl(330,100%,68%)
510
+ # 206 HotPink #ff5fd7 rgb(255,95,215) hsl(315,100%,68%)
511
+ # 207 MediumOrchid1 #ff5fff rgb(255,95,255) hsl(300,100%,68%)
512
+ # 208 DarkOrange #ff8700 rgb(255,135,0) hsl(1,100%,50%)
513
+ # 209 Salmon1 #ff875f rgb(255,135,95) hsl(15,100%,68%)
514
+ # 210 LightCoral #ff8787 rgb(255,135,135) hsl(0,100%,76%)
515
+ # 211 PaleVioletRed1 #ff87af rgb(255,135,175) hsl(340,100%,76%)
516
+ # 212 Orchid2 #ff87d7 rgb(255,135,215) hsl(320,100%,76%)
517
+ # 213 Orchid1 #ff87ff rgb(255,135,255) hsl(300,100%,76%)
518
+ # 214 Orange1 #ffaf00 rgb(255,175,0) hsl(1,100%,50%)
519
+ # 215 SandyBrown #ffaf5f rgb(255,175,95) hsl(30,100%,68%)
520
+ # 216 LightSalmon1 #ffaf87 rgb(255,175,135) hsl(20,100%,76%)
521
+ # 217 LightPink1 #ffafaf rgb(255,175,175) hsl(0,100%,84%)
522
+ # 218 Pink1 #ffafd7 rgb(255,175,215) hsl(330,100%,84%)
523
+ # 219 Plum1 #ffafff rgb(255,175,255) hsl(300,100%,84%)
524
+ # 220 Gold1 #ffd700 rgb(255,215,0) hsl(50,100%,50%)
525
+ # 221 LightGoldenrod2 #ffd75f rgb(255,215,95) hsl(45,100%,68%)
526
+ # 222 LightGoldenrod2 #ffd787 rgb(255,215,135) hsl(40,100%,76%)
527
+ # 223 NavajoWhite1 #ffd7af rgb(255,215,175) hsl(30,100%,84%)
528
+ # 224 MistyRose1 #ffd7d7 rgb(255,215,215) hsl(0,100%,92%)
529
+ # 225 Thistle1 #ffd7ff rgb(255,215,255) hsl(300,100%,92%)
530
+ # 226 Yellow1 #ffff00 rgb(255,255,0) hsl(60,100%,50%)
531
+ # 227 LightGoldenrod1 #ffff5f rgb(255,255,95) hsl(60,100%,68%)
532
+ # 228 Khaki1 #ffff87 rgb(255,255,135) hsl(60,100%,76%)
533
+ # 229 Wheat1 #ffffaf rgb(255,255,175) hsl(60,100%,84%)
534
+ # 230 Cornsilk1 #ffffd7 rgb(255,255,215) hsl(60,100%,92%)
535
+ # 231 Grey100 #ffffff rgb(255,255,255) hsl(0,0%,100%)
536
+ # 232 Grey3 #080808 rgb(8,8,8) hsl(0,0%,3%)
537
+ # 233 Grey7 #121212 rgb(18,18,18) hsl(0,0%,7%)
538
+ # 234 Grey11 #1c1c1c rgb(28,28,28) hsl(0,0%,10%)
539
+ # 235 Grey15 #262626 rgb(38,38,38) hsl(0,0%,14%)
540
+ # 236 Grey19 #303030 rgb(48,48,48) hsl(0,0%,18%)
541
+ # 237 Grey23 #3a3a3a rgb(58,58,58) hsl(0,0%,22%)
542
+ # 238 Grey27 #444444 rgb(68,68,68) hsl(0,0%,26%)
543
+ # 239 Grey30 #4e4e4e rgb(78,78,78) hsl(0,0%,30%)
544
+ # 240 Grey35 #585858 rgb(88,88,88) hsl(0,0%,34%)
545
+ # 241 Grey39 #626262 rgb(98,98,98) hsl(0,0%,37%)
546
+ # 242 Grey42 #6c6c6c rgb(108,108,108) hsl(0,0%,40%)
547
+ # 243 Grey46 #767676 rgb(118,118,118) hsl(0,0%,46%)
548
+ # 244 Grey50 #808080 rgb(128,128,128) hsl(0,0%,50%)
549
+ # 245 Grey54 #8a8a8a rgb(138,138,138) hsl(0,0%,54%)
550
+ # 246 Grey58 #949494 rgb(148,148,148) hsl(0,0%,58%)
551
+ # 247 Grey62 #9e9e9e rgb(158,158,158) hsl(0,0%,61%)
552
+ # 248 Grey66 #a8a8a8 rgb(168,168,168) hsl(0,0%,65%)
553
+ # 249 Grey70 #b2b2b2 rgb(178,178,178) hsl(0,0%,69%)
554
+ # 250 Grey74 #bcbcbc rgb(188,188,188) hsl(0,0%,73%)
555
+ # 251 Grey78 #c6c6c6 rgb(198,198,198) hsl(0,0%,77%)
556
+ # 252 Grey82 #d0d0d0 rgb(208,208,208) hsl(0,0%,81%)
557
+ # 253 Grey85 #dadada rgb(218,218,218) hsl(0,0%,85%)
558
+ # 254 Grey89 #e4e4e4 rgb(228,228,228) hsl(0,0%,89%)
559
+ # 255 Grey93 #eeeeee rgb(238,238,238) hsl(0,0%,93%)
560
+ # ]
561
+
562
+ # hex_css = {}
563
+ # cssclr.each_slice(2) do |x|
564
+ # #puts "#{x[0]} #{x[1]} "
565
+ # hex_css[x[1]] = [x[0]]
566
+ # end
567
+
568
+ # dupl_colors = {}
569
+
570
+ # clrhash = {}
571
+
572
+ # longest = 0
573
+
574
+ # clrs.each_slice(5) do |x|
575
+ # x[1] = x[1].downcase
576
+
577
+ # basecolor = x[1].gsub(/\d+$/, '')
578
+
579
+ # if dupl_colors.key?(x[1])
580
+ # newcolorname = ""
581
+ # 255.times do |i|
582
+ # newcolorname = "#{basecolor}#{i+1}"
583
+ # if !dupl_colors.key?(newcolorname)
584
+ # dupl_colors[x[1]] << newcolorname
585
+ # x[1] = newcolorname
586
+ # break
587
+ # end
588
+ # end
589
+ # end
590
+
591
+ # dupl_colors[x[1]] ||= []
592
+
593
+ # c.color!(x[0].to_i)
594
+ # print "#{x[0]} #{x[1]} "
595
+ # c.color!(255)
596
+ # puts "#{x[0]} #{x[1]} #{x[2]} #{x[3]} #{x[4]} css=#{hex_css[x[2]]}"
597
+
598
+ # if x[1].length > longest
599
+ # longest = x[1].length
600
+ # end
601
+ # clrhash[x[1]] = x[0].to_i
602
+ # end
603
+ # clrhash.each do |x,y|
604
+ # puts "#{x.rjust(longest)}: #{y},"
605
+ # end
@@ -0,0 +1,16 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Rcalc
4
+ TERMINAL_COMMANDS = {
5
+ home: 'H',
6
+
7
+ erase_below: '0J',
8
+ erase_above: '1J',
9
+ erase_all: '2J',
10
+ erase_saved: '3J',
11
+
12
+ erase_right: '0K',
13
+ erase_left: '1K',
14
+ erase_line: '2K'
15
+ }.freeze
16
+ end
@@ -0,0 +1,9 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Rcalc
4
+ TERMINAL_TOGGLES = {
5
+ mouse_button: '?1000;1006',
6
+ mouse_event: '?1000;1003;1006',
7
+ focus_event: '?1004'
8
+ }.freeze
9
+ end
@@ -0,0 +1,5 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Rcalc
4
+ VERSION = '0.1.0'
5
+ end
data/lib/rcalc.rb ADDED
@@ -0,0 +1,16 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'io/console'
4
+
5
+ require 'rcalc/version'
6
+
7
+ require 'rcalc/terminal_colors'
8
+ require 'rcalc/terminal_commands'
9
+ require 'rcalc/terminal_toggles'
10
+
11
+ require 'rcalc/terminal'
12
+
13
+ module Rcalc
14
+ class Error < StandardError; end
15
+ # Your code goes here...
16
+ end
data/rcalc.gemspec ADDED
@@ -0,0 +1,34 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative 'lib/rcalc/version'
4
+
5
+ Gem::Specification.new do |spec|
6
+ spec.name = 'rcalc'
7
+ spec.version = Rcalc::VERSION
8
+ spec.authors = ['David Siaw']
9
+ spec.email = ['874280+davidsiaw@users.noreply.github.com']
10
+
11
+ spec.summary = 'Ruby Calculator'
12
+ spec.description = 'Terminal tools for interactive calculations'
13
+ spec.homepage = 'https://github.com/davidsiaw/rcalc'
14
+ spec.license = 'MIT'
15
+ spec.required_ruby_version = Gem::Requirement.new('>= 3.0')
16
+
17
+ spec.metadata['allowed_push_host'] = 'https://rubygems.org'
18
+
19
+ spec.metadata['homepage_uri'] = spec.homepage
20
+ spec.metadata['source_code_uri'] = 'https://github.com/davidsiaw/rcalc'
21
+ spec.metadata['changelog_uri'] = 'https://github.com/davidsiaw/rcalc'
22
+ spec.metadata['rubygems_mfa_required'] = 'true'
23
+
24
+ spec.files = Dir['{exe,data,lib}/**/*'] + %w[Gemfile rcalc.gemspec]
25
+ spec.bindir = 'exe'
26
+ spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
27
+ spec.require_paths = ['lib']
28
+
29
+ spec.add_development_dependency 'rake'
30
+ spec.add_development_dependency 'rspec'
31
+ spec.add_development_dependency 'rubocop'
32
+ spec.add_development_dependency 'rubocop-rake'
33
+ spec.add_development_dependency 'rubocop-rspec'
34
+ end
metadata ADDED
@@ -0,0 +1,128 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: rcalc
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - David Siaw
8
+ autorequire:
9
+ bindir: exe
10
+ cert_chain: []
11
+ date: 2026-03-30 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: rake
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: '0'
20
+ type: :development
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ">="
25
+ - !ruby/object:Gem::Version
26
+ version: '0'
27
+ - !ruby/object:Gem::Dependency
28
+ name: rspec
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: rubocop
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ">="
46
+ - !ruby/object:Gem::Version
47
+ version: '0'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ">="
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: rubocop-rake
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ">="
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ">="
67
+ - !ruby/object:Gem::Version
68
+ version: '0'
69
+ - !ruby/object:Gem::Dependency
70
+ name: rubocop-rspec
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - ">="
74
+ - !ruby/object:Gem::Version
75
+ version: '0'
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - ">="
81
+ - !ruby/object:Gem::Version
82
+ version: '0'
83
+ description: Terminal tools for interactive calculations
84
+ email:
85
+ - 874280+davidsiaw@users.noreply.github.com
86
+ executables:
87
+ - README.md
88
+ extensions: []
89
+ extra_rdoc_files: []
90
+ files:
91
+ - Gemfile
92
+ - exe/README.md
93
+ - lib/rcalc.rb
94
+ - lib/rcalc/terminal.rb
95
+ - lib/rcalc/terminal_colors.rb
96
+ - lib/rcalc/terminal_commands.rb
97
+ - lib/rcalc/terminal_toggles.rb
98
+ - lib/rcalc/version.rb
99
+ - rcalc.gemspec
100
+ homepage: https://github.com/davidsiaw/rcalc
101
+ licenses:
102
+ - MIT
103
+ metadata:
104
+ allowed_push_host: https://rubygems.org
105
+ homepage_uri: https://github.com/davidsiaw/rcalc
106
+ source_code_uri: https://github.com/davidsiaw/rcalc
107
+ changelog_uri: https://github.com/davidsiaw/rcalc
108
+ rubygems_mfa_required: 'true'
109
+ post_install_message:
110
+ rdoc_options: []
111
+ require_paths:
112
+ - lib
113
+ required_ruby_version: !ruby/object:Gem::Requirement
114
+ requirements:
115
+ - - ">="
116
+ - !ruby/object:Gem::Version
117
+ version: '3.0'
118
+ required_rubygems_version: !ruby/object:Gem::Requirement
119
+ requirements:
120
+ - - ">="
121
+ - !ruby/object:Gem::Version
122
+ version: '0'
123
+ requirements: []
124
+ rubygems_version: 3.5.22
125
+ signing_key:
126
+ specification_version: 4
127
+ summary: Ruby Calculator
128
+ test_files: []