summaryrefslogtreecommitdiff
path: root/wm.scm
diff options
context:
space:
mode:
authorSamuel Fadel <samuel@nihil.ws>2022-12-09 12:39:18 +0100
committerSamuel Fadel <samuel@nihil.ws>2022-12-09 12:39:18 +0100
commitcd3a1b7749ecfacd0dc47eb32bcae4b23cb439f9 (patch)
treec46e93cb901ad388bb95936d4a100a70f50f3844 /wm.scm
parent6f54084c0ee63f4b341f8f92efbc8b82d3dfa224 (diff)
Implemented focus prev/next; cleanup on Scheme side.
* schewm.c: Implemented focus prev/next and minor helper func * main.scm and wm.scm: Added focus prev/next calls to C
Diffstat (limited to 'wm.scm')
-rw-r--r--wm.scm52
1 files changed, 38 insertions, 14 deletions
diff --git a/wm.scm b/wm.scm
index 4609ea9..744c408 100644
--- a/wm.scm
+++ b/wm.scm
@@ -1,17 +1,20 @@
(define-module (wm)
#:use-module (system foreign)
#:export (wm-init
- key-from-str
+ make-key
+ make-shift-key
+ wm-grab-keys
wm-grab-key-with-mod
wm-grab-key-with-mod-shift
wm-set-key-press-handler!
+ wm-focus-prev
wm-focus-next
wm-run
wm-quit))
(define libschewm (dynamic-link "libschewm"))
-(define (int-as-bool i)
+(define (uint8-as-bool i)
(not (eq? 0 i)))
(define (schewm-func return-type name args)
@@ -20,19 +23,11 @@
(dynamic-func name libschewm)
args))
-(define c/key-from-str
- (schewm-func uint32
- "keysym_from_str"
- (list '*)))
-
-(define (key-from-str s)
- (c/key-from-str (string->pointer s)))
-
(define c/wm-init
- (schewm-func int "wm_init" '()))
+ (schewm-func uint8 "wm_init" '()))
(define (wm-init)
- (int-as-bool (c/wm-init)))
+ (uint8-as-bool (c/wm-init)))
(define wm-quit
(schewm-func void "wm_quit" '()))
@@ -40,6 +35,20 @@
(define wm-run
(schewm-func void "wm_run" '()))
+(define c/key-from-str
+ (schewm-func uint32
+ "keysym_from_str"
+ (list '*)))
+
+(define (key-from-str s)
+ (c/key-from-str (string->pointer s)))
+
+(define (make-key key)
+ (list #f (key-from-str key)))
+
+(define (make-shift-key key)
+ (list #t (key-from-str key)))
+
(define wm-grab-key-with-mod
(schewm-func void "wm_grab_key_with_mod"
(list uint32)))
@@ -48,8 +57,23 @@
(schewm-func void "wm_grab_key_with_mod_shift"
(list uint32)))
-(define (wm-focus-next)
- '())
+(define (wm-grab-keys keybindings)
+ (unless (null? keybindings)
+ (let* ((keybinding (car keybindings))
+ (chord (car keybinding))
+ (func (cdr keybinding))
+ (with-shift (car chord))
+ (key (car (cdr chord))))
+ (if with-shift
+ (wm-grab-key-with-mod-shift key)
+ (wm-grab-key-with-mod key))
+ (wm-grab-keys (cdr keybindings)))))
+
+(define wm-focus-prev
+ (schewm-func void "wm_focus_prev" '()))
+
+(define wm-focus-next
+ (schewm-func void "wm_focus_next" '()))
(define c/wm-set-key-press-handler
(schewm-func void