aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/main.c
diff options
context:
space:
mode:
authorRobin Haberkorn <rhaberkorn@fmsbw.de>2026-04-12 21:47:58 +0200
committerRobin Haberkorn <rhaberkorn@fmsbw.de>2026-04-12 23:00:40 +0200
commit0a8770ac7d382df8976b2448fccc6cfe434cd4d1 (patch)
tree5551617b6bd61b069c9d538f19aea2dbc94b44c1 /src/main.c
parent0e3d6c84a52326a1069fe4f7adc2930b974dfa5f (diff)
GTK: SIGTERM/SIGHUP always terminates the program and dumps recovery files
* SIGTERM used to insert the ^KCLOSE key macro. However with the default ^KCLOSE macro, which inserts `EX`, this may fail to terminate the editor if buffers are modified. If the process is consequently killed by a non-ignorable signal, we may still loose data. * SIGTERM is used to gracefully shut down, so we now always terminate. Since we have recovery files, they are now dumped before terminating. This makes sure that recovery files are more up-to-date during unexpected but gracefull terminations. * The same functionality is planned on Curses, but requires more fundamental changes (TODO).
Diffstat (limited to 'src/main.c')
-rw-r--r--src/main.c10
1 files changed, 6 insertions, 4 deletions
diff --git a/src/main.c b/src/main.c
index 8bc02f1..33ab26f 100644
--- a/src/main.c
+++ b/src/main.c
@@ -66,12 +66,15 @@
teco_int_t teco_ed = TECO_ED_AUTOEOL;
/**
- * Whether there was an asyncronous interruption (usually after pressing CTRL+C).
+ * Whether there was an asynchronous interruption (usually after
+ * pressing CTRL+C) or termination (SIGTERM).
* However you should always use teco_interface_is_interrupted(),
* to check for interruptions because of its side effects.
* This variable is safe to set to TRUE from signal handlers and threads.
+ *
+ * This is a teco_interrupted_t.
*/
-volatile sig_atomic_t teco_interrupted = FALSE;
+volatile sig_atomic_t teco_interrupted = TECO_NORMAL;
/*
* FIXME: Move this into file-utils.c?
@@ -346,7 +349,7 @@ teco_initialize_environment(void)
static void
teco_sigint_handler(int signal)
{
- teco_interrupted = TRUE;
+ teco_interrupted = TECO_INTERRUPTED;
}
#ifdef G_OS_WIN32
@@ -386,7 +389,6 @@ main(int argc, char **argv)
#endif
signal(SIGINT, teco_sigint_handler);
- signal(SIGTERM, teco_sigint_handler);
/*
* Important for Unicode handling in curses and glib.