|
1
|
|
|
2
|
|
|
3
|
|
|
4
|
|
|
5
|
|
|
6
|
|
|
7
|
|
|
8
|
|
|
9
|
|
|
10
|
|
|
11
|
|
|
12
|
|
|
13
|
require "pp"
|
|
14
|
|
|
15
|
def format_value(value)
|
|
16
|
case value
|
|
17
|
when String then "\"#{value}\""
|
|
18
|
when Array then value.join(", ")
|
|
19
|
when Fixnum then value
|
|
20
|
else value.to_s
|
|
21
|
end
|
|
22
|
end
|
|
23
|
|
|
24
|
begin
|
|
25
|
config = nil
|
|
26
|
styles = {}
|
|
27
|
skip = []
|
|
28
|
nline = 0
|
|
29
|
colline = nil
|
|
30
|
ignore = false
|
|
31
|
lines = nil
|
|
32
|
|
|
33
|
|
|
34
|
[ :title, :focus, :urgent, :occupied, :views,
|
|
35
|
:sublets, :separator, :clients, :subtle
|
|
36
|
].each { |s| styles[s] = {} }
|
|
37
|
|
|
38
|
|
|
39
|
if(0 == ARGV.size)
|
|
40
|
|
|
41
|
xdg_config_home = File.join((ENV["XDG_CONFIG_HOME"] ||
|
|
42
|
File.join(ENV["HOME"], ".config")), "subtle")
|
|
43
|
xdg_config_dir = File.join((ENV["XDG_CONFIG_DIRS"].split(":").first rescue
|
|
44
|
File.join("/etc", "xdg")), "subtle")
|
|
45
|
|
|
46
|
|
|
47
|
unless(File.exist?(config = File.join(xdg_config_home, "subtle.rb")))
|
|
48
|
puts ">>> ERROR: Couldn't find config file"
|
|
49
|
exit
|
|
50
|
end
|
|
51
|
elsif([ "--help", "-h", "help" ].include?(ARGV[0]))
|
|
52
|
puts "Usage: %s [CONFIG]" % [ $0 ]
|
|
53
|
puts "\nConvert color definitions to styles"
|
|
54
|
puts "\nPlease report bugs at http://subforge.org/projects/subtle/issues"
|
|
55
|
exit
|
|
56
|
else
|
|
57
|
config = ARGV[0]
|
|
58
|
end
|
|
59
|
|
|
60
|
puts ">>> Reading config `#{config}'"
|
|
61
|
|
|
62
|
|
|
63
|
lines = IO.readlines(config)
|
|
64
|
|
|
65
|
|
|
66
|
lines.each do |line|
|
|
67
|
case line
|
|
68
|
|
|
69
|
when /^=begin/ then ignore = true
|
|
70
|
when /^=end/ then ignore = false
|
|
71
|
|
|
72
|
|
|
73
|
when /^\s*set\s*:border,\s*(\d+)/
|
|
74
|
next if(ignore)
|
|
75
|
value = $~[1].to_i
|
|
76
|
styles[:clients][:active] = value
|
|
77
|
styles[:clients][:inactive] = value
|
|
78
|
|
|
79
|
skip << nline
|
|
80
|
when /^\s*set\s*:outline,\s*(\d+)/
|
|
81
|
next if(ignore)
|
|
82
|
value = $~[1].to_i
|
|
83
|
styles[:title][:border] = value
|
|
84
|
styles[:focus][:border] = value
|
|
85
|
styles[:urgent][:border] = value
|
|
86
|
styles[:occupied][:border] = value
|
|
87
|
styles[:views][:border] = value
|
|
88
|
styles[:sublets][:border] = value
|
|
89
|
styles[:separator][:border] = value
|
|
90
|
|
|
91
|
skip << nline
|
|
92
|
when /^\s*set\s*:gap,\s*(\d+)/
|
|
93
|
next if(ignore)
|
|
94
|
styles[:clients][:margin] = $~[1].to_i
|
|
95
|
|
|
96
|
skip << nline
|
|
97
|
when /^\s*set\s*:padding,\s*\[((?:\s*(?:\d+)\s*,?)*)\]/
|
|
98
|
next if(ignore)
|
|
99
|
value = $~[1].split(",").map(&:to_i)
|
|
100
|
|
|
101
|
styles[:title][:padding] = value
|
|
102
|
styles[:focus][:padding] = value
|
|
103
|
styles[:urgent][:padding] = value
|
|
104
|
styles[:occupied][:padding] = value
|
|
105
|
styles[:views][:padding] = value
|
|
106
|
styles[:sublets][:padding] = value
|
|
107
|
styles[:separator][:padding] = value
|
|
108
|
|
|
109
|
skip << nline
|
|
110
|
when /^\s*set\s*:strut,\s*\[((?:\s*(?:\d+)\s*,?)*)\]/
|
|
111
|
next if(ignore)
|
|
112
|
styles[:subtle][:padding] = $~[1].split(",").map(&:to_i)
|
|
113
|
|
|
114
|
skip << nline
|
|
115
|
|
|
116
|
|
|
117
|
when /^\s*color\s*:(\w+),\s*"(#[0-9a-fA-F]{6})/
|
|
118
|
next if(ignore)
|
|
119
|
name = $~[1]
|
|
120
|
sym = name.split("_").first.to_sym
|
|
121
|
color = $~[2]
|
|
122
|
|
|
123
|
colline ||= nline
|
|
124
|
styles[sym] ||= {} if(styles.keys.include?(sym))
|
|
125
|
|
|
126
|
case name
|
|
127
|
when /^\w+_fg/ then styles[sym][:foreground] = color
|
|
128
|
when /^\w+_bg/ then styles[sym][:background] = color
|
|
129
|
when /^background/ then styles[:subtle][:background] = color
|
|
130
|
when /^stipple/ then styles[:subtle][:stipple] = color
|
|
131
|
when /^separator/ then styles[:separator][:foreground] = color
|
|
132
|
when /^client_((?:in)?active)/
|
|
133
|
sym = $~[1].to_sym
|
|
134
|
|
|
135
|
|
|
136
|
if(styles[:clients][sym].nil?)
|
|
137
|
styles[:clients][sym] = color
|
|
138
|
else
|
|
139
|
styles[:clients][sym] = [
|
|
140
|
format_value(color), styles[:clients][sym]
|
|
141
|
]
|
|
142
|
end
|
|
143
|
when /^panel/
|
|
144
|
styles[:subtle][:panel] = color
|
|
145
|
styles[:separator][:background] = color
|
|
146
|
when /^\w+_border/
|
|
147
|
|
|
148
|
if(styles[sym][:border].nil?)
|
|
149
|
styles[sym][:border] = color
|
|
150
|
else
|
|
151
|
styles[sym][:border] = [
|
|
152
|
format_value(color), styles[sym][:border]
|
|
153
|
]
|
|
154
|
end
|
|
155
|
end
|
|
156
|
|
|
157
|
skip << nline
|
|
158
|
end
|
|
159
|
|
|
160
|
nline += 1
|
|
161
|
end
|
|
162
|
|
|
163
|
|
|
164
|
filename = File.join(ENV["HOME"], "subtle.rb")
|
|
165
|
File.open(filename, "w") do |f|
|
|
166
|
nline = 0
|
|
167
|
|
|
168
|
|
|
169
|
lines.each do |line|
|
|
170
|
|
|
171
|
if(nline == colline)
|
|
172
|
styles.each do |k, v|
|
|
173
|
f.puts "style :#{k} do"
|
|
174
|
|
|
175
|
|
|
176
|
v.each do |k2, v2|
|
|
177
|
value = format_value(v2)
|
|
178
|
|
|
179
|
if(value.is_a?(String))
|
|
180
|
f.puts " %-10s %s" % [ k2, value ]
|
|
181
|
else
|
|
182
|
f.puts " %-10s %d" % [ k2, value ]
|
|
183
|
end
|
|
184
|
end
|
|
185
|
|
|
186
|
f.puts "end"
|
|
187
|
f.puts
|
|
188
|
end
|
|
189
|
end
|
|
190
|
|
|
191
|
|
|
192
|
f.puts line unless(skip.include?(nline))
|
|
193
|
|
|
194
|
nline += 1
|
|
195
|
end
|
|
196
|
end
|
|
197
|
|
|
198
|
puts ">>> Created config `#{filename}'"
|
|
199
|
|
|
200
|
rescue => err
|
|
201
|
puts ">>> ERROR: #{err}"
|
|
202
|
puts err.backtrace
|
|
203
|
end
|