vis
a vi-like editor based on Plan 9's structural regular expressions
git clone https://9o.is/git/vis.git
commit 813408fe201fed07e9eb9ab33c83375bab4f0e2d parent 15cd15c7b311de3f2fabd5deee13b4557cf0a9f7 Author: Marc André Tanner <mat@brain-dump.org> Date: Sun, 7 Feb 2016 16:06:31 +0100 vis: export vis_window_closable Diffstat:
| M | vis-cmds.c | | | 10 | ++-------- |
| M | vis.c | | | 10 | ++++++++++ |
| M | vis.h | | | 3 | +++ |
3 files changed, 15 insertions(+), 8 deletions(-)
diff --git 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 @@ -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 @@ -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*);