Esempio n. 1
0
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('|');
    }
}
Esempio n. 2
0
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;
}