just
cargo build --release
cargo run
use DSL for rule to filter windows and other stuff
the grammar can be display by
cargo run -- --show-grammar
filtering windows
any(attrs.map_state=Viewable, all(geom.x>2, geom.width>100))
id wildcard matching
all(id=0x10000??, name=*mutter*, attrs.override_redirect=true)
actions
attrs.map_state=Viewable: filter;
not(attrs.map_state=Viewable): pin;
- do idle update
- use DSL to specify filter rule (partially)
- highlight diffs across events
- pin windows (highlight some windows everlasting)
- ignore some events
- (de)serialize rules from/into disk
- event timestamp?
- rule databases (based on serialization)
- cut off long name display
- change rules on the fly (so I can change the set of monitored windows without restart)
- xrandr events may affect definition of visible
- on macOS, client id should be child of queried window
- query_tree is heavy, need to cache window stack like mutter does
- expand grammar to support window properties
- expand grammar to support conditional expression
- add gui support
- add log level and detail management
- on-the-fly rule injection/removal (via socket?)
- better event tracing, add tracepoint dynamically, listen to any property/attrs change
- use SQL syntax for rules
- 2.0 wild idea
systemtap like dynamic tracing, instead of simple filtering. maybe something like:
wminspect -f ' on:configure_notify(window=by_wm_name:deepin) { print event.x, event.y } on:property_notify(window=root, prop=by_name:client_list) { let w = get_window(event.window) print event.timestamp } on:create_notify { print wm.client_list_stacking } on:window(id=0x6400001) above window(id=0x4800003) { print "window stack changed" } '