class Fusuma::Plugin::Appmatcher::X11::Matcher
Look up application name using xprop
Public Instance Methods
active_application(id = active_window_id)
click to toggle source
@return [String] @return [NilClass]
# File lib/fusuma/plugin/appmatcher/x11.rb, line 60 def active_application(id = active_window_id) @cache ||= {} @cache[id] ||= begin return if id.nil? `xprop -id #{id} WM_CLASS | cut -d "=" -f 2 | tr -d '"'`.strip.split(', ').last end end
on_active_application_changed() { |active_application(id) || 'NOT FOUND'| ... }
click to toggle source
# File lib/fusuma/plugin/appmatcher/x11.rb, line 69 def on_active_application_changed active_window_id(watch: true) do |id| yield(active_application(id) || 'NOT FOUND') end end
running_applications()
click to toggle source
@return [Array<String>]
# File lib/fusuma/plugin/appmatcher/x11.rb, line 52 def running_applications `xprop -root _NET_CLIENT_LIST_STACKING`.split(', ') .map { |id_str| id_str.match(/0x[\da-z]{2,}/).to_s } .map { |id| active_application(id) } end
Private Instance Methods
active_window_id(watch: false) { |id| ... }
click to toggle source
# File lib/fusuma/plugin/appmatcher/x11.rb, line 77 def active_window_id(watch: false, &block) i, o, e, _w = Open3.popen3(xprop_active_window_id(watch)) i.close o.each do |line| id = line.match(/0x[\da-z]{2,}/)&.to_s return id unless block_given? yield(id) end MultiLogger.error e.read if o.eof? e.close o.close return nil unless block_given? sleep 0.5 active_window_id(watch: watch, &block) rescue StandardError => e MultiLogger.error e.message end
xprop_active_window_id(spy)
click to toggle source
@param spy [TrueClass, FalseClass] @return [String]
# File lib/fusuma/plugin/appmatcher/x11.rb, line 101 def xprop_active_window_id(spy) spy_option = '-spy' if spy "xprop #{spy_option} -root _NET_ACTIVE_WINDOW" end