Как получить нажатие мыши и освободить позиции с помощью bash - PullRequest
0 голосов
/ 25 октября 2019

Я хочу получить позицию мыши, когда она щелкает вниз, а затем, когда она освобождается в bash, как 2 переменные. что-то вроде

press=( X Y )
release= ( X Y ) 

или

pressX
pressY
releaseX
releaseY 

Как я могу это сделать?

Я уже пытался сделать

xinput list | grep -Po 'id=\K\d+(?=.*slave\s*pointer)' | xargs -P0 -n1 xinput test | awk '{print $2}'

, ноЯ не знаю, как правильно обработать вывод ...

1 Ответ

0 голосов
/ 25 октября 2019

спасибо @gst за ответ!

вот моя отредактированная версия для других госзакупок в будущем

MOUSE_ID=$(xinput --list | grep -i -m 1 'mouse' | grep -o 'id=[0-9]\+' | grep -o '[0-9]\+')
STATE1=$(xinput --query-state $MOUSE_ID | grep 'button\[' | sort)
while true; do
    sleep 0.2
    STATE2=$(xinput --query-state $MOUSE_ID | grep 'button\[' | sort)
    button=$(comm -13 <(echo "$STATE1") <(echo "$STATE2") | grep -Po "(?<=\=).*$")
    STATE1=$STATE2

    # if the mouse is clicked down - save the x and y coordinates into downX and downY
    if [ "$button" = "down" ]; then eval $(xdotool getmouselocation --shell); downX=$X;downY=$Y; fi 
    # when the mouse is unclicked - save the x and y coordinates into upX and upY
    # then exit the while loop
    if [ "$button" = "up" ]; then eval $(xdotool getmouselocation --shell); upX=$X;upY=$Y; break; fi
done

РЕДАКТИРОВАТЬ: Я все это отменил и использовал

slop=$(slop --padding=-1 --bordersize=2 -f "%x %y %w %h %g %i") || exit 1
read -r X Y W H G ID < <(echo $slop)

вместо этого, поскольку slop делает так, чтобы ваш курсор не мог выделять текст и т. Д., Когда мышь нажата!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...