Class: Fusuma::Plugin::Appmatcher::GnomeExtension::Matcher
- Inherits:
-
Object
- Object
- Fusuma::Plugin::Appmatcher::GnomeExtension::Matcher
- Defined in:
- lib/fusuma/plugin/appmatcher/gnome_extension.rb
Overview
Look up application name using dbus
Instance Attribute Summary collapse
-
#session_bus ⇒ Object
readonly
Returns the value of attribute session_bus.
Instance Method Summary collapse
- #active_application ⇒ String
-
#initialize ⇒ Matcher
constructor
A new instance of Matcher.
- #on_active_application_changed ⇒ Object
- #running_applications ⇒ Array<String>
Constructor Details
#initialize ⇒ Matcher
Returns a new instance of Matcher.
66 67 68 69 70 71 72 73 74 75 76 77 |
# File 'lib/fusuma/plugin/appmatcher/gnome_extension.rb', line 66 def initialize @session_bus = DBus.session_bus service = session_bus.service("org.gnome.Shell") @interface = service["/dev/iberianpig/Appmatcher"]["dev.iberianpig.Appmatcher"] rescue DBus::Error => e MultiLogger.error "DBus::Error: #{e.}" MultiLogger.error "Have you installed GNOME extension?" MultiLogger.error "$ fusuma-appmatcher --install-gnome-extension" MultiLogger.error "Then Restart your session" exit 1 end |
Instance Attribute Details
#session_bus ⇒ Object (readonly)
Returns the value of attribute session_bus.
64 65 66 |
# File 'lib/fusuma/plugin/appmatcher/gnome_extension.rb', line 64 def session_bus @session_bus end |
Instance Method Details
#active_application ⇒ String
89 90 91 92 93 94 95 |
# File 'lib/fusuma/plugin/appmatcher/gnome_extension.rb', line 89 def active_application app = JSON.parse(@interface.ActiveWindow, object_class: Application) app&.wm_class rescue JSON::ParserError => e MultiLogger.error e. nil end |
#on_active_application_changed ⇒ Object
97 98 99 100 101 102 103 104 105 106 107 108 109 110 |
# File 'lib/fusuma/plugin/appmatcher/gnome_extension.rb', line 97 def on_active_application_changed @interface.on_signal("ActiveWindowChanged") do |json| # if app is is not found, fetch active_application_id app = begin JSON.parse(json, object_class: Application) rescue JSON::ParserError => e MultiLogger.error e. nil end yield(app&.wm_class || "NOT FOUND") if block_given? end end |
#running_applications ⇒ Array<String>
80 81 82 83 84 85 86 |
# File 'lib/fusuma/plugin/appmatcher/gnome_extension.rb', line 80 def running_applications applications = JSON.parse(@interface.ListWindows, object_class: Application) applications.map(&:wm_class) rescue JSON::ParserError => e MultiLogger.error e. nil end |