aboutsummaryrefslogtreecommitdiff
path: root/server-fn.c
diff options
context:
space:
mode:
authornicm <nicm>2022-03-08 18:31:46 +0000
committernicm <nicm>2022-03-08 18:31:46 +0000
commita3d920930bf77cafa5260e25584dd3ba1d26f9cb (patch)
tree8b8515e1a02da155fb1c6d7acd506747efb7de58 /server-fn.c
parentad9b8059836d424f70a8579d28e28e0186cdbaa6 (diff)
downloadrtmux-a3d920930bf77cafa5260e25584dd3ba1d26f9cb.tar.gz
rtmux-a3d920930bf77cafa5260e25584dd3ba1d26f9cb.tar.bz2
rtmux-a3d920930bf77cafa5260e25584dd3ba1d26f9cb.zip
Add remain-on-exit-format to set text shown when pane is dead.
Diffstat (limited to 'server-fn.c')
-rw-r--r--server-fn.c42
1 files changed, 19 insertions, 23 deletions
diff --git a/server-fn.c b/server-fn.c
index b29bc15c..2e9665f5 100644
--- a/server-fn.c
+++ b/server-fn.c
@@ -312,9 +312,11 @@ server_destroy_pane(struct window_pane *wp, int notify)
struct window *w = wp->window;
struct screen_write_ctx ctx;
struct grid_cell gc;
- time_t t;
- char tim[26];
int remain_on_exit;
+ const char *s;
+ char *expanded;
+ u_int sx = screen_size_x(&wp->base);
+ u_int sy = screen_size_y(&wp->base);
if (wp->fd != -1) {
bufferevent_free(wp->event);
@@ -338,32 +340,26 @@ server_destroy_pane(struct window_pane *wp, int notify)
return;
wp->flags |= PANE_STATUSDRAWN;
+ gettimeofday(&wp->dead_time, NULL);
if (notify)
notify_pane("pane-died", wp);
- screen_write_start_pane(&ctx, wp, &wp->base);
- screen_write_scrollregion(&ctx, 0, screen_size_y(ctx.s) - 1);
- screen_write_cursormove(&ctx, 0, screen_size_y(ctx.s) - 1, 0);
- screen_write_linefeed(&ctx, 1, 8);
- memcpy(&gc, &grid_default_cell, sizeof gc);
-
- time(&t);
- ctime_r(&t, tim);
- tim[strcspn(tim, "\n")] = '\0';
-
- if (WIFEXITED(wp->status)) {
- screen_write_nputs(&ctx, -1, &gc,
- "Pane is dead (status %d, %s)",
- WEXITSTATUS(wp->status),
- tim);
- } else if (WIFSIGNALED(wp->status)) {
- screen_write_nputs(&ctx, -1, &gc,
- "Pane is dead (signal %s, %s)",
- sig2name(WTERMSIG(wp->status)),
- tim);
+ s = options_get_string(wp->options, "remain-on-exit-format");
+ if (*s != '\0') {
+ screen_write_start_pane(&ctx, wp, &wp->base);
+ screen_write_scrollregion(&ctx, 0, sy - 1);
+ screen_write_cursormove(&ctx, 0, sy - 1, 0);
+ screen_write_linefeed(&ctx, 1, 8);
+ memcpy(&gc, &grid_default_cell, sizeof gc);
+
+ expanded = format_single(NULL, s, NULL, NULL, NULL, wp);
+ format_draw(&ctx, &gc, sx, expanded, NULL, 0);
+ free(expanded);
+
+ screen_write_stop(&ctx);
}
+ wp->base.mode &= ~MODE_CURSOR;
- screen_write_stop(&ctx);
wp->flags |= PANE_REDRAW;
return;
}