stockholm/tv/5pkgs/simple/xdpytools/src/xdpysel
2021-02-07 22:31:53 +01:00

50 lines
1.0 KiB
Bash
Executable File

#! /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
'