aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMarc André Tanner <mat@brain-dump.org>2016-05-21 22:29:28 +0200
committerMarc André Tanner <mat@brain-dump.org>2016-05-22 00:05:31 +0200
commitd974dedbfd80e051fc26f9a42ea4f5059823bb86 (patch)
treea04ac4d30c6acf700c47dca957762b584ed5d0ff
parentbff2afbf1dc4b302f600e56d46cb413f1c31be3c (diff)
downloadvis-d974dedbfd80e051fc26f9a42ea4f5059823bb86.tar.gz
vis-d974dedbfd80e051fc26f9a42ea4f5059823bb86.tar.xz
vis: add function to change window statusbar content
-rw-r--r--ui-curses.c13
-rw-r--r--ui.h1
-rw-r--r--vis.c4
-rw-r--r--vis.h2
4 files changed, 20 insertions, 0 deletions
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*);