aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMarc André Tanner <mat@brain-dump.org>2016-02-07 16:06:31 +0100
committerMarc André Tanner <mat@brain-dump.org>2016-02-07 23:14:30 +0100
commita9128846c27307bae1a8154c8bfe8c71acd2c88e (patch)
tree239ee9cba0eaf5f3329748d78987e7cbfb4c21da
parent0ca5c66a71aa6ed9b2cfc621c26d4fc4ff47ec93 (diff)
downloadvis-a9128846c27307bae1a8154c8bfe8c71acd2c88e.tar.gz
vis-a9128846c27307bae1a8154c8bfe8c71acd2c88e.tar.xz
vis: export vis_window_closable
-rw-r--r--vis-cmds.c10
-rw-r--r--vis.c10
-rw-r--r--vis.h3
3 files changed, 15 insertions, 8 deletions
diff --git a/vis-cmds.c b/vis-cmds.c
index 3ca7f7b..79d292a 100644
--- a/vis-cmds.c
+++ b/vis-cmds.c
@@ -429,19 +429,13 @@ static bool cmd_open(Vis *vis, Filerange *range, enum CmdOpt opt, const char *ar
return openfiles(vis, &argv[1]);
}
-static bool is_view_closeable(Win *win) {
- if (!text_modified(win->file->text))
- return true;
- return win->file->refcount > 1;
-}
-
static void info_unsaved_changes(Vis *vis) {
vis_info_show(vis, "No write since last change (add ! to override)");
}
static bool cmd_edit(Vis *vis, Filerange *range, enum CmdOpt opt, const char *argv[]) {
Win *oldwin = vis->win;
- if (!(opt & CMD_OPT_FORCE) && !is_view_closeable(oldwin)) {
+ if (!(opt & CMD_OPT_FORCE) && !vis_window_closable(oldwin)) {
info_unsaved_changes(vis);
return false;
}
@@ -463,7 +457,7 @@ static bool has_windows(Vis *vis) {
}
static bool cmd_quit(Vis *vis, Filerange *range, enum CmdOpt opt, const char *argv[]) {
- if (!(opt & CMD_OPT_FORCE) && !is_view_closeable(vis->win)) {
+ if (!(opt & CMD_OPT_FORCE) && !vis_window_closable(vis->win)) {
info_unsaved_changes(vis);
return false;
}
diff --git a/vis.c b/vis.c
index b65724c..42bc0a0 100644
--- a/vis.c
+++ b/vis.c
@@ -284,6 +284,12 @@ bool vis_window_new(Vis *vis, const char *filename) {
return true;
}
+bool vis_window_closable(Win *win) {
+ if (!text_modified(win->file->text))
+ return true;
+ return win->file->refcount > 1;
+}
+
void vis_window_close(Win *win) {
Vis *vis = win->vis;
if (vis->event && vis->event->win_close)
@@ -1090,6 +1096,10 @@ View *vis_view(Vis *vis) {
return vis->win->view;
}
+Win *vis_window(Vis *vis) {
+ return vis->win;
+}
+
Text *vis_file_text(File *file) {
return file->text;
}
diff --git a/vis.h b/vis.h
index 3bcd9c7..eb84695 100644
--- a/vis.h
+++ b/vis.h
@@ -67,6 +67,8 @@ void vis_suspend(Vis*);
bool vis_window_new(Vis*, const char *filename);
/* reload the file currently displayed in the window from disk */
bool vis_window_reload(Win*);
+/* check whether closing the window would loose unsaved changes */
+bool vis_window_closable(Win*);
/* close window, redraw user interface */
void vis_window_close(Win*);
/* split the given window. changes to the displayed text will be reflected
@@ -405,6 +407,7 @@ bool vis_signal_handler(Vis*, int signum, const siginfo_t *siginfo, const void *
/* TODO: expose proper API to iterate through files etc */
Text *vis_text(Vis*);
View *vis_view(Vis*);
+Win *vis_window(Vis*);
Text *vis_file_text(File*);
const char *vis_file_name(File*);