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 '*~')"
}
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
}

View File

@ -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)))

View File

@ -21,6 +21,7 @@
#include "utils.h"
#include <assert.h>
#include <wayland-server-core.h>
#include <wlr/backend.h>
#include <wlr/backend/interface.h>
#include <wlr/interfaces/wlr_output.h>
@ -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);

View File

@ -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

View File

@ -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));