summaryrefslogtreecommitdiffstats
path: root/server-fn.c
diff options
context:
space:
mode:
authorNicholas Marriott <nicm@openbsd.org>2011-09-05 23:40:51 +0000
committerNicholas Marriott <nicm@openbsd.org>2011-09-05 23:40:51 +0000
commit5985143813e331215ba08742e62476f76e48f554 (patch)
tree290a2dbf80b6735997ed93df67a7d7039c2d61f4 /server-fn.c
parent9800eaa63fc4f593d5781ef202c2ace8f2ab7a0b (diff)
Mark dead panes with some text saying they are dead, suggested by and
with help from Randy Stauner.
Diffstat (limited to 'server-fn.c')
-rw-r--r--server-fn.c20
1 files changed, 18 insertions, 2 deletions
diff --git a/server-fn.c b/server-fn.c
index 002d56ac..e697af77 100644
--- a/server-fn.c
+++ b/server-fn.c
@@ -329,16 +329,32 @@ server_unlink_window(struct session *s, struct winlink *wl)
void
server_destroy_pane(struct window_pane *wp)
{
- struct window *w = wp->window;
+ struct window *w = wp->window;
+ int old_fd;
+ struct screen_write_ctx ctx;
+ struct grid_cell gc;
+ old_fd = wp->fd;
if (wp->fd != -1) {
close(wp->fd);
bufferevent_free(wp->event);
wp->fd = -1;
}
- if (options_get_number(&w->options, "remain-on-exit"))
+ if (options_get_number(&w->options, "remain-on-exit")) {
+ if (old_fd == -1)
+ return;
+ screen_write_start(&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);
+ screen_write_linefeed(&ctx, 1);
+ memcpy(&gc, &grid_default_cell, sizeof gc);
+ gc.attr |= GRID_ATTR_BRIGHT;
+ screen_write_puts(&ctx, &gc, "Pane is dead");
+ screen_write_stop(&ctx);
+ wp->flags |= PANE_REDRAW;
return;
+ }
layout_close_pane(wp);
window_remove_pane(w, wp);