class Rkremap::WinAttr
アプリの name, class, title を取得する
Public Class Methods
new()
click to toggle source
# File lib/rkremap/winattr.rb, line 6 def initialize @app_win = {} @display = X11.XOpenDisplay(nil) or raise "Cannot open display: #{ENV['DISPLAY']}" @buf = ' '*8 end
Public Instance Methods
app_title(window)
click to toggle source
@return [String]
# File lib/rkremap/winattr.rb, line 47 def app_title(window) win = app_win(window)[0] prop = X11::XTextProperty.malloc(Fiddle::RUBY_FREE) text_list = X11::Pointer.malloc(Fiddle::RUBY_FREE) X11.XGetWMName(@display, win, prop) X11.Xutf8TextPropertyToTextList(@display, prop, text_list, @buf) title = text_list.ptr.ptr.to_s.force_encoding('utf-8') X11.XFreeStringList(text_list.ptr) title end
app_win(window)
click to toggle source
@return [Array<window, name, class>]
# File lib/rkremap/winattr.rb, line 20 def app_win(window) return @app_win[window] if @app_win[window] class_hint = X11::XClassHint.malloc(Fiddle::RUBY_FREE) parent = X11::Window.malloc(Fiddle::RUBY_FREE) children = X11::Pointer.malloc(Fiddle::RUBY_FREE) win = window while win > 0 class_hint.name = nil class_hint.class_name = nil X11.XGetClassHint(@display, win, class_hint) X11.XQueryTree(@display, win, @buf, parent, children, @buf) X11.XFree(children.ptr) break unless class_hint.name.null? && class_hint.class_name.null? win = parent.window end unless class_hint.name.null? win_name = class_hint.name.to_s X11.XFree(class_hint.name) end unless class_hint.class_name.null? win_class = class_hint.class_name.to_s X11.XFree(class_hint.class_name) end @app_win[window] = [win, win_name, win_class] end
focus_win()
click to toggle source
@return [Integer] Window
# File lib/rkremap/winattr.rb, line 13 def focus_win win = X11::Window.malloc(Fiddle::RUBY_FREE) X11.XGetInputFocus(@display, win, @buf) win.window end