diff options
author | Tiago Cunha <tcunha@gmx.com> | 2011-09-21 16:35:13 +0000 |
---|---|---|
committer | Tiago Cunha <tcunha@gmx.com> | 2011-09-21 16:35:13 +0000 |
commit | 6e0c097d9fb7b7ee157cef0a340520e34256e104 (patch) | |
tree | 6da1a2a531a37e56178a60f7a7ab5607f0fd7915 /server-fn.c | |
parent | d9807eeba14bf35b99ed73c75a6303817729fa58 (diff) | |
download | rtmux-6e0c097d9fb7b7ee157cef0a340520e34256e104.tar.gz rtmux-6e0c097d9fb7b7ee157cef0a340520e34256e104.tar.bz2 rtmux-6e0c097d9fb7b7ee157cef0a340520e34256e104.zip |
Sync OpenBSD patchset 957:
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.c | 20 |
1 files changed, 18 insertions, 2 deletions
diff --git a/server-fn.c b/server-fn.c index 15d54772..fe4330de 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); |