kota's memex

On xorg had xwininfo and xprop, but the same tool doesn't exist for wayland. However, sway provides information about every open window in json. With this command: swaymsg -t get_tree

Some dude on reddit threw together this script to emulate xprop:

#!/bin/bash

ALL_NODES='recurse(.nodes[]?, .floating_nodes[]?) | select(.pid and .visible)'
WINDOW_NAME='(.app_id // .window_properties.class)'
ID_PREFIX='"\(.id):"'
WINDOW_PROTOCOL='(if .shell == "xwayland" then "X11" else "wayland" end)'
WINDOW_GEOMETRY='(.rect | "\(.x),\(.y) \(.width)x\(.height) ")'
WINDOW_PID='(.pid | tostring)'

# Output format, e.g. "1234 - 12:firefox (wayland)" or "5678 - 17:discord (X11)"
FORMAT="$WINDOW_PID + \" - \" + $ID_PREFIX + $WINDOW_NAME + \" (\" + $WINDOW_PROTOCOL + \")\""
FILT="$ALL_NODES | $WINDOW_GEOMETRY + $FORMAT"

function getprop() {
	typeset -A views
	local selected

	while read POS GEOM INFO; do
		views["$POS $GEOM"]="$INFO"
	done

	selected="$(printf "%s\n" "${!views[@]}" | slurp)"
	if  -n "$selected" ; then
		printf '%s\n' "${views[${selected}]}"
	fi
}

if  "$1" == "wait" ; then
	swaymsg -t subscribe '["workspace"]' | jq -r ".current | $FILT" | getprop
else
	swaymsg -t get_tree | jq -r "$FILT" | getprop
fi