const char* rl_readline(struct RLContext* ctx)
{
- size_t i = ctx->history_pos;
-
- if (ctx->prompt)
- rl_puts(ctx, ctx->prompt);
-
- insert_chars(ctx, &i, NULL, 0);
-
while (1)
{
char ch;
{
// Ask the match hook if available
if (!ctx->match)
- return false;
+ return NULL;
complete_word(ctx, &ctx->line_pos);
continue;
}
- if (c == '\r' || c == '\n')
- {
- // Terminate line
- insert_chars(ctx, &ctx->line_pos, NULL, 0);
- rl_puts(ctx, "\r\n");
- break;
- }
-
// Backspace cancels a character, or it is ignored if at
// the start of the line
if (c == '\b')
continue;
}
+ if (c == '\r' || c == '\n')
+ {
+ rl_puts(ctx, "\r\n");
+ break;
+ }
+
+
// Add a character to the buffer, if possible
ch = (char)c;
ASSERT2(ch == c, "a special key was not properly handled");
if (insert_chars(ctx, &ctx->line_pos, &ch, 1))
- {
rl_putc(ctx, ch);
- }
else
- {
beep(ctx);
- }
}
ctx->history_pos = ctx->line_pos + 1;
dump_history(ctx);
#endif
+ const char *buf = &ctx->history[ctx->line_pos + 1];
+
+ ctx->line_pos = ctx->history_pos;
+
+ if (ctx->prompt)
+ rl_puts(ctx, ctx->prompt);
+
+ insert_chars(ctx, &ctx->line_pos, NULL, 0);
+
// Since the current pointer now points to the separator, we need
// to return the first character
- return &ctx->history[ctx->line_pos + 1];
+ return buf;
}