diff options
| author | Albert Cervin <albert@acervin.com> | 2024-01-29 23:34:07 +0100 |
|---|---|---|
| committer | Albert Cervin <albert@acervin.com> | 2024-01-30 15:04:44 +0100 |
| commit | dda591fa33ac10c433289aa3ee862c3ded41eed3 (patch) | |
| tree | 9a25edbc810fd5d8fbc20f367c71ebcd81bb6026 /src/dged/minibuffer.c | |
| parent | 880199011075afd4f2d9bd16c7ce42a04741b5b7 (diff) | |
| download | dged-dda591fa33ac10c433289aa3ee862c3ded41eed3.tar.gz dged-dda591fa33ac10c433289aa3ee862c3ded41eed3.tar.xz dged-dda591fa33ac10c433289aa3ee862c3ded41eed3.zip | |
Syntax highlight is a go
Diffstat (limited to 'src/dged/minibuffer.c')
| -rw-r--r-- | src/dged/minibuffer.c | 34 |
1 files changed, 32 insertions, 2 deletions
diff --git a/src/dged/minibuffer.c b/src/dged/minibuffer.c index eacf8da..634a864 100644 --- a/src/dged/minibuffer.c +++ b/src/dged/minibuffer.c @@ -2,6 +2,7 @@ #include "binding.h" #include "buffer.h" #include "buffer_view.h" +#include "buffers.h" #include "command.h" #include "display.h" @@ -20,6 +21,8 @@ static struct minibuffer { bool clear; struct window *prev_window; + struct buffer *message_buffer; + } g_minibuffer = {0}; uint32_t minibuffer_draw_prompt(struct command_list *commands) { @@ -85,7 +88,7 @@ void update(struct buffer *buffer, void *userdata) { } } -void minibuffer_init(struct buffer *buffer) { +void minibuffer_init(struct buffer *buffer, struct buffers *buffers) { if (g_minibuffer.buffer != NULL) { return; } @@ -96,6 +99,9 @@ void minibuffer_init(struct buffer *buffer) { g_minibuffer.clear = false; g_minibuffer.prompt_active = false; buffer_add_update_hook(g_minibuffer.buffer, update, &g_minibuffer); + + g_minibuffer.message_buffer = + buffers_add(buffers, buffer_create("*messages*")); } void echo(uint32_t timeout, const char *fmt, va_list args) { @@ -107,13 +113,37 @@ void echo(uint32_t timeout, const char *fmt, va_list args) { g_minibuffer.expires.tv_sec += timeout; g_minibuffer.clear = false; - char buff[2048]; + static char buff[2048]; size_t nbytes = vsnprintf(buff, 2048, fmt, args); // vsnprintf returns how many characters it would have wanted to write in case // of overflow buffer_set_text(g_minibuffer.buffer, (uint8_t *)buff, nbytes > 2048 ? 2048 : nbytes); + + // we can get messages before this is set up + if (g_minibuffer.message_buffer != NULL) { + buffer_add(g_minibuffer.message_buffer, + buffer_end(g_minibuffer.message_buffer), (uint8_t *)buff, + nbytes > 2048 ? 2048 : nbytes); + } +} + +void message(const char *fmt, ...) { + // we can get messages before this is set up + if (g_minibuffer.message_buffer == NULL) { + return; + } + + va_list args; + va_start(args, fmt); + static char buff[2048]; + size_t nbytes = vsnprintf(buff, 2048, fmt, args); + va_end(args); + + buffer_add(g_minibuffer.message_buffer, + buffer_end(g_minibuffer.message_buffer), (uint8_t *)buff, + nbytes > 2048 ? 2048 : nbytes); } void minibuffer_destroy() { |
