Есть ли способ получить координаты X и Y мыши в схеме MIT? - PullRequest
0 голосов
/ 19 июня 2020

Я экспериментировал с X-графикой в ​​схеме MIT, и мне было интересно, есть ли способ получить положение курсора на экране / относительно окна X изнутри языка, чтобы изменить графику на основе расположение мыши.

1 Ответ

0 голосов
/ 21 июня 2020

Я сам придумал способ, но это довольно неприятно, так как мне пришлось использовать дополнительные пакеты:

(define (get-position) 
        (define a (open-output-string))
        (run-shell-command "xdotool getmouselocation" 'output a)
        (define output (get-output-string a))
        (close-port a)
        ((lambda (x) (list (string->number (cadar x)) (string->number (cadadr x))))
         (map (string-splitter 'delimiter #\:) ((string-splitter) ((string-trimmer) output)))))

(define resolution (let ((a (open-output-string)))
                        (run-shell-command "xdpyinfo | grep dimensions | awk '{print $2;}'" 'output a)
                        (define output (get-output-string a))
                        (close-port a)
                        (map string->number ((string-splitter 'delimiter #\x)
                                            ((string-trimmer) output)))))

Затем, чтобы получить относительное положение курсора на экране, вы просто

(map (lambda (x y) (inexact (/ x y))) (get-position) resolution)

(Вы должны заранее установить xdpyinfo и xdotool, так что имейте это в виду)

...