Finish up the emacs module only approach

This commit is contained in:
Sameer Rahmani 2022-08-21 15:29:11 +01:00
parent 9f657ce1d6
commit 3836dc5ec5
5 changed files with 45 additions and 13 deletions

19
builder
View File

@ -142,8 +142,25 @@ function clean() { ## Cleans up the source dir and removes the build
rm -rf "$(find . -iname '*~')" 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 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
} }

View File

@ -1,5 +1,11 @@
(module-load feynman_path) (module-load feynman_path)
(setq conn (feynman/start)) (defvar conn nil)
(message ">> %s" conn) (defun stop-feynman ()
(message ">>>> %s" (feynman/stop conn)) (interactive)
(message ">>>> %s" (feynman/stop conn)))
(add-hook 'before-make-frame-hook
(lambda ()
(print "hereeee")
(setq conn (feynman/start))
(message ">> %s" conn)))

View File

@ -21,6 +21,7 @@
#include "utils.h" #include "utils.h"
#include <assert.h> #include <assert.h>
#include <wayland-server-core.h>
#include <wlr/backend.h> #include <wlr/backend.h>
#include <wlr/backend/interface.h> #include <wlr/backend/interface.h>
#include <wlr/interfaces/wlr_output.h> #include <wlr/interfaces/wlr_output.h>
@ -741,7 +742,7 @@ server_new_xdg_surface (struct wl_listener *listener, void *data)
} }
int 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); 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", wlr_log (WLR_INFO, "Running Wayland compositor on WAYLAND_DISPLAY=%s",
socket); socket);
wl_display_run (server->wl_display);
return 0; return 0;
} }
void
start_feynman (struct feynman_server *server)
{
assert (server);
wl_display_run (server->wl_display);
}
void void
stop_feynman (emacs_env *env, struct feynman_server *server) stop_feynman (emacs_env *env, struct feynman_server *server)
{ {
(void)env; (void)env;
wl_display_terminate (server->wl_display);
/* Once wl_display_run returns, we shut down the server-> */ /* Once wl_display_run returns, we shut down the server-> */
wl_display_destroy_clients (server->wl_display); wl_display_destroy_clients (server->wl_display);
wl_display_destroy (server->wl_display); wl_display_destroy (server->wl_display);

View File

@ -119,6 +119,7 @@ struct feynman_keyboard
struct wl_listener modifiers; struct wl_listener modifiers;
struct wl_listener key; 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); void stop_feynman (emacs_env *env, struct feynman_server *server);
#endif #endif

View File

@ -43,7 +43,7 @@ start_event_loop (void *server_ptr)
assert (server_ptr); assert (server_ptr);
struct feynman_server *server = (struct feynman_server *)server_ptr; struct feynman_server *server = (struct feynman_server *)server_ptr;
wl_display_run (server->wl_display); start_feynman (server);
return NULL; 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"); emacs_value nil = env->intern (env, "nil");
struct feynman_server *server = malloc (sizeof (struct feynman_server)); 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) if (err != 0)
{ {
em_error (env, "Start process failed.Received none zero error code: %d", 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); // feynman_events_q = (queue_t *)init_queue(100);
/* pthread_create (&server->server_thread_id, NULL, start_event_loop, */ pthread_create (&server->server_thread_id, NULL, start_event_loop,
/* (void *)server); */ (void *)server);
server_state = env->make_global_ref ( server_state = env->make_global_ref (
env, env->make_user_ptr (env, free_value, (void *)server)); env, env->make_user_ptr (env, free_value, (void *)server));