61 lines
		
	
	
		
			1.1 KiB
		
	
	
	
		
			Ruby
		
	
	
	
	
	
			
		
		
	
	
			61 lines
		
	
	
		
			1.1 KiB
		
	
	
	
		
			Ruby
		
	
	
	
	
	
| # vim: ft=ruby
 | |
| 
 | |
| class ModBspwmPager < ModBasic
 | |
| 	@@mod_name = 'bspwm_pager'
 | |
| 
 | |
| 	def data_loop()
 | |
| 		while true do
 | |
| 			pipe = IO.popen("bspc subscribe")
 | |
| 			$children << pipe.pid
 | |
| 	
 | |
| 			pipe.each do |line|
 | |
| 				$panel_data[@@mod_name.to_sym] = parse_data(line.chomp)
 | |
| 				$queue << 1
 | |
| 			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 = []
 | |
| 
 | |
| 		string.split(":").each do |part|
 | |
| 			n = part[1..-1]
 | |
| 
 | |
| 			if $config['mod']['bspwm_pager']['blacklist'] != nil
 | |
| 				if $config['mod']['bspwm_pager']['blacklist'].include? n
 | |
| 					next
 | |
| 				end
 | |
| 			end
 | |
| 				
 | |
| 			case part
 | |
| 				when /^(O|F|U).+/
 | |
| 					out << "%{B#{$config['colours']['bg_focused']}} #{n} %{B-}"
 | |
| 				when /^u.+/
 | |
| 					out << "%{A:bspc desktop -f #{n}:}%{R} #{n} %{R}%{A}"
 | |
| 				when /^o.+/
 | |
| 					out << "%{A:bspc desktop -f #{n}:} #{n} %{A}"
 | |
| 				when /^f.+/
 | |
| 					if $config['mod']['bspwm_pager']['show_empty_desktops']
 | |
| 						out << " #{n} "
 | |
| 					end
 | |
| 				when /^L.+/
 | |
| 					@layout = n
 | |
| 			end
 | |
| 		end
 | |
| 
 | |
| 		case @layout
 | |
| 			when "T"
 | |
| 				layout_flag = "t"
 | |
| 			when "M"
 | |
| 				layout_flag = "m"
 | |
| 		end
 | |
| 
 | |
| 		out << " #{layout_flag} "
 | |
| 
 | |
| 		return out.join.chomp
 | |
| 	end
 | |
| end
 | |
| 
 | |
| ModBspwmPager.new.mainloop()
 |