windows is an exposé-style overview tool for selecting windows to operate on in Wayland compositors.
The program presents snapshots of all foreign toplevels (aka, windows) on a chosen output, allows keyboard navigation, and prints the selected toplevel handle identifier to standard output.
It is the successor to exposway, with improvements including:
- multi-seat (and hot-plugging) support
- corrrect keyboard repeat handling
- proper fractional scaling
- window adjacency graph caching
- protocol-native snapshot capture (no IPC or grim)
windows has tiny footprint. The only dependencies are cairo, xkbcommon, and wayland-protocols (only required when compiling from source).
Note
Your Wayland compositor must support ext_foreign_toplevel_list_v1 and ext_foreign_toplevel_image_capture_source_manager_v1.
swayWM supports these since commit 170c9c9 (after the 1.11 release).
riverWM currently lacks support for the latter one, though it is an accepted proposal awaiting implementation.
To build from source, clone this repository and run make. A man page is available for detailed reference:
man ./windows.1 # or install to $MANPATH/man1/
windows is designed to integrate with compositor workflows. A common use case is jumping focus to the selected window. Under swayWM, this can be implemented as:
swaymsg -t get_tree | jq ".. | objects | select(.foreign_toplevel_identifier==\"$(windows -o eDP-1)\") | .id" | xargs -I? swaymsg [con_id=?] focus
Replace eDP-1 with your output name. A demonstration video is available on YouTube.
