term-ansicolor 1.10.4 → 1.11.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 +4 -4
- data/.gitignore +1 -0
- data/README.md +3 -0
- data/Rakefile +1 -1
- data/VERSION +1 -1
- data/bin/term_plasma +97 -0
- data/lib/term/ansicolor/attribute/color256.rb +1 -1
- data/lib/term/ansicolor/attribute.rb +20 -9
- data/lib/term/ansicolor/hsl_triple.rb +1 -1
- data/lib/term/ansicolor/ppm_reader.rb +1 -5
- data/lib/term/ansicolor/rgb_color_metrics.rb +5 -5
- data/lib/term/ansicolor/rgb_triple.rb +6 -2
- data/lib/term/ansicolor/version.rb +1 -1
- data/term-ansicolor.gemspec +7 -7
- metadata +7 -5
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: a99b1522303d7fa622793a7b924e74f897de9a031f775f723aac24bb3f7e6bf5
|
4
|
+
data.tar.gz: 58f241a9bdbc068dae3c856aaf919939e3e1a25f831fa4fa6ed562d324365e55
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 7e2716d88870533348a32230da0436fbb127d7dac440d4da5bbf292489b005d8d282f35b067bc14cd5919fbc4ad34ddfdbd1c2f016e5abc6d15fa11d09a988b9
|
7
|
+
data.tar.gz: 4d9601059cdc1d848a0ca8a6b7aef4bc88656ac1e55c96f391269b4f8e53ef3ec216c7882d49af63f7dc45e7c2484d4354d0a88ee8544e3a27b580ef103fae01
|
data/.gitignore
CHANGED
data/README.md
CHANGED
@@ -31,6 +31,9 @@ The following executables are provided with Term::ANSIColor:
|
|
31
31
|
* `term_mandel`: displays the mandelbrot set in the terminal
|
32
32
|
* `term_snow`: displays falling snow in the terminal using ANSI movement
|
33
33
|
sequences.
|
34
|
+
* `term_plasma`: draws a plasma effect on the console, possibly animated and
|
35
|
+
refreshed every `-n seconds`.
|
36
|
+
|
34
37
|
|
35
38
|
Additionally the file examples/example.rb in the source/gem-distribution shows
|
36
39
|
how this library can be used.
|
data/Rakefile
CHANGED
@@ -15,7 +15,7 @@ GemHadar do
|
|
15
15
|
|
16
16
|
test_dir 'tests'
|
17
17
|
ignore '.*.sw[pon]', 'pkg', 'Gemfile.lock', '.rvmrc', 'coverage',
|
18
|
-
'tags', '.bundle', '.byebug_history', 'errors.lst'
|
18
|
+
'tags', '.bundle', '.byebug_history', 'errors.lst', 'cscope.out'
|
19
19
|
|
20
20
|
readme 'README.md'
|
21
21
|
executables.merge Dir['bin/*'].map { |x| File.basename(x) }
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
1.
|
1
|
+
1.11.0
|
data/bin/term_plasma
ADDED
@@ -0,0 +1,97 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
require 'tins/go'
|
4
|
+
include Tins::GO
|
5
|
+
require 'term/ansicolor'
|
6
|
+
include Term::ANSIColor
|
7
|
+
Term::ANSIColor.true_coloring = ENV['COLORTERM'] =~ /\A(truecolor|24bit)\z/
|
8
|
+
include Math
|
9
|
+
|
10
|
+
# Generates a palette of 256 colors based on sine waves
|
11
|
+
#
|
12
|
+
# @return [Array<Array<Integer>>] An array of arrays, each containing
|
13
|
+
# three integers representing the RGB values of a color.
|
14
|
+
def generate_palette
|
15
|
+
(0..255).map { |i|
|
16
|
+
[
|
17
|
+
128 + 128 * sin(PI * i / 32.0),
|
18
|
+
128 + 128 * sin(PI * i / 64.0),
|
19
|
+
128 + 128 * sin(PI * i / 128.0),
|
20
|
+
].map { _1.clamp(0, 255).round }
|
21
|
+
}
|
22
|
+
end
|
23
|
+
|
24
|
+
# Resets the terminal to its original state, and assigns width $w and height
|
25
|
+
# $h.
|
26
|
+
def full_reset
|
27
|
+
$w, $h = Tins::Terminal.cols, Tins::Terminal.lines
|
28
|
+
$h *= 2
|
29
|
+
print reset, clear_screen, move_home, hide_cursor
|
30
|
+
end
|
31
|
+
|
32
|
+
# Generates a screen based on a plasma.
|
33
|
+
#
|
34
|
+
# @param plasma [Array<Array<Integer>>] An array of arrays, each containing
|
35
|
+
# three integers representing the RGB values of a color.
|
36
|
+
# @return [String] The string representation of the screen, each character
|
37
|
+
# representing a pixel on the screen with the corresponding color.
|
38
|
+
def generate_screen(plasma)
|
39
|
+
screen = ''
|
40
|
+
0.step($h - 1, 2) do |y|
|
41
|
+
0.upto($w - 1) do |x|
|
42
|
+
screen << color(plasma[y][x]) + on_color(plasma[y + 1][x]) + ?▀
|
43
|
+
end
|
44
|
+
end
|
45
|
+
screen
|
46
|
+
end
|
47
|
+
|
48
|
+
# Generates a plasma generated based on sine waves
|
49
|
+
#
|
50
|
+
# @param now [Float] A value based on the current time in seconds
|
51
|
+
# @return [Array<Array<Integer>>] An array of arrays, each containing
|
52
|
+
# three integers representing the RGB values of a color.
|
53
|
+
def generate_plasma(now)
|
54
|
+
plasma = Array.new($h) { [ nil ] * $w }
|
55
|
+
0.upto($h - 1) do |y|
|
56
|
+
0.upto($w - 1) do |x|
|
57
|
+
x, y = x.to_f, y.to_f
|
58
|
+
color = (
|
59
|
+
128.0 + (128.0 * sin((x / 7.0) - 3.0 * cos(now / 2.0))) +
|
60
|
+
128.0 + (128.0 * sin((y / 13.0) - 2.0 * sin(now))) +
|
61
|
+
128.0 + (128.0 * sin(hypot((x - $w / 3.0), (y - $h / 2.0)) / 5.0)) +
|
62
|
+
128.0 + (128.0 * sin((hypot(x, y) / 5.0) - sin(now / 3.0)))
|
63
|
+
) / 4.0
|
64
|
+
plasma[y][x] = $palette[(color + now).round % $palette.size]
|
65
|
+
end
|
66
|
+
end
|
67
|
+
plasma
|
68
|
+
end
|
69
|
+
|
70
|
+
$opts = go('n:')
|
71
|
+
|
72
|
+
$palette = generate_palette
|
73
|
+
|
74
|
+
begin
|
75
|
+
$full_reset = true
|
76
|
+
trap(:SIGWINCH) { $full_reset = true }
|
77
|
+
|
78
|
+
loop do
|
79
|
+
if $full_reset
|
80
|
+
$full_reset = false
|
81
|
+
full_reset
|
82
|
+
end
|
83
|
+
|
84
|
+
now = Time.now.to_f / ($opts[?n]&.to_f || 1)
|
85
|
+
plasma = generate_plasma(now)
|
86
|
+
print move_home, generate_screen(plasma), reset
|
87
|
+
|
88
|
+
if n = $opts[?n]&.to_f
|
89
|
+
sleep n
|
90
|
+
else
|
91
|
+
print move_to_column(1), erase_in_line, show_cursor
|
92
|
+
exit
|
93
|
+
end
|
94
|
+
end
|
95
|
+
rescue Interrupt
|
96
|
+
print reset, clear_screen, move_home, show_cursor
|
97
|
+
end
|
@@ -40,7 +40,7 @@ module Term
|
|
40
40
|
Attribute.set :on_color4, 4, html: '#000080', background: true
|
41
41
|
Attribute.set :on_color5, 5, html: '#800080', background: true
|
42
42
|
Attribute.set :on_color6, 6, html: '#008080', background: true
|
43
|
-
Attribute.set :on_color7, 7, html: '#c0c0c0'
|
43
|
+
Attribute.set :on_color7, 7, html: '#c0c0c0', background: true
|
44
44
|
|
45
45
|
Attribute.set :on_color8, 8, html: '#808080', background: true
|
46
46
|
Attribute.set :on_color9, 9, html: '#ff0000', background: true
|
@@ -49,12 +49,25 @@ module Term
|
|
49
49
|
@__store__[name.to_sym]
|
50
50
|
end
|
51
51
|
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
colors =
|
52
|
+
class << self
|
53
|
+
memoize method:
|
54
|
+
def rgb_colors(options = {}, &block)
|
55
|
+
colors = attributes.select(&:rgb_color?)
|
56
|
+
if options.key?(:gray) && !options[:gray]
|
57
|
+
colors = colors.reject(&:gray?)
|
58
|
+
end
|
59
|
+
colors.each(&block)
|
60
|
+
end
|
61
|
+
|
62
|
+
memoize method:
|
63
|
+
def rgb_foreground_colors(options = {}, &block)
|
64
|
+
rgb_colors(options).reject(&:background?).each(&block)
|
65
|
+
end
|
66
|
+
|
67
|
+
memoize method:
|
68
|
+
def rgb_background_colors(options = {}, &block)
|
69
|
+
rgb_colors(options).select(&:background?).each(&block)
|
56
70
|
end
|
57
|
-
colors.each(&block)
|
58
71
|
end
|
59
72
|
|
60
73
|
def self.named_attributes(&block)
|
@@ -63,14 +76,12 @@ module Term
|
|
63
76
|
|
64
77
|
def self.nearest_rgb_color(color, options = {})
|
65
78
|
rgb = RGBTriple[color]
|
66
|
-
|
67
|
-
colors.reject(&:background?).min_by { |c| c.distance_to(rgb, options) }
|
79
|
+
rgb_foreground_colors(options).min_by { |c| c.distance_to(rgb, options) }
|
68
80
|
end
|
69
81
|
|
70
82
|
def self.nearest_rgb_on_color(color, options = {})
|
71
83
|
rgb = RGBTriple[color]
|
72
|
-
|
73
|
-
colors.select(&:background?).min_by { |c| c.distance_to(rgb, options) }
|
84
|
+
rgb_background_colors(options).min_by { |c| c.distance_to(rgb, options) }
|
74
85
|
end
|
75
86
|
|
76
87
|
def self.true_color(color, options = {})
|
@@ -19,16 +19,16 @@ module Term
|
|
19
19
|
if v <= 0.04045
|
20
20
|
v / 12
|
21
21
|
else
|
22
|
-
( (v + 0.055) / 1.055) ** 2.4
|
22
|
+
( (v + 0.055) / 1.055 ) ** 2.4
|
23
23
|
end
|
24
24
|
end
|
25
25
|
|
26
26
|
def normalize_rgb_triple(rgb_triple)
|
27
27
|
[
|
28
|
-
rgb_triple.red,
|
29
|
-
rgb_triple.green,
|
30
|
-
rgb_triple.blue
|
31
|
-
]
|
28
|
+
normalize(rgb_triple.red),
|
29
|
+
normalize(rgb_triple.green),
|
30
|
+
normalize(rgb_triple.blue),
|
31
|
+
]
|
32
32
|
end
|
33
33
|
end
|
34
34
|
end
|
@@ -59,7 +59,11 @@ module Term
|
|
59
59
|
end
|
60
60
|
|
61
61
|
def initialize(red, green, blue)
|
62
|
-
@values = [
|
62
|
+
@values = [
|
63
|
+
red.clamp(0, 0xff),
|
64
|
+
green.clamp(0, 0xff),
|
65
|
+
blue.clamp(0, 0xff),
|
66
|
+
]
|
63
67
|
end
|
64
68
|
|
65
69
|
def red
|
@@ -106,7 +110,7 @@ module Term
|
|
106
110
|
|
107
111
|
def css(percentage: false)
|
108
112
|
if percentage
|
109
|
-
"rgb(%s%%,%s%%,%s%%)" %
|
113
|
+
"rgb(%s%%,%s%%,%s%%)" % percentages
|
110
114
|
else
|
111
115
|
"rgb(%u,%u,%u)" % @values
|
112
116
|
end
|
data/term-ansicolor.gemspec
CHANGED
@@ -1,29 +1,29 @@
|
|
1
1
|
# -*- encoding: utf-8 -*-
|
2
|
-
# stub: term-ansicolor 1.
|
2
|
+
# stub: term-ansicolor 1.11.0 ruby lib
|
3
3
|
|
4
4
|
Gem::Specification.new do |s|
|
5
5
|
s.name = "term-ansicolor".freeze
|
6
|
-
s.version = "1.
|
6
|
+
s.version = "1.11.0".freeze
|
7
7
|
|
8
8
|
s.required_rubygems_version = Gem::Requirement.new(">= 0".freeze) if s.respond_to? :required_rubygems_version=
|
9
9
|
s.require_paths = ["lib".freeze]
|
10
10
|
s.authors = ["Florian Frank".freeze]
|
11
|
-
s.date = "2024-
|
11
|
+
s.date = "2024-08-01"
|
12
12
|
s.description = "This library uses ANSI escape sequences to control the attributes of terminal output".freeze
|
13
13
|
s.email = "flori@ping.de".freeze
|
14
|
-
s.executables = ["term_cdiff".freeze, "term_colortab".freeze, "term_decolor".freeze, "term_display".freeze, "term_mandel".freeze, "term_snow".freeze]
|
14
|
+
s.executables = ["term_cdiff".freeze, "term_colortab".freeze, "term_decolor".freeze, "term_display".freeze, "term_mandel".freeze, "term_plasma".freeze, "term_snow".freeze]
|
15
15
|
s.extra_rdoc_files = ["README.md".freeze, "lib/term/ansicolor.rb".freeze, "lib/term/ansicolor/attribute.rb".freeze, "lib/term/ansicolor/attribute/color256.rb".freeze, "lib/term/ansicolor/attribute/color8.rb".freeze, "lib/term/ansicolor/attribute/intense_color8.rb".freeze, "lib/term/ansicolor/attribute/text.rb".freeze, "lib/term/ansicolor/attribute/underline.rb".freeze, "lib/term/ansicolor/hsl_triple.rb".freeze, "lib/term/ansicolor/hyperlink.rb".freeze, "lib/term/ansicolor/movement.rb".freeze, "lib/term/ansicolor/ppm_reader.rb".freeze, "lib/term/ansicolor/rgb_color_metrics.rb".freeze, "lib/term/ansicolor/rgb_triple.rb".freeze, "lib/term/ansicolor/version.rb".freeze]
|
16
|
-
s.files = [".all_images.yml".freeze, ".gitignore".freeze, ".utilsrc".freeze, "CHANGES".freeze, "COPYING".freeze, "Gemfile".freeze, "README.md".freeze, "Rakefile".freeze, "VERSION".freeze, "bin/term_cdiff".freeze, "bin/term_colortab".freeze, "bin/term_decolor".freeze, "bin/term_display".freeze, "bin/term_mandel".freeze, "bin/term_snow".freeze, "examples/example.rb".freeze, "examples/lambda-red-plain.ppm".freeze, "examples/lambda-red.png".freeze, "examples/lambda-red.ppm".freeze, "lib/term/ansicolor.rb".freeze, "lib/term/ansicolor/.keep".freeze, "lib/term/ansicolor/attribute.rb".freeze, "lib/term/ansicolor/attribute/color256.rb".freeze, "lib/term/ansicolor/attribute/color8.rb".freeze, "lib/term/ansicolor/attribute/intense_color8.rb".freeze, "lib/term/ansicolor/attribute/text.rb".freeze, "lib/term/ansicolor/attribute/underline.rb".freeze, "lib/term/ansicolor/hsl_triple.rb".freeze, "lib/term/ansicolor/hyperlink.rb".freeze, "lib/term/ansicolor/movement.rb".freeze, "lib/term/ansicolor/ppm_reader.rb".freeze, "lib/term/ansicolor/rgb_color_metrics.rb".freeze, "lib/term/ansicolor/rgb_triple.rb".freeze, "lib/term/ansicolor/version.rb".freeze, "term-ansicolor.gemspec".freeze, "tests/ansicolor_test.rb".freeze, "tests/attribute_test.rb".freeze, "tests/hsl_triple_test.rb".freeze, "tests/hyperlink_test.rb".freeze, "tests/ppm_reader_test.rb".freeze, "tests/rgb_color_metrics_test.rb".freeze, "tests/rgb_triple_test.rb".freeze, "tests/test_helper.rb".freeze]
|
16
|
+
s.files = [".all_images.yml".freeze, ".gitignore".freeze, ".utilsrc".freeze, "CHANGES".freeze, "COPYING".freeze, "Gemfile".freeze, "README.md".freeze, "Rakefile".freeze, "VERSION".freeze, "bin/term_cdiff".freeze, "bin/term_colortab".freeze, "bin/term_decolor".freeze, "bin/term_display".freeze, "bin/term_mandel".freeze, "bin/term_plasma".freeze, "bin/term_snow".freeze, "examples/example.rb".freeze, "examples/lambda-red-plain.ppm".freeze, "examples/lambda-red.png".freeze, "examples/lambda-red.ppm".freeze, "lib/term/ansicolor.rb".freeze, "lib/term/ansicolor/.keep".freeze, "lib/term/ansicolor/attribute.rb".freeze, "lib/term/ansicolor/attribute/color256.rb".freeze, "lib/term/ansicolor/attribute/color8.rb".freeze, "lib/term/ansicolor/attribute/intense_color8.rb".freeze, "lib/term/ansicolor/attribute/text.rb".freeze, "lib/term/ansicolor/attribute/underline.rb".freeze, "lib/term/ansicolor/hsl_triple.rb".freeze, "lib/term/ansicolor/hyperlink.rb".freeze, "lib/term/ansicolor/movement.rb".freeze, "lib/term/ansicolor/ppm_reader.rb".freeze, "lib/term/ansicolor/rgb_color_metrics.rb".freeze, "lib/term/ansicolor/rgb_triple.rb".freeze, "lib/term/ansicolor/version.rb".freeze, "term-ansicolor.gemspec".freeze, "tests/ansicolor_test.rb".freeze, "tests/attribute_test.rb".freeze, "tests/hsl_triple_test.rb".freeze, "tests/hyperlink_test.rb".freeze, "tests/ppm_reader_test.rb".freeze, "tests/rgb_color_metrics_test.rb".freeze, "tests/rgb_triple_test.rb".freeze, "tests/test_helper.rb".freeze]
|
17
17
|
s.homepage = "https://github.com/flori/term-ansicolor".freeze
|
18
18
|
s.licenses = ["Apache-2.0".freeze]
|
19
19
|
s.rdoc_options = ["--title".freeze, "Term-ansicolor - Ruby library that colors strings using ANSI escape sequences".freeze, "--main".freeze, "README.md".freeze]
|
20
|
-
s.rubygems_version = "3.5.
|
20
|
+
s.rubygems_version = "3.5.16".freeze
|
21
21
|
s.summary = "Ruby library that colors strings using ANSI escape sequences".freeze
|
22
22
|
s.test_files = ["tests/ansicolor_test.rb".freeze, "tests/attribute_test.rb".freeze, "tests/hsl_triple_test.rb".freeze, "tests/hyperlink_test.rb".freeze, "tests/ppm_reader_test.rb".freeze, "tests/rgb_color_metrics_test.rb".freeze, "tests/rgb_triple_test.rb".freeze, "tests/test_helper.rb".freeze]
|
23
23
|
|
24
24
|
s.specification_version = 4
|
25
25
|
|
26
|
-
s.add_development_dependency(%q<gem_hadar>.freeze, ["~> 1.16.
|
26
|
+
s.add_development_dependency(%q<gem_hadar>.freeze, ["~> 1.16.1".freeze])
|
27
27
|
s.add_development_dependency(%q<simplecov>.freeze, [">= 0".freeze])
|
28
28
|
s.add_development_dependency(%q<test-unit>.freeze, [">= 0".freeze])
|
29
29
|
s.add_development_dependency(%q<utils>.freeze, [">= 0".freeze])
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: term-ansicolor
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.11.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Florian Frank
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2024-
|
11
|
+
date: 2024-08-01 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: gem_hadar
|
@@ -16,14 +16,14 @@ dependencies:
|
|
16
16
|
requirements:
|
17
17
|
- - "~>"
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version: 1.16.
|
19
|
+
version: 1.16.1
|
20
20
|
type: :development
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
24
|
- - "~>"
|
25
25
|
- !ruby/object:Gem::Version
|
26
|
-
version: 1.16.
|
26
|
+
version: 1.16.1
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: simplecov
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
@@ -103,6 +103,7 @@ executables:
|
|
103
103
|
- term_decolor
|
104
104
|
- term_display
|
105
105
|
- term_mandel
|
106
|
+
- term_plasma
|
106
107
|
- term_snow
|
107
108
|
extensions: []
|
108
109
|
extra_rdoc_files:
|
@@ -136,6 +137,7 @@ files:
|
|
136
137
|
- bin/term_decolor
|
137
138
|
- bin/term_display
|
138
139
|
- bin/term_mandel
|
140
|
+
- bin/term_plasma
|
139
141
|
- bin/term_snow
|
140
142
|
- examples/example.rb
|
141
143
|
- examples/lambda-red-plain.ppm
|
@@ -188,7 +190,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
188
190
|
- !ruby/object:Gem::Version
|
189
191
|
version: '0'
|
190
192
|
requirements: []
|
191
|
-
rubygems_version: 3.5.
|
193
|
+
rubygems_version: 3.5.16
|
192
194
|
signing_key:
|
193
195
|
specification_version: 4
|
194
196
|
summary: Ruby library that colors strings using ANSI escape sequences
|