aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMarc André Tanner <mat@brain-dump.org>2016-04-20 19:13:48 +0200
committerMarc André Tanner <mat@brain-dump.org>2016-04-20 19:13:48 +0200
commit5c1ce884dfec4fb361ea683ec818d6b4952bc841 (patch)
tree6c77c9a86c7111178ec7e2ef61e1517fe4690612
parent754b1cec7a39723b415ee76e797e587a7b5054dc (diff)
downloadvis-5c1ce884dfec4fb361ea683ec818d6b4952bc841.tar.gz
vis-5c1ce884dfec4fb361ea683ec818d6b4952bc841.tar.xz
vis: handle termination from within win_open event gracefully
-rw-r--r--sam.c19
-rw-r--r--vis.c5
2 files changed, 12 insertions, 12 deletions
diff --git a/sam.c b/sam.c
index fd3009b..2e71239 100644
--- a/sam.c
+++ b/sam.c
@@ -768,16 +768,17 @@ enum SamError sam_cmd(Vis *vis, const char *s) {
Filerange range = text_range_empty();
sam_execute(vis, vis->win, cmd, NULL, &range);
- bool completed = true;
- for (Cursor *c = view_cursors(vis->win->view); c; c = view_cursors_next(c)) {
- Filerange sel = view_cursors_selection_get(c);
- if (text_range_valid(&sel)) {
- completed = false;
- break;
+ if (vis->win) {
+ bool completed = true;
+ for (Cursor *c = view_cursors(vis->win->view); c; c = view_cursors_next(c)) {
+ Filerange sel = view_cursors_selection_get(c);
+ if (text_range_valid(&sel)) {
+ completed = false;
+ break;
+ }
}
+ vis_mode_switch(vis, completed ? VIS_MODE_NORMAL : VIS_MODE_VISUAL);
}
-
- vis_mode_switch(vis, completed ? VIS_MODE_NORMAL : VIS_MODE_VISUAL);
command_free(cmd);
return err;
}
@@ -950,7 +951,7 @@ static bool cmd_select(Vis *vis, Win *win, Command *cmd, const char *argv[], Cur
break;
}
- if (view == vis->win->view && primary != view_cursors_primary_get(view))
+ if (vis->win && vis->win->view == view && primary != view_cursors_primary_get(view))
view_cursors_primary_set(view_cursors(view));
return ret;
}
diff --git a/vis.c b/vis.c
index 593c540..47a6c79 100644
--- a/vis.c
+++ b/vis.c
@@ -280,7 +280,6 @@ bool vis_window_new(Vis *vis, const char *filename) {
return false;
}
- vis_window_name(win, filename);
vis_draw(vis);
return true;
@@ -849,7 +848,7 @@ static void vis_args(Vis *vis, int argc, char *argv[]) {
}
}
- if (!vis->windows) {
+ if (!vis->windows && vis->running) {
if (!strcmp(argv[argc-1], "-")) {
if (!vis_window_new(vis, NULL))
vis_die(vis, "Can not create empty buffer\n");
@@ -877,6 +876,7 @@ static void vis_args(Vis *vis, int argc, char *argv[]) {
}
int vis_run(Vis *vis, int argc, char *argv[]) {
+ vis->running = true;
vis_args(vis, argc, argv);
struct timespec idle = { .tv_nsec = 0 }, *timeout = NULL;
@@ -884,7 +884,6 @@ int vis_run(Vis *vis, int argc, char *argv[]) {
sigset_t emptyset;
sigemptyset(&emptyset);
vis_draw(vis);
- vis->running = true;
vis->exit_status = EXIT_SUCCESS;
sigsetjmp(vis->sigbus_jmpbuf, 1);