Esempio n. 1
0
static void print_vertical_tabbar(struct window *win)
{
	int width = vertical_tabbar_width(win);
	int h = win->edit_h;
	int i, n, cur_idx = 0;

	for (i = 0; i < win->views.count; i++) {
		if (win->view == win->views.ptrs[i]) {
			cur_idx = i;
			break;
		}
	}
	if (win->views.count <= h) {
		// all tabs fit
		win->first_tab_idx = 0;
	} else {
		int max_y = win->first_tab_idx + h - 1;

		if (win->first_tab_idx > cur_idx)
			win->first_tab_idx = cur_idx;
		if (cur_idx > max_y)
			win->first_tab_idx += cur_idx - max_y;
	}

	buf_reset(win->x, width, 0);
	n = h;
	if (n + win->first_tab_idx > win->views.count)
		n = win->views.count - win->first_tab_idx;
	for (i = 0; i < n; i++) {
		int idx = win->first_tab_idx + i;
		obuf.x = 0;
		buf_move_cursor(win->x, win->y + i);
		print_vertical_tab_title(win->views.ptrs[idx], idx, width);
	}
	set_builtin_color(BC_TABBAR);
	for (; i < h; i++) {
		obuf.x = 0;
		buf_move_cursor(win->x, win->y + i);
		buf_clear_eol();
	}
}
Esempio n. 2
0
void update_line_numbers(struct window *win, bool force)
{
    struct view *v = win->view;
    long lines = v->buffer->nl;
    int i, first, last;
    int x = win->x + vertical_tabbar_width(win);

    calculate_line_numbers(win);

    first = v->vy + 1;
    last = v->vy + win->edit_h;
    if (last > lines)
        last = lines;

    if (!force && win->line_numbers.first == first && win->line_numbers.last == last)
        return;

    win->line_numbers.first = first;
    win->line_numbers.last = last;

    buf_reset(win->x, win->w, 0);
    set_builtin_color(BC_LINENUMBER);
    for (i = 0; i < win->edit_h; i++) {
        int line = v->vy + i + 1;
        int w = win->line_numbers.width - 1;
        char buf[32];

        if (line > lines) {
            snprintf(buf, sizeof(buf), "%*s ", w, "");
        } else {
            snprintf(buf, sizeof(buf), "%*d ", w, line);
        }
        buf_move_cursor(x, win->edit_y + i);
        buf_add_bytes(buf, win->line_numbers.width);
    }
}