red-window.scm
1 #!/usr/bin/env -S guile --no-auto-compile -e main 2 !# 3 (use-modules 4 (wayland server display) 5 (wayland signal) 6 (wayland server listener) 7 (util572 color) 8 (wlroots)) 9 10 ;;; this a simple example, can not input, display cursor , display client. 11 ;;; please don't try at tty. use x11 or wayland backend. it just display a 12 ;;; red windows. 13 14 (define w-display (wl-display-create)) 15 (define w-backend (wlr-backend-autocreate w-display)) 16 (define w-renderer (wlr-renderer-autocreate w-backend)) 17 (define w-allocator (wlr-allocator-autocreate w-backend w-renderer)) 18 19 (define output-frame-listener 20 (make-wl-listener 21 (lambda (listener output) 22 (wlr-output-attach-render output #f) 23 (call-with-renderer 24 w-renderer 25 (.width output) (.height output) 26 (lambda (renderer . _) 27 (wlr-renderer-clear renderer (make-rgba-color "#f000")))) 28 (wlr-output-commit output)))) 29 30 (define w-backend-new-output-listener 31 (make-wl-listener 32 (lambda (listener output) 33 (display "I get new output!\n") 34 (wlr-output-init-render 35 output w-allocator w-renderer) 36 (wl-signal-add (get-event-signal output 'frame) output-frame-listener) 37 (wlr-output-enable output #t) 38 (wlr-output-commit output)))) 39 40 (define (main . _) 41 (wlr-renderer-init-wl-display w-renderer w-display) 42 43 (wl-signal-add (get-event-signal w-backend 'new-output) 44 w-backend-new-output-listener) 45 46 (wlr-backend-start w-backend) 47 48 (setenv "WAYLAND_DISPLAY" (wl-display-add-socket-auto w-display)) 49 50 (wl-display-run w-display) 51 52 (wl-display-destroy-clients w-display) 53 (wl-display-destroy w-display))