From cd3a1b7749ecfacd0dc47eb32bcae4b23cb439f9 Mon Sep 17 00:00:00 2001 From: Samuel Fadel Date: Fri, 9 Dec 2022 12:39:18 +0100 Subject: 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 --- wm.scm | 52 ++++++++++++++++++++++++++++++++++++++-------------- 1 file changed, 38 insertions(+), 14 deletions(-) (limited to 'wm.scm') 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 -- cgit v1.2.3