50 lines
1.0 KiB
Bash
Executable File
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
|
|
'
|