summaryrefslogtreecommitdiff
path: root/src/minibuffer.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/minibuffer.c')
-rw-r--r--src/minibuffer.c25
1 files changed, 21 insertions, 4 deletions
diff --git a/src/minibuffer.c b/src/minibuffer.c
index cf09e73..5bf5043 100644
--- a/src/minibuffer.c
+++ b/src/minibuffer.c
@@ -35,7 +35,7 @@ int32_t execute(struct command_ctx ctx, int argc, const char *argv[]) {
// split on ' '
const char *argv[128] = {l};
- argc = 1;
+ argc = line.nbytes > 0 ? 1 : 0;
for (uint32_t bytei = 0; bytei < line.nbytes; ++bytei) {
uint8_t byte = line.text[bytei];
if (byte == ' ') {
@@ -94,6 +94,10 @@ struct update_hook_result update(struct buffer *buffer,
}
void minibuffer_init(struct buffer *buffer) {
+ if (g_minibuffer.buffer != NULL) {
+ return;
+ }
+
g_minibuffer.buffer = buffer;
struct binding bindings[] = {
ANONYMOUS_BINDING(Ctrl, 'M', &execute_minibuffer_command),
@@ -106,7 +110,7 @@ void minibuffer_init(struct buffer *buffer) {
}
void echo(uint32_t timeout, const char *fmt, va_list args) {
- if (g_minibuffer.prompt_active) {
+ if (g_minibuffer.prompt_active || g_minibuffer.buffer == NULL) {
return;
}
@@ -138,9 +142,14 @@ void minibuffer_echo_timeout(uint32_t timeout, const char *fmt, ...) {
}
void minibuffer_prompt(struct command_ctx command_ctx, const char *fmt, ...) {
+ if (g_minibuffer.buffer == NULL) {
+ return;
+ }
+
minibuffer_clear();
g_minibuffer.prompt_active = true;
g_minibuffer.prompt_command_ctx = command_ctx;
+
va_list args;
va_start(args, fmt);
vsnprintf(g_minibuffer.prompt, sizeof(g_minibuffer.prompt), fmt, args);
@@ -152,6 +161,14 @@ void minibuffer_abort_prompt() {
g_minibuffer.prompt_active = false;
}
-bool minibuffer_displaying() { return !buffer_is_empty(g_minibuffer.buffer); }
-void minibuffer_clear() { buffer_clear(g_minibuffer.buffer); }
+bool minibuffer_displaying() {
+ return g_minibuffer.buffer != NULL && !buffer_is_empty(g_minibuffer.buffer);
+}
+
+void minibuffer_clear() {
+ if (g_minibuffer.buffer != NULL) {
+ buffer_clear(g_minibuffer.buffer);
+ }
+}
+
bool minibuffer_focused() { return g_minibuffer.prompt_active; }