(define (switch-to-desktop/number desktop) (let ((root (xrootwindow *display* (xdefaultscreen *display*))) (event-mask (bitwise-ior SUBSTRUCTURENOTIFYMASK SUBSTRUCTUREREDIRECTMASK)) (event (make-xclientmessageevent))) (set-xclientmessageevent-type! event CLIENTMESSAGE) (set-xclientmessageevent-serial! event 0) (set-xclientmessageevent-send_event! event 1) (set-xclientmessageevent-display! event *display*) (set-xclientmessageevent-window! event root) (set-xclientmessageevent-message_type! event (xinternatom *display* "_NET_CURRENT_DESKTOP" 0)) (set-xclientmessageevent-format! event 32) (define make-event-data-l (foreign-lambda* void (((c-pointer long) data_l) (long l0) (long l1) (long l2) (long l3) (long l4)) "data_l[0] = l0; data_l[1] = l1;" "data_l[2] = l2; data_l[3] = l3;" "data_l[4] = l4;")) (make-event-data-l (xclientmessageevent-data-l event) desktop (current-seconds) 0 0 0) (xsendevent *display* root 0 event-mask event)))