Files
moltenbar/mod/bspwm_pager
T

88 lines
1.9 KiB
Ruby
Raw Normal View History

2016-09-27 04:18:43 +03:00
# vim: ft=ruby
2016-09-28 23:30:07 +03:00
class BspwmPager < Worker
def mainloop()
2016-10-23 02:08:29 +03:00
IO.popen("bspc subscribe") do |pipe|
2016-09-27 13:03:14 +03:00
pipe.each do |line|
2017-05-22 21:38:46 +03:00
self.write parse_data(line)
2016-09-27 04:18:43 +03:00
end
end
end
def parse_data(string)
# Example: WMDVI-I-1:o1:o2:f3:f4:O5:f6:f7:f8:f9:fh:LT:TF:G
out = []
2017-05-23 06:20:28 +03:00
monitor = ""
state = {
2017-05-24 16:39:18 +03:00
monitors: {}
2017-05-23 06:20:28 +03:00
}
2016-09-27 04:18:43 +03:00
2017-05-23 06:20:28 +03:00
string.chomp[1..-1].split(":").each do |part|
2016-09-27 04:18:43 +03:00
n = part[1..-1]
2017-05-23 06:20:28 +03:00
if part[0] =~ /^[Mm]$/
monitor = n
state[:monitors][monitor] = {
desktops: {}
}
state[:monitors][monitor][:focused] = true if part[0] == "M"
elsif part[0] =~ /^[OFUofu]$/
d_focused = true if part[0] =~ /[OFU]/
d_occupied = true if part[0] =~ /[Oo]/
d_urgent = true if part[0] =~ /[Uu]/
state[:monitors][monitor][:desktops][n] = {
focused: d_focused,
occupied: d_occupied,
urgent: d_urgent
}
elsif part[0] == "L"
2017-05-24 16:39:18 +03:00
state[:monitors][monitor][:layout] = n
2017-05-23 06:20:28 +03:00
end
end
state[:monitors].each do |m_name, m|
if @my_config['monitors'] != nil
next unless @my_config['monitors'].include?(m_name)
end
2017-05-24 16:42:23 +03:00
if state[:monitors].count > 1 or @my_config['show_single_monitor']
2017-05-23 06:20:28 +03:00
if m[:focused]
2019-05-15 14:50:52 +03:00
out << "%{BC{mon_focused}} #{m_name} %{B-}"
2017-05-23 06:20:28 +03:00
else
out << " #{m_name} "
2016-09-27 04:18:43 +03:00
end
end
2017-05-22 21:38:46 +03:00
2017-05-23 06:20:28 +03:00
m[:desktops].each do |d_name, d|
2017-05-24 16:42:23 +03:00
if @my_config['blacklist'] != nil
next if @my_config['blacklist'].include?(d_name)
end
2017-05-23 06:20:28 +03:00
if d[:focused]
2019-05-15 14:50:52 +03:00
out << "%{BC{bg_focused}} #{d_name} %{B-}"
2017-05-23 06:20:28 +03:00
elsif d[:urgent]
out << "%{A:bspc desktop -f #{d_name}:}%{R} #{d_name} %{R}%{A}"
elsif d[:occupied]
out << "%{A:bspc desktop -f #{d_name}:} #{d_name} %{A}"
else
2016-10-04 15:34:25 +03:00
if @my_config['show_empty_desktops']
2017-05-23 06:20:28 +03:00
out << " #{d_name} "
2017-05-22 21:38:46 +03:00
end
2017-05-23 06:20:28 +03:00
end
end
2017-05-24 16:39:18 +03:00
if m[:layout] == "T"
2017-05-23 06:20:28 +03:00
out << " t "
2017-05-24 16:39:18 +03:00
elsif m[:layout] == "M"
2017-05-23 06:20:28 +03:00
out << " m "
2016-09-27 04:18:43 +03:00
end
end
return out.join.chomp
end
end
2016-09-28 23:30:07 +03:00
Modules.add("bspwm_pager", "BspwmPager")