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; }
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(' '); }
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(); } }
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; } }