diff options
-rw-r--r-- | .manifest.scm | 22 | ||||
-rw-r--r-- | Makefile | 4 | ||||
-rw-r--r-- | README.org | 20 | ||||
-rw-r--r-- | main.scm | 4 | ||||
-rw-r--r-- | schewm.c | 11 | ||||
-rw-r--r-- | wm.scm | 24 |
6 files changed, 85 insertions, 0 deletions
diff --git a/.manifest.scm b/.manifest.scm new file mode 100644 index 0000000..ef6bbf7 --- /dev/null +++ b/.manifest.scm @@ -0,0 +1,22 @@ +(use-modules (guix build-system gnu) + (guix download) + (guix packages) + ((guix licenses) :prefix license:) + (gnu packages base) + (gnu packages commencement) + (gnu packages cpp) + (gnu packages guile) + (gnu packages pkg-config) + (gnu packages xorg)) + + +(packages->manifest + (list + gnu-make + gcc-toolchain + pkg-config + libxcb + xcb-util-keysyms + xcb-util-wm + ccls + )) diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..3d127d2 --- /dev/null +++ b/Makefile @@ -0,0 +1,4 @@ +all: libschewm.so + +libschewm.so: schewm.c + gcc -fPIC -Wall -shared -o libschewm.so schewm.c diff --git a/README.org b/README.org new file mode 100644 index 0000000..8ddf847 --- /dev/null +++ b/README.org @@ -0,0 +1,20 @@ +* Introduction + +`schewn' (pronounced skew with an extra `n' sound at the end) is a +floating and manual tiling window manager written in C for performance +and (Guile) Scheme for extensibility (and configuration). + +As expected from most window managers, every action is configurable to +be bound to a set of keys or mouse actions. The internals of `schewn' +are kept to its C core, but its capabilities are exposed as a Scheme +API. + +This project aims to provide something more akin to `2bwm' but with +Scheme extensibility, with the aim of being a more ergonomic, dynamic, +and convenient way of configuring the window manager to do what the +user wants without wondering about recompiling its source code. + +Compared to StumpWM, we do not aim to have a Lisp-based window +manager, but rather a convenient library of Scheme functions which +only expose the functionality of the window manager, while having a +core in C which does the heavy lifting. diff --git a/main.scm b/main.scm new file mode 100644 index 0000000..07c2f04 --- /dev/null +++ b/main.scm @@ -0,0 +1,4 @@ +(use-modules (wm)) + +(when (wm-init) + (wm-quit "hello")) diff --git a/schewm.c b/schewm.c new file mode 100644 index 0000000..72f89bf --- /dev/null +++ b/schewm.c @@ -0,0 +1,11 @@ +#include <stdio.h> +#include <stdbool.h> +#include <stdlib.h> + +bool wm_init() { + return true; +} + +void wm_quit(const char *m) { + printf("hello, %s\n", m); +} @@ -0,0 +1,24 @@ +(define-module (wm) + #:use-module (system foreign) + #:export (wm-init wm-quit)) + +(define libschewm (dynamic-link "libschewm")) + +(define (int-as-bool i) + (not (eq? 0 i))) + +(define (schewm-func return-type name args) + (pointer->procedure + return-type + (dynamic-func name libschewm) + args)) + +(define (wm-init) + (let ((c/wm-init + (schewm-func int "wm_init" '()))) + (int-as-bool (c/wm-init)))) + +(define (wm-quit s) + (let ((c/wm-quit + (schewm-func void "wm_quit" (list '*)))) + (c/wm-quit (string->pointer s)))) |