static void ui_window_draw_status(UiWin *w) { UiCursesWin *win = (UiCursesWin*)w; if (!win->winstatus) return; UiCurses *uic = win->ui; Vis *vis = uic->vis; bool focused = uic->selwin == win; const char *filename = vis_file_name(win->file); const char *status = vis_mode_status(vis); wattrset(win->winstatus, focused ? A_REVERSE|A_BOLD : A_REVERSE); mvwhline(win->winstatus, 0, 0, ' ', win->width); mvwprintw(win->winstatus, 0, 0, "%s %s %s %s", focused && status ? status : "", filename ? filename : "[No Name]", text_modified(vis_file_text(win->file)) ? "[+]" : "", vis_macro_recording(vis) ? "recording": ""); char buf[4*32] = "", *msg = buf; int cursor_count = view_cursors_count(win->view); if (cursor_count > 1) { Cursor *c = view_cursors_primary_get(win->view); int cursor_number = view_cursors_number(c) + 1; msg += sprintf(msg, "[%d/%d] ", cursor_number, cursor_count); } if (!(win->options & UI_OPTION_LARGE_FILE)) { CursorPos pos = view_cursor_getpos(win->view); msg += sprintf(msg, "%zd, %zd", pos.line, pos.col); } if (buf[0]) mvwaddstr(win->winstatus, 0, win->width - (msg - buf) - 1, buf); }
static const char *cursors_clear(Vis *vis, const char *keys, const Arg *arg) { View *view = vis_view(vis); if (view_cursors_count(view) > 1) view_cursors_clear(view); else view_cursors_selection_clear(view_cursor(view)); return keys; }
static const char *redo(Vis *vis, const char *keys, const Arg *arg) { size_t pos = text_redo(vis_text(vis)); if (pos != EPOS) { View *view = vis_view(vis); if (view_cursors_count(view) == 1) view_cursor_to(view, pos); /* redraw all windows in case some display the same file */ vis_draw(vis); } return keys; }