reline 0.4.0 → 0.4.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 24b02f1563ed151bd0b67246977442d845c887048264399384dddf506b4d6de2
4
- data.tar.gz: 3d51b1b162709f7d378e782a4f28b6b1e99b0fe3fa8929846481c4c6ab9dae5e
3
+ metadata.gz: b632074a7d879f8c00b4af972fb39af64a4775fbfdf0bedd252fa629891b77b4
4
+ data.tar.gz: 2406a738d92b076047ee697f527e4839cfd3012975a188784197cfddba3ce277
5
5
  SHA512:
6
- metadata.gz: 0a467797d4c4191c3b9949b5048fc3cadae9e837bdf086565e51206f7d6786774ae13b6081f6e418fdf4ee62c82d02e369d50a4cca9955918ebfb682d5875a7d
7
- data.tar.gz: 65e0a409b22c3f5ebeb8bd3b068168bdabac6cda5d0b8b7d6d07dacbe90265055a7eeb24f433a455b9bd6ca06dbe3f9d2018987ea1a098dedc96d6a6eb16430c
6
+ metadata.gz: 84f7857bea1edc1bdf6035c68be9c6278e3f9749b6978d5bdbe7471495d9b44ade2be95752446a82afbab7d653fff679523bc7d697a511cc8d2772ec190cdf49
7
+ data.tar.gz: 966a26ac5a42a2f8f21bc330e92469fa1543e87346f743282a7dc585611e4d0061a4db223367dac35fe37803984f8eec4126a1f5d4cd573c96bd2476b832f94e
data/lib/reline/face.rb CHANGED
@@ -74,6 +74,13 @@ class Reline::Face
74
74
  @definition[name] = values
75
75
  end
76
76
 
77
+ def reconfigure
78
+ @definition.each_value do |values|
79
+ values.delete(:escape_sequence)
80
+ values[:escape_sequence] = format_to_sgr(values.to_a).freeze
81
+ end
82
+ end
83
+
77
84
  def [](name)
78
85
  @definition.dig(name, :escape_sequence) or raise ArgumentError, "unknown face: #{name}"
79
86
  end
@@ -82,6 +89,14 @@ class Reline::Face
82
89
 
83
90
  def sgr_rgb(key, value)
84
91
  return nil unless rgb_expression?(value)
92
+ if Reline::Face.truecolor?
93
+ sgr_rgb_truecolor(key, value)
94
+ else
95
+ sgr_rgb_256color(key, value)
96
+ end
97
+ end
98
+
99
+ def sgr_rgb_truecolor(key, value)
85
100
  case key
86
101
  when :foreground
87
102
  "38;2;"
@@ -90,6 +105,24 @@ class Reline::Face
90
105
  end + value[1, 6].scan(/../).map(&:hex).join(";")
91
106
  end
92
107
 
108
+ def sgr_rgb_256color(key, value)
109
+ # 256 colors are
110
+ # 0..15: standard colors, hight intensity colors
111
+ # 16..232: 216 colors (R, G, B each 6 steps)
112
+ # 233..255: grayscale colors (24 steps)
113
+ # This methods converts rgb_expression to 216 colors
114
+ rgb = value[1, 6].scan(/../).map(&:hex)
115
+ # Color steps are [0, 95, 135, 175, 215, 255]
116
+ r, g, b = rgb.map { |v| v <= 95 ? v / 48 : (v - 35) / 40 }
117
+ color = (16 + 36 * r + 6 * g + b)
118
+ case key
119
+ when :foreground
120
+ "38;5;#{color}"
121
+ when :background
122
+ "48;5;#{color}"
123
+ end
124
+ end
125
+
93
126
  def format_to_sgr(ordered_values)
94
127
  sgr = "\e[" + ordered_values.map do |key_value|
95
128
  key, value = key_value
@@ -124,6 +157,15 @@ class Reline::Face
124
157
 
125
158
  private_constant :SGR_PARAMETERS, :Config
126
159
 
160
+ def self.truecolor?
161
+ @force_truecolor || %w[truecolor 24bit].include?(ENV['COLORTERM'])
162
+ end
163
+
164
+ def self.force_truecolor
165
+ @force_truecolor = true
166
+ @configs&.each_value(&:reconfigure)
167
+ end
168
+
127
169
  def self.[](name)
128
170
  @configs[name]
129
171
  end
@@ -1,3 +1,3 @@
1
1
  module Reline
2
- VERSION = '0.4.0'
2
+ VERSION = '0.4.1'
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: reline
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.0
4
+ version: 0.4.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - aycabta
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2023-11-07 00:00:00.000000000 Z
11
+ date: 2023-11-28 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: io-console