static void print_separator(struct window *win) { int y; if (win->x + win->w == screen_w) return; for (y = 0; y < win->h; y++) { buf_move_cursor(win->x + win->w, win->y + y); buf_add_ch('|'); } }
int ed_loop(Context_t *ctx) { Cmd_t *cmd; int r; char c; while (1) { if (ctx->mode == ED_QUITTING) break; c = getchar(); switch (ctx->mode) { case ED_HOTKEY_MODE: cmd = ed_get_cmd_by_hk(c); if (cmd) { r = cmd->cmd_cb(ctx, NULL); if (!r) break; lprintf(LL_CRITICAL, "Command \"%s\" was not executed succesfully", cmd->cmd_id); return -1; } switch (c) { case 'i': ed_set_mode(ctx, ED_INSERT_MODE); break; } break; case ED_CMD_MODE: if (c == 27) { ncs_rm_current_line(ctx->scr); ncs_set_cursor(ctx->scr, 0, 0); buf_clear(ctx->cmd_buffer); ed_set_mode(ctx, ED_HOTKEY_MODE); break; } if (c == '\r' || c == '\n') { ncs_rm_current_line(ctx->scr); buf_add_ch(ctx->cmd_buffer, '\0'); ed_parse_cmd_buf(ctx); buf_clear(ctx->cmd_buffer); ed_set_mode(ctx, ED_HOTKEY_MODE); //ncs_set_cursor(ctx->scr, 0, 0); break; } buf_add_ch(ctx->cmd_buffer, c); ncs_addch(ctx->scr, c); break; case ED_INSERT_MODE: if (c == 27) { ed_set_mode(ctx, ED_HOTKEY_MODE); break; } if (c & (0x1 << 7)) { ed_info(ctx, "Non-ASCII characters not supported"); break; } buf_add_ch(ctx->c_buffer, c); ncs_addch(ctx->scr, c); break; default: lprintf(LL_ERROR, "Mode not set!\n"); break; } } return 0; }