#! /bin/sh # usage: xdpysel {prev,next} # Print the number of the selected X display. find /tmp/.X11-unix -mindepth 1 -maxdepth 1 | jq -Rrs --arg command "$1" ' ( split("\n") | map( select(.!="") | match("^.*/X([0-9]+)$").captures[0].string | tonumber ) ) as $all_displays | ( env.DISPLAY | match("^:([0-9]+)(?:[.][0-9]+)?$").captures[0].string | tonumber ) as $current_display | ($all_displays | length) as $all_displays_count | ($all_displays|index($current_display)) as $current_index | (($current_index + 1) % $all_displays_count) as $next_index | (($all_displays_count + $current_index - 1) % $all_displays_count) as $prev_index | $all_displays[$prev_index] as $prev_display | $all_displays[$next_index] as $next_display | { prev: $prev_display, next: $next_display, }[$command] as $result | if $result | type == "number" then $result else "xdpysel: bad argument: \($command)\n" | halt_error(-1) end '