summary refs log tree commit diff stats
diff options
context:
space:
mode:
-rw-r--r--.gitignore3
-rwxr-xr-xacdwmbin0 -> 70664 bytes
-rw-r--r--acdwm.egg9
-rwxr-xr-xacdwm.scm110
-rwxr-xr-xok19
5 files changed, 141 insertions, 0 deletions
diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..75039f1 --- /dev/null +++ b/.gitignore
@@ -0,0 +1,3 @@
1.fr
2*.build.sh
3*.install.sh \ No newline at end of file
diff --git a/acdwm b/acdwm new file mode 100755 index 0000000..a847fa2 --- /dev/null +++ b/acdwm
Binary files differ
diff --git a/acdwm.egg b/acdwm.egg new file mode 100644 index 0000000..a0fb9ce --- /dev/null +++ b/acdwm.egg
@@ -0,0 +1,9 @@
1;; -*- scheme -*-
2
3((synopsis "acdw indow manager")
4 (author "Case Duckworth")
5 (license "God Willing")
6 (version 0.0.0)
7 (dependencies matchable xlib srfi-1)
8 (components
9 (program acdwm)))
diff --git a/acdwm.scm b/acdwm.scm new file mode 100755 index 0000000..fdd8395 --- /dev/null +++ b/acdwm.scm
@@ -0,0 +1,110 @@
1#!/bin/sh
2#| -*- scheme -*-
3exec csi -ss "$0" "$@" ; acdwm
4based on tinywm: https://github.com/mackstann/tinywm/
5|#
6
7(import (chicken bitwise)
8 (chicken process-context)
9 (srfi 1)
10 matchable
11 xlib)
12
13(define TRUE 1)
14(define FALSE 0)
15
16(define dpy (make-parameter #f))
17(define screen (make-parameter #f))
18(define root (make-parameter #f))
19
20(define (grab-keys)
21 (xgrabkey (dpy)
22 (char->integer (xkeysymtokeycode (dpy) (xstringtokeysym "F1")))
23 MOD1MASK
24 (root)
25 TRUE
26 GRABMODEASYNC
27 GRABMODEASYNC)
28 (xgrabbutton (dpy)
29 1
30 MOD1MASK
31 (root)
32 TRUE
33 (bitwise-ior BUTTONPRESSMASK
34 BUTTONRELEASEMASK
35 POINTERMOTIONMASK)
36 GRABMODEASYNC
37 GRABMODEASYNC
38 NONE
39 NONE)
40 (xgrabbutton (dpy)
41 3
42 MOD1MASK
43 (root)
44 TRUE
45 (bitwise-ior BUTTONPRESSMASK
46 BUTTONRELEASEMASK
47 POINTERMOTIONMASK)
48 GRABMODEASYNC
49 GRABMODEASYNC
50 NONE
51 NONE))
52
53(define (handle-events)
54 (let ((event (make-xevent))
55 (start (make-xbuttonevent))
56 (attrs (make-xwindowattributes)))
57 (set-xbuttonevent-subwindow! start NONE)
58 (let loop ()
59 (xnextevent (dpy) event)
60 (cond
61 ((and (= KEYPRESS (xevent-type event))
62 (not (= NONE (xevent-xkey-subwindow event))))
63 (xraisewindow (dpy) (xevent-xkey-subwindow event)))
64
65 ((and (= BUTTONPRESS (xevent-type event))
66 (not (= NONE (xevent-xbutton-subwindow event))))
67 (print "button!")
68 (xgetwindowattributes (dpy) (xevent-xbutton-subwindow event) attrs)
69 (set-xbuttonevent-x_root! start (xevent-xbutton-x_root event))
70 (set-xbuttonevent-y_root! start (xevent-xbutton-y_root event))
71 (set-xbuttonevent-button! start (xevent-xbutton-button event))
72 (set-xbuttonevent-subwindow! start (xevent-xbutton-subwindow event)))
73
74 ((and (= MOTIONNOTIFY (xevent-type event))
75 (not (= NONE (xbuttonevent-subwindow start))))
76 (let ((xdiff (- (xevent-xbutton-x_root event)
77 (xbuttonevent-x_root start)))
78 (ydiff (- (xevent-xbutton-y_root event)
79 (xbuttonevent-y_root start)))
80 (button (xbuttonevent-button start)))
81 (xmoveresizewindow (dpy)
82 (xbuttonevent-subwindow start)
83 (+ (xwindowattributes-x attrs)
84 (if (= button 1) xdiff 0))
85 (+ (xwindowattributes-y attrs)
86 (if (= button 1) ydiff 0))
87 (max 1 (+ (xwindowattributes-width attrs)
88 (if (= button 3) xdiff 0)))
89 (max 1 (+ (xwindowattributes-height attrs)
90 (if (= button 3) ydiff 0))))))
91
92 ((= BUTTONRELEASE (xevent-type event))
93 (print "buttonrelease!")
94 (set-xbuttonevent-subwindow! start NONE)))
95
96 ;; Annnd go around again
97 (loop))))
98
99(define (main args)
100 (parameterize ((dpy (xopendisplay #f)))
101 (assert (dpy))
102 (parameterize ((screen (xdefaultscreen (dpy))))
103 (parameterize ((root (xrootwindow (dpy) (screen))))
104 (grab-keys)
105 (handle-events)))))
106
107(cond-expand
108 ((or chicken-script compiling)
109 (main (command-line-arguments)))
110 (else))
diff --git a/ok b/ok new file mode 100755 index 0000000..c135a93 --- /dev/null +++ b/ok
@@ -0,0 +1,19 @@
1#!/bin/sh
2
3fr<<.
4acdwm chickenbuild acdwm.scm
5.
6
7xephyr(){
8 dep acdwm
9 quietly killall Xephyr
10 ok Xephyr -ac -screen 800x600 -br -reset -terminate 2>/dev/null :1 &
11 sleep 1
12 xterm -display :1 &
13 xterm -display :1 -geometry +100+100 &
14 ok env DISPLAY=:1 ./acdwm
15}
16
17chickenbuild(){
18 ok chicken-install -n
19}