예제 #1
0
파일: screen.c 프로젝트: huynhrene/dex
int print_command(char prefix)
{
    long i, w;
    unsigned int u;
    int x;

    // width of characters up to and including cursor position
    w = 1; // ":" (prefix)
    i = 0;
    while (i <= cmdline.pos && i < cmdline.buf.len) {
        u = u_get_char(cmdline.buf.buffer, cmdline.buf.len, &i);
        w += u_char_width(u);
    }
    if (cmdline.pos == cmdline.buf.len) {
        w++;
    }
    if (w > screen_w)
        obuf.scroll_x = w - screen_w;

    set_builtin_color(BC_COMMANDLINE);
    i = 0;
    buf_put_char(prefix);
    x = obuf.x - obuf.scroll_x;
    while (i < cmdline.buf.len) {
        BUG_ON(obuf.x > obuf.scroll_x + obuf.width);
        u = u_get_char(cmdline.buf.buffer, cmdline.buf.len, &i);
        if (!buf_put_char(u))
            break;
        if (i <= cmdline.pos)
            x = obuf.x - obuf.scroll_x;
    }
    return x;
}
예제 #2
0
static void print_horizontal_tab_title(struct view *v, int idx)
{
	int skip = v->tt_width - v->tt_truncated_width;
	const char *filename = buffer_filename(v->buffer);
	char buf[16];

	if (skip > 0) {
		filename += u_skip_chars(filename, &skip);
	}

	snprintf(buf, sizeof(buf), "%c%d%s",
		obuf.x == 0 && idx > 0 ? '<' : ' ',
		idx + 1,
		buffer_modified(v->buffer) ? "+" : ":");

	if (v == v->window->view)
		set_builtin_color(BC_ACTIVETAB);
	else
		set_builtin_color(BC_INACTIVETAB);
	buf_add_str(buf);
	buf_add_str(filename);
	if (obuf.x == obuf.width - 1 && idx < v->window->views.count - 1)
		buf_put_char('>');
	else
		buf_put_char(' ');
}
예제 #3
0
static void print_horizontal_tabbar(struct window *win)
{
	int i;

	buf_reset(win->x, win->w, 0);
	buf_move_cursor(win->x, win->y);

	calculate_tabbar(win);
	for (i = win->first_tab_idx; i < win->views.count; i++) {
		struct view *v = win->views.ptrs[i];

		if (obuf.x + v->tt_truncated_width > win->w)
			break;
		print_horizontal_tab_title(v, i);
	}
	set_builtin_color(BC_TABBAR);
	if (i != win->views.count) {
		while (obuf.x < obuf.width - 1)
			buf_put_char(' ');
		if (obuf.x == obuf.width - 1)
			buf_put_char('>');
	} else {
		buf_clear_eol();
	}
}
예제 #4
0
파일: screen.c 프로젝트: huynhrene/dex
void print_message(const char *msg, bool is_error)
{
    enum builtin_color c = BC_COMMANDLINE;
    long i = 0;

    if (msg[0])
        c = is_error ? BC_ERRORMSG : BC_INFOMSG;
    set_builtin_color(c);
    while (msg[i]) {
        unsigned int u = u_get_char(msg, i + 4, &i);
        if (!buf_put_char(u))
            break;
    }
}