From d974dedbfd80e051fc26f9a42ea4f5059823bb86 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marc=20Andr=C3=A9=20Tanner?= Date: Sat, 21 May 2016 22:29:28 +0200 Subject: vis: add function to change window statusbar content --- ui-curses.c | 13 +++++++++++++ ui.h | 1 + vis.c | 4 ++++ vis.h | 2 ++ 4 files changed, 20 insertions(+) diff --git a/ui-curses.c b/ui-curses.c index f2f215a..ce4ef03 100644 --- a/ui-curses.c +++ b/ui-curses.c @@ -669,6 +669,18 @@ static void ui_window_draw_status(UiWin *w) { mvwaddstr(win->winstatus, 0, win->width - (msg - buf) - 1, buf); } +static void ui_window_status(UiWin *w, const char *status) { + UiCursesWin *win = (UiCursesWin*)w; + if (!win->winstatus) + return; + UiCurses *uic = win->ui; + bool focused = uic->selwin == win; + wattrset(win->winstatus, focused ? A_REVERSE|A_BOLD : A_REVERSE); + mvwhline(win->winstatus, 0, 0, ' ', win->width); + if (status) + mvwprintw(win->winstatus, 0, 0, "%s", status); +} + static void ui_window_draw(UiWin *w) { UiCursesWin *win = (UiCursesWin*)w; if (!ui_window_draw_sidebar(win)) @@ -985,6 +997,7 @@ static UiWin *ui_window_new(Ui *ui, View *view, File *file, enum UiOption option win->uiwin = (UiWin) { .draw = ui_window_draw, .draw_status = ui_window_draw_status, + .status = ui_window_status, .options_set = ui_window_options_set, .options_get = ui_window_options_get, .reload = ui_window_reload, diff --git a/ui.h b/ui.h index 03857e4..bd48459 100644 --- a/ui.h +++ b/ui.h @@ -76,6 +76,7 @@ struct Ui { struct UiWin { void (*draw)(UiWin*); void (*draw_status)(UiWin*); + void (*status)(UiWin*, const char *txt); void (*reload)(UiWin*, File*); void (*options_set)(UiWin*, enum UiOption); enum UiOption (*options_get)(UiWin*); diff --git a/vis.c b/vis.c index 6b5d458..3fabe5b 100644 --- a/vis.c +++ b/vis.c @@ -116,6 +116,10 @@ void vis_window_name(Win *win, const char *filename) { } } +void vis_window_status(Win *win, const char *status) { + win->ui->status(win->ui, status); +} + static void windows_invalidate(Vis *vis, size_t start, size_t end) { for (Win *win = vis->windows; win; win = win->next) { if (vis->win != win && vis->win->file == win->file) { diff --git a/vis.h b/vis.h index 66e42e8..7dde13f 100644 --- a/vis.h +++ b/vis.h @@ -93,6 +93,8 @@ void vis_window_close(Win*); bool vis_window_split(Win*); /* change file name associated with this window, affects syntax coloring */ void vis_window_name(Win*, const char *filename); +/* change status message of this window */ +void vis_window_status(Win*, const char *status); /* focus the next / previous window */ void vis_window_next(Vis*); void vis_window_prev(Vis*); -- cgit v1.2.3