diff options
| author | Albert Cervin <albert@acervin.com> | 2025-11-24 22:51:46 +0100 |
|---|---|---|
| committer | Albert Cervin <albert@acervin.com> | 2025-11-24 22:51:46 +0100 |
| commit | 7455c673e62d14314c7c45151f139d5f4e3e25e2 (patch) | |
| tree | 2a820ea5c408a16082dc34460bbd76b23391acfa /src/main/completion.c | |
| parent | fb91c582ad5b552f3ed081fb2737d682a7cad181 (diff) | |
| download | dged-7455c673e62d14314c7c45151f139d5f4e3e25e2.tar.gz dged-7455c673e62d14314c7c45151f139d5f4e3e25e2.tar.xz dged-7455c673e62d14314c7c45151f139d5f4e3e25e2.zip | |
Fix crashes when killing buffers
Now, if you kill all buffers, the editor will shut down :)
Diffstat (limited to 'src/main/completion.c')
| -rw-r--r-- | src/main/completion.c | 14 |
1 files changed, 13 insertions, 1 deletions
diff --git a/src/main/completion.c b/src/main/completion.c index 7c5de47..23b3a58 100644 --- a/src/main/completion.c +++ b/src/main/completion.c @@ -140,7 +140,10 @@ COMMAND_FN("prev-completion", prev_completion, goto_prev_completion, NULL) COMMAND_FN("insert-completion", insert_completion, insert_completion, NULL) static void clear_completions(struct completion_state *state) { - buffer_clear(state->completions_buffer); + if (g_state.completions_buffer != NULL) { + buffer_clear(state->completions_buffer); + } + VEC_FOR_EACH(&state->completions, struct completion_item * item) { if (item->completion.cleanup != NULL) { item->completion.cleanup(item->completion.data); @@ -326,6 +329,12 @@ static void on_buffer_delete(struct buffer *buffer, struct edit_location edit, on_buffer_changed(buffer, edit, true, userdata); } +static void completions_buffer_deleted(struct buffer *buffer, void *userdata) { + (void)buffer; + struct completion_state *state = (struct completion_state *)userdata; + state->completions_buffer = NULL; +} + void init_completion(struct buffers *buffers) { if (g_state.completions_buffer == NULL) { struct buffer b = buffer_create("*completions*"); @@ -340,6 +349,9 @@ void init_completion(struct buffers *buffers) { buffer_add_update_hook(g_state.completions_buffer, update_comp_buffer, &g_state); + buffer_add_destroy_hook(g_state.completions_buffer, + completions_buffer_deleted, &g_state); + g_state.keymap_id = (uint64_t)-1; g_state.target = NULL; |
