From f9e32ce1575da69cc3a9e4690b6df2dbee41d14d Mon Sep 17 00:00:00 2001 From: Po Lu Date: Sat, 28 Jan 2023 21:21:45 +0800 Subject: Implement `restart-emacs' on Android * java/org/gnu/emacs/EmacsService.java (restartEmacs): New function. * src/android.c (struct android_emacs_service) (android_init_emacs_service): Add new method. (android_restart_emacs): New function. * src/android.h: Update prototypes. * src/emacs.c (Fkill_emacs): Call android_restart_emacs whenever appropriate. --- src/android.c | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) (limited to 'src/android.c') diff --git a/src/android.c b/src/android.c index 021bea1fc2f..598d002fb1c 100644 --- a/src/android.c +++ b/src/android.c @@ -97,6 +97,7 @@ struct android_emacs_service jmethodID name_keysym; jmethodID sync; jmethodID browse_url; + jmethodID restart_emacs; }; struct android_emacs_pixmap @@ -1659,6 +1660,7 @@ android_init_emacs_service (void) FIND_METHOD (sync, "sync", "()V"); FIND_METHOD (browse_url, "browseUrl", "(Ljava/lang/String;)" "Ljava/lang/String;"); + FIND_METHOD (restart_emacs, "restartEmacs", "()V"); #undef FIND_METHOD } @@ -4987,6 +4989,23 @@ android_browse_url (Lisp_Object url) return tem; } +/* Tell the system to restart Emacs in a short amount of time, and + then kill Emacs. Never return. This is used to implement + `restart-emacs'. */ + +_Noreturn void +android_restart_emacs (void) +{ + /* Try to call the Java side function. Normally, this should call + System.exit to terminate this process. */ + (*android_java_env)->CallVoidMethod (android_java_env, + emacs_service, + service_class.restart_emacs); + + /* Exit anyway, in case EmacsService did not do so. */ + exit (0); +} + #else /* ANDROID_STUBIFY */ -- cgit v1.2.1