Created
October 31, 2008 17:55
-
-
Save bastos/21368 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
;; From http://alohakun.blog7.fc2.com/blog-entry-929.html with small changes... | |
(require-extension xlib) | |
(let ((dpy (xopendisplay #f))) | |
(assert dpy) | |
(let ((root (xdefaultrootwindow dpy))) | |
(xgrabkey dpy XK_F1 MOD4MASK root 1 GRABMODEASYNC GRABMODEASYNC) | |
(xgrabbutton dpy 1 MOD4MASK root 1 BUTTONPRESSMASK GRABMODEASYNC GRABMODEASYNC NONE NONE) | |
(xgrabbutton dpy 3 MOD4MASK root 1 BUTTONPRESSMASK GRABMODEASYNC GRABMODEASYNC NONE NONE) | |
(let ((event (make-xevent)) | |
(attr (make-xwindowattributes)) | |
(start (make-xbuttonevent))) | |
(let eventloop () | |
(xnextevent dpy event) | |
(cond | |
((and (eqv? (xevent-type event) KEYPRESS) | |
(not (eqv? (xevent-xkey-window event) NONE))) | |
(xraisewindow dpy (xevent-xkey-window event))) | |
((and (eqv? (xevent-type event) BUTTONPRESS) | |
(not (eqv? (xevent-xbutton-subwindow event) NONE))) | |
(xgrabpointer dpy (xevent-xbutton-subwindow event) 1 | |
(bitwise-ior POINTERMOTIONMASK BUTTONRELEASEMASK) | |
GRABMODEASYNC GRABMODEASYNC NONE NONE CURRENTTIME) | |
(xgetwindowattributes dpy (xevent-xbutton-subwindow event) attr) | |
(set-xbuttonevent-type! start (xevent-xbutton-type event)) | |
(set-xbuttonevent-serial! start (xevent-xbutton-serial event)) | |
(set-xbuttonevent-send_event! start (xevent-xbutton-send_event event)) | |
(set-xbuttonevent-display! start (xevent-xbutton-display event)) | |
(set-xbuttonevent-window! start (xevent-xbutton-window event)) | |
(set-xbuttonevent-root! start (xevent-xbutton-root event)) | |
(set-xbuttonevent-subwindow! start (xevent-xbutton-subwindow event)) | |
(set-xbuttonevent-time! start (xevent-xbutton-time event)) | |
(set-xbuttonevent-x! start (xevent-xbutton-x event)) | |
(set-xbuttonevent-y! start (xevent-xbutton-y event)) | |
(set-xbuttonevent-x_root! start (xevent-xbutton-x_root event)) | |
(set-xbuttonevent-y_root! start (xevent-xbutton-y_root event)) | |
(set-xbuttonevent-state! start (xevent-xbutton-state event)) | |
(set-xbuttonevent-button! start (xevent-xbutton-button event)) | |
(set-xbuttonevent-same_screen! start (xevent-xbutton-same_screen event))) | |
((eqv? (xevent-type event) MOTIONNOTIFY) | |
(xraisewindow dpy (xevent-xkey-window event)) | |
(let ((xdiff (- (xevent-xbutton-x_root event) | |
(xbuttonevent-x_root start))) | |
(ydiff (- (xevent-xbutton-y_root event) | |
(xbuttonevent-y_root start)))) | |
(xmoveresizewindow dpy (xevent-xmotion-window event) | |
(+ (xwindowattributes-x attr) | |
(if (eqv? (xbuttonevent-button start) 1) | |
xdiff 0)) | |
(+ (xwindowattributes-y attr) | |
(if (eqv? (xbuttonevent-button start) 1) | |
ydiff 0)) | |
(max 1 (+ (xwindowattributes-width attr) | |
(if (eqv? (xbuttonevent-button start) 3) | |
xdiff 0))) | |
(max 1 (+ (xwindowattributes-height attr) | |
(if (eqv? (xbuttonevent-button start) 3) | |
ydiff 0)))))) | |
((eqv? (xevent-type event) BUTTONRELEASE) | |
(xungrabpointer dpy CURRENTTIME))) | |
(eventloop))))) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment