From 3836dc5ec57da5661c5675921c81b23d888e8896 Mon Sep 17 00:00:00 2001 From: Sameer Rahmani Date: Sun, 21 Aug 2022 15:29:11 +0100 Subject: [PATCH] Finish up the emacs module only approach --- builder | 19 ++++++++++++++++++- lisp/test.el | 14 ++++++++++---- src/compositor.c | 14 +++++++++++--- src/compositor.h | 3 ++- src/feynman.c | 8 ++++---- 5 files changed, 45 insertions(+), 13 deletions(-) diff --git a/builder b/builder index 5c29f23..d9ac498 100755 --- a/builder +++ b/builder @@ -142,8 +142,25 @@ function clean() { ## Cleans up the source dir and removes the build rm -rf "$(find . -iname '*~')" } +function x() { ## Runs Xephyr for testing purposes + Xephyr -br -ac -noreset -screen 800x600 :1 +} + +function dev-start() { ## Runs the development env + x & + DISPLAY=:1 "$EMACS_DEV/bin/emacs" -Q \ + --eval "(setq feynman_path \"$ME/build/src/libfeynman.so\")" \ + --daemon=test \ + --load "$ME/lisp/test.el" "$@" +} + +function dev-stop() { ## Stops the development env + DISPLAY=:1 "$EMACS_DEV/bin/emacsclient" --socket-name=test -e "(kill-emacs)" + killall Xephyr +} + function run() { ## Runs Emacs and loads feynman - "$EMACS_DEV/bin/emacs" -Q --eval "(setq feynman_path \"$ME/build/src/libfeynman.so\")" --load "$ME/lisp/test.el" "$@" + DISPLAY=:1 "$EMACS_DEV/bin/emacsclient" --socket-name=test -c -fs } diff --git a/lisp/test.el b/lisp/test.el index 038da9f..68f8bcb 100644 --- a/lisp/test.el +++ b/lisp/test.el @@ -1,5 +1,11 @@ - (module-load feynman_path) -(setq conn (feynman/start)) -(message ">> %s" conn) -(message ">>>> %s" (feynman/stop conn)) +(defvar conn nil) +(defun stop-feynman () + (interactive) + (message ">>>> %s" (feynman/stop conn))) + +(add-hook 'before-make-frame-hook + (lambda () + (print "hereeee") + (setq conn (feynman/start)) + (message ">> %s" conn))) diff --git a/src/compositor.c b/src/compositor.c index bdbca9e..cce0146 100644 --- a/src/compositor.c +++ b/src/compositor.c @@ -21,6 +21,7 @@ #include "utils.h" #include +#include #include #include #include @@ -741,7 +742,7 @@ server_new_xdg_surface (struct wl_listener *listener, void *data) } int -start_feynman (emacs_env *env, struct feynman_server *server) +init_feynman_server (emacs_env *env, struct feynman_server *server) { wlr_log_init (WLR_DEBUG, NULL); @@ -892,15 +893,22 @@ start_feynman (emacs_env *env, struct feynman_server *server) wlr_log (WLR_INFO, "Running Wayland compositor on WAYLAND_DISPLAY=%s", socket); - wl_display_run (server->wl_display); - return 0; } +void +start_feynman (struct feynman_server *server) +{ + assert (server); + wl_display_run (server->wl_display); +} + void stop_feynman (emacs_env *env, struct feynman_server *server) { (void)env; + + wl_display_terminate (server->wl_display); /* Once wl_display_run returns, we shut down the server-> */ wl_display_destroy_clients (server->wl_display); wl_display_destroy (server->wl_display); diff --git a/src/compositor.h b/src/compositor.h index 5db3dac..823be90 100644 --- a/src/compositor.h +++ b/src/compositor.h @@ -119,6 +119,7 @@ struct feynman_keyboard struct wl_listener modifiers; struct wl_listener key; }; -int start_feynman (emacs_env *env, struct feynman_server *server); +int init_feynman_server (emacs_env *env, struct feynman_server *server); +void start_feynman (struct feynman_server *server); void stop_feynman (emacs_env *env, struct feynman_server *server); #endif diff --git a/src/feynman.c b/src/feynman.c index 3b82d8a..2169a34 100644 --- a/src/feynman.c +++ b/src/feynman.c @@ -43,7 +43,7 @@ start_event_loop (void *server_ptr) assert (server_ptr); struct feynman_server *server = (struct feynman_server *)server_ptr; - wl_display_run (server->wl_display); + start_feynman (server); return NULL; } @@ -56,7 +56,7 @@ feynman_start (emacs_env *env, ptrdiff_t nargs, emacs_value args[], void *data) emacs_value nil = env->intern (env, "nil"); struct feynman_server *server = malloc (sizeof (struct feynman_server)); - int err = start_feynman (env, server); + int err = init_feynman_server (env, server); if (err != 0) { em_error (env, "Start process failed.Received none zero error code: %d", @@ -65,8 +65,8 @@ feynman_start (emacs_env *env, ptrdiff_t nargs, emacs_value args[], void *data) } // feynman_events_q = (queue_t *)init_queue(100); - /* pthread_create (&server->server_thread_id, NULL, start_event_loop, */ - /* (void *)server); */ + pthread_create (&server->server_thread_id, NULL, start_event_loop, + (void *)server); server_state = env->make_global_ref ( env, env->make_user_ptr (env, free_value, (void *)server));