howzit 2.1.2 → 2.1.4
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +16 -0
- data/lib/howzit/colors.rb +47 -22
- data/lib/howzit/config.rb +89 -0
- data/lib/howzit/version.rb +1 -1
- data/lib/howzit.rb +28 -24
- metadata +1 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: c6636feaeffc5a9b8ece43a5ac13d50959412ae83b45aa22f2c8f45aa3243b51
|
4
|
+
data.tar.gz: 537931680e6c7edcb1149339b09877df06d283daa0d0513486cfd1452de4f0b3
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 93b5c6136f0c612aa914151e0e0df4caa2c4a01259325b4b725aad289eda22d11b09f70d4801d40bb9587733ee8ff62c9117a9b14d53344ee449c6a1c394e612
|
7
|
+
data.tar.gz: 1ccc318642663bde10dd806752f796d39344cebea009b930d7dbe2ead69a537fbd5077f66f1e0876d41706fba9a982c4bb6328ddfcea17d2d4f09ae42d4c69bc
|
data/CHANGELOG.md
CHANGED
@@ -1,3 +1,19 @@
|
|
1
|
+
### 2.1.4
|
2
|
+
|
3
|
+
2023-03-07 12:52
|
4
|
+
|
5
|
+
#### NEW
|
6
|
+
|
7
|
+
- A theme file is automatically created where you can change the default output of any color that Howzit outputs. They can be 2-3 digit ANSI escape codes, or '#XXXXXX' RGB hex codes
|
8
|
+
|
9
|
+
### 2.1.3
|
10
|
+
|
11
|
+
2023-03-07 11:21
|
12
|
+
|
13
|
+
#### FIXED
|
14
|
+
|
15
|
+
- Annoying warning about color template format string having too many arguments
|
16
|
+
|
1
17
|
### 2.1.2
|
2
18
|
|
3
19
|
2023-03-07 10:24
|
data/lib/howzit/colors.rb
CHANGED
@@ -205,6 +205,49 @@ module Howzit
|
|
205
205
|
@coloring ||= true
|
206
206
|
end
|
207
207
|
|
208
|
+
def translate_rgb(code)
|
209
|
+
return code if code !~ /#[A-Z0-9]{3,6}/i
|
210
|
+
|
211
|
+
rgb(code)
|
212
|
+
end
|
213
|
+
|
214
|
+
##
|
215
|
+
## Generate escape codes for hex colors
|
216
|
+
##
|
217
|
+
## @param hex [String] The hexadecimal color code
|
218
|
+
##
|
219
|
+
## @return [String] ANSI escape string
|
220
|
+
##
|
221
|
+
def rgb(hex)
|
222
|
+
is_bg = hex.match(/^bg?#/) ? true : false
|
223
|
+
hex_string = hex.sub(/^([fb]g?)?#/, '')
|
224
|
+
|
225
|
+
parts = hex_string.match(/(?<r>..)(?<g>..)(?<b>..)/)
|
226
|
+
t = []
|
227
|
+
%w[r g b].each do |e|
|
228
|
+
t << parts[e].hex
|
229
|
+
end
|
230
|
+
|
231
|
+
"\e[#{is_bg ? '48' : '38'};2;#{t.join(';')}"
|
232
|
+
end
|
233
|
+
|
234
|
+
# Merge config file colors into attributes
|
235
|
+
def configured_colors
|
236
|
+
color_file = File.join(File.expand_path(CONFIG_DIR), COLOR_FILE)
|
237
|
+
if File.exist?(color_file)
|
238
|
+
colors = YAML.load(Util.read_file(color_file))
|
239
|
+
return ATTRIBUTES unless !colors.nil? && colors.is_a?(Hash)
|
240
|
+
|
241
|
+
attrs = ATTRIBUTES.to_h
|
242
|
+
attrs = attrs.merge(colors.symbolize_keys)
|
243
|
+
new_colors = {}
|
244
|
+
attrs.each { |k, v| new_colors[k] = translate_rgb(v) }
|
245
|
+
new_colors.to_a
|
246
|
+
else
|
247
|
+
ATTRIBUTES
|
248
|
+
end
|
249
|
+
end
|
250
|
+
|
208
251
|
##
|
209
252
|
## Convert a template string to a colored string.
|
210
253
|
## Colors are specified with single letters inside
|
@@ -237,11 +280,13 @@ module Howzit
|
|
237
280
|
Y: bgyellow, C: bgcyan, M: bgmagenta, R: bgred,
|
238
281
|
d: dark, b: bold, u: underline, i: italic, x: reset }
|
239
282
|
|
240
|
-
format(fmt, colors)
|
283
|
+
fmt.empty? ? input : format(fmt, colors)
|
241
284
|
end
|
242
285
|
end
|
243
286
|
|
244
|
-
|
287
|
+
# Dynamically generate methods for each color name. Each
|
288
|
+
# resulting method can be called with a string or a block.
|
289
|
+
configured_colors.each do |c, v|
|
245
290
|
new_method = <<-EOSCRIPT
|
246
291
|
# Color string as #{c}
|
247
292
|
def #{c}(string = nil)
|
@@ -288,26 +333,6 @@ module Howzit
|
|
288
333
|
module_eval(new_method)
|
289
334
|
end
|
290
335
|
|
291
|
-
##
|
292
|
-
## Generate escape codes for hex colors
|
293
|
-
##
|
294
|
-
## @param hex [String] The hexadecimal color code
|
295
|
-
##
|
296
|
-
## @return [String] ANSI escape string
|
297
|
-
##
|
298
|
-
def rgb(hex)
|
299
|
-
is_bg = hex.match(/^bg?#/) ? true : false
|
300
|
-
hex_string = hex.sub(/^([fb]g?)?#/, '')
|
301
|
-
|
302
|
-
parts = hex_string.match(/(?<r>..)(?<g>..)(?<b>..)/)
|
303
|
-
t = []
|
304
|
-
%w[r g b].each do |e|
|
305
|
-
t << parts[e].hex
|
306
|
-
end
|
307
|
-
color =
|
308
|
-
"\e[#{is_bg ? '48' : '38'};2;#{t.join(';')}m"
|
309
|
-
end
|
310
|
-
|
311
336
|
# Regular expression that is used to scan for ANSI-sequences while
|
312
337
|
# uncoloring strings.
|
313
338
|
COLORED_REGEXP = /\e\[(?:(?:[349]|10)[0-7]|[0-9])?m/.freeze
|
data/lib/howzit/config.rb
CHANGED
@@ -23,6 +23,45 @@ module Howzit
|
|
23
23
|
wrap: 0
|
24
24
|
}.deep_freeze
|
25
25
|
|
26
|
+
DEFAULT_COLORS = [
|
27
|
+
[:black, 30],
|
28
|
+
[:red, 31],
|
29
|
+
[:green, 32],
|
30
|
+
[:yellow, 33],
|
31
|
+
[:blue, 34],
|
32
|
+
[:magenta, 35],
|
33
|
+
[:purple, 35],
|
34
|
+
[:cyan, 36],
|
35
|
+
[:white, 37],
|
36
|
+
[:bgblack, 40],
|
37
|
+
[:bgred, 41],
|
38
|
+
[:bggreen, 42],
|
39
|
+
[:bgyellow, 43],
|
40
|
+
[:bgblue, 44],
|
41
|
+
[:bgmagenta, 45],
|
42
|
+
[:bgpurple, 45],
|
43
|
+
[:bgcyan, 46],
|
44
|
+
[:bgwhite, 47],
|
45
|
+
[:boldblack, 90],
|
46
|
+
[:boldred, 91],
|
47
|
+
[:boldgreen, 92],
|
48
|
+
[:boldyellow, 93],
|
49
|
+
[:boldblue, 94],
|
50
|
+
[:boldmagenta, 95],
|
51
|
+
[:boldpurple, 95],
|
52
|
+
[:boldcyan, 96],
|
53
|
+
[:boldwhite, 97],
|
54
|
+
[:boldbgblack, 100],
|
55
|
+
[:boldbgred, 101],
|
56
|
+
[:boldbggreen, 102],
|
57
|
+
[:boldbgyellow, 103],
|
58
|
+
[:boldbgblue, 104],
|
59
|
+
[:boldbgmagenta, 105],
|
60
|
+
[:boldbgpurple, 105],
|
61
|
+
[:boldbgcyan, 106],
|
62
|
+
[:boldbgwhite, 107]
|
63
|
+
].to_h.deep_freeze
|
64
|
+
|
26
65
|
##
|
27
66
|
## Initialize a config object
|
28
67
|
##
|
@@ -39,6 +78,15 @@ module Howzit
|
|
39
78
|
File.open(config_file, 'w') { |f| f.puts config.to_yaml }
|
40
79
|
end
|
41
80
|
|
81
|
+
##
|
82
|
+
## Write a theme to a file
|
83
|
+
##
|
84
|
+
## @param config The configuration
|
85
|
+
##
|
86
|
+
def write_theme(config)
|
87
|
+
File.open(theme_file, 'w') { |f| f.puts config.to_yaml }
|
88
|
+
end
|
89
|
+
|
42
90
|
##
|
43
91
|
## Test if a file should be ignored based on YAML file
|
44
92
|
##
|
@@ -105,6 +153,7 @@ module Howzit
|
|
105
153
|
}
|
106
154
|
|
107
155
|
config = load_config
|
156
|
+
load_theme
|
108
157
|
@options = flags.merge(config)
|
109
158
|
end
|
110
159
|
|
@@ -126,6 +175,15 @@ module Howzit
|
|
126
175
|
File.join(config_dir, CONFIG_FILE)
|
127
176
|
end
|
128
177
|
|
178
|
+
##
|
179
|
+
## Get the theme file
|
180
|
+
##
|
181
|
+
## @return [String] path to config file
|
182
|
+
##
|
183
|
+
def theme_file
|
184
|
+
File.join(config_dir, COLOR_FILE)
|
185
|
+
end
|
186
|
+
|
129
187
|
##
|
130
188
|
## Get the ignore config file
|
131
189
|
##
|
@@ -153,6 +211,24 @@ module Howzit
|
|
153
211
|
config_file
|
154
212
|
end
|
155
213
|
|
214
|
+
##
|
215
|
+
## Create a new config file (and directory if needed)
|
216
|
+
##
|
217
|
+
## @param default [Hash] default configuration to write
|
218
|
+
##
|
219
|
+
def create_theme(default)
|
220
|
+
unless File.directory?(config_dir)
|
221
|
+
Howzit::ConsoleLogger.new(1).info "Creating theme directory at #{config_dir}"
|
222
|
+
FileUtils.mkdir_p(config_dir)
|
223
|
+
end
|
224
|
+
|
225
|
+
unless File.exist?(theme_file)
|
226
|
+
Howzit::ConsoleLogger.new(1).info "Writing fresh theme file to #{theme_file}"
|
227
|
+
write_theme(default)
|
228
|
+
end
|
229
|
+
theme_file
|
230
|
+
end
|
231
|
+
|
156
232
|
##
|
157
233
|
## Load the config file
|
158
234
|
##
|
@@ -166,6 +242,19 @@ module Howzit
|
|
166
242
|
newconfig.dup
|
167
243
|
end
|
168
244
|
|
245
|
+
##
|
246
|
+
## Load the theme file
|
247
|
+
##
|
248
|
+
## @return [Hash] configuration object
|
249
|
+
##
|
250
|
+
def load_theme
|
251
|
+
file = create_theme(DEFAULT_COLORS)
|
252
|
+
config = YAML.load(Util.read_file(file))
|
253
|
+
newconfig = config ? DEFAULT_COLORS.merge(config) : DEFAULT_COLORS
|
254
|
+
write_theme(newconfig)
|
255
|
+
newconfig.dup
|
256
|
+
end
|
257
|
+
|
169
258
|
##
|
170
259
|
## Open the config in an editor
|
171
260
|
##
|
data/lib/howzit/version.rb
CHANGED
data/lib/howzit.rb
CHANGED
@@ -1,35 +1,14 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
require_relative 'howzit/version'
|
4
|
-
require_relative 'howzit/prompt'
|
5
|
-
require_relative 'howzit/colors'
|
6
|
-
require_relative 'howzit/stringutils'
|
7
|
-
|
8
|
-
require_relative 'howzit/hash'
|
9
|
-
require_relative 'howzit/console_logger'
|
10
|
-
require_relative 'howzit/util'
|
11
|
-
require_relative 'howzit/config'
|
12
|
-
require_relative 'howzit/task'
|
13
|
-
require_relative 'howzit/topic'
|
14
|
-
require_relative 'howzit/buildnote'
|
15
|
-
|
16
|
-
require 'optparse'
|
17
|
-
require 'shellwords'
|
18
|
-
require 'pathname'
|
19
|
-
require 'readline'
|
20
|
-
require 'tempfile'
|
21
|
-
require 'yaml'
|
22
|
-
|
23
|
-
require 'tty/screen'
|
24
|
-
require 'tty/box'
|
25
|
-
# require 'tty/prompt'
|
26
|
-
|
27
3
|
# Main config dir
|
28
4
|
CONFIG_DIR = '~/.config/howzit'
|
29
5
|
|
30
6
|
# Config file name
|
31
7
|
CONFIG_FILE = 'howzit.yaml'
|
32
8
|
|
9
|
+
# Color template name
|
10
|
+
COLOR_FILE = 'theme.yaml'
|
11
|
+
|
33
12
|
# Ignore file name
|
34
13
|
IGNORE_FILE = 'ignore.yaml'
|
35
14
|
|
@@ -42,6 +21,31 @@ MULTIPLE_OPTIONS = %w[first best all choose].freeze
|
|
42
21
|
# Available options for header formatting
|
43
22
|
HEADER_FORMAT_OPTIONS = %w[border block].freeze
|
44
23
|
|
24
|
+
require 'optparse'
|
25
|
+
require 'shellwords'
|
26
|
+
require 'pathname'
|
27
|
+
require 'readline'
|
28
|
+
require 'tempfile'
|
29
|
+
require 'yaml'
|
30
|
+
|
31
|
+
require_relative 'howzit/util'
|
32
|
+
require_relative 'howzit/hash'
|
33
|
+
|
34
|
+
require_relative 'howzit/version'
|
35
|
+
require_relative 'howzit/prompt'
|
36
|
+
require_relative 'howzit/colors'
|
37
|
+
require_relative 'howzit/stringutils'
|
38
|
+
|
39
|
+
require_relative 'howzit/console_logger'
|
40
|
+
require_relative 'howzit/config'
|
41
|
+
require_relative 'howzit/task'
|
42
|
+
require_relative 'howzit/topic'
|
43
|
+
require_relative 'howzit/buildnote'
|
44
|
+
|
45
|
+
require 'tty/screen'
|
46
|
+
require 'tty/box'
|
47
|
+
# require 'tty/prompt'
|
48
|
+
|
45
49
|
# Main module for howzit
|
46
50
|
module Howzit
|
47
51
|
class << self
|