mirror of
https://github.com/tmux/tmux.git
synced 2024-12-12 17:38:48 +00:00
Show exit status and time in the remain-on-exit pane text, mostly from
Timo Boettcher in GitHub issue 1103.
This commit is contained in:
parent
eb9839fd32
commit
a5fd5782f8
11
format.c
11
format.c
@ -1376,8 +1376,8 @@ void
|
||||
format_defaults_pane(struct format_tree *ft, struct window_pane *wp)
|
||||
{
|
||||
struct grid *gd = wp->base.grid;
|
||||
int status = wp->status;
|
||||
u_int idx;
|
||||
int status;
|
||||
|
||||
if (ft->w == NULL)
|
||||
ft->w = wp->window;
|
||||
@ -1399,8 +1399,7 @@ format_defaults_pane(struct format_tree *ft, struct window_pane *wp)
|
||||
format_add(ft, "pane_input_off", "%d", !!(wp->flags & PANE_INPUTOFF));
|
||||
format_add(ft, "pane_pipe", "%d", wp->pipe_fd != -1);
|
||||
|
||||
status = wp->status;
|
||||
if (wp->fd == -1 && WIFEXITED(status))
|
||||
if ((wp->flags & PANE_STATUSREADY) && WIFEXITED(status))
|
||||
format_add(ft, "pane_dead_status", "%d", WEXITSTATUS(status));
|
||||
format_add(ft, "pane_dead", "%d", wp->fd == -1);
|
||||
|
||||
@ -1411,8 +1410,10 @@ format_defaults_pane(struct format_tree *ft, struct window_pane *wp)
|
||||
format_add(ft, "pane_bottom", "%u", wp->yoff + wp->sy - 1);
|
||||
format_add(ft, "pane_at_left", "%d", wp->xoff == 0);
|
||||
format_add(ft, "pane_at_top", "%d", wp->yoff == 0);
|
||||
format_add(ft, "pane_at_right", "%d", wp->xoff + wp->sx == wp->window->sx);
|
||||
format_add(ft, "pane_at_bottom", "%d", wp->yoff + wp->sy == wp->window->sy);
|
||||
format_add(ft, "pane_at_right", "%d",
|
||||
wp->xoff + wp->sx == wp->window->sx);
|
||||
format_add(ft, "pane_at_bottom", "%d",
|
||||
wp->yoff + wp->sy == wp->window->sy);
|
||||
}
|
||||
|
||||
format_add(ft, "pane_in_mode", "%d", wp->screen != &wp->base);
|
||||
|
30
server-fn.c
30
server-fn.c
@ -18,6 +18,7 @@
|
||||
|
||||
#include <sys/types.h>
|
||||
#include <sys/queue.h>
|
||||
#include <sys/wait.h>
|
||||
#include <sys/uio.h>
|
||||
|
||||
#include <imsg.h>
|
||||
@ -278,11 +279,11 @@ void
|
||||
server_destroy_pane(struct window_pane *wp, int notify)
|
||||
{
|
||||
struct window *w = wp->window;
|
||||
int old_fd;
|
||||
struct screen_write_ctx ctx;
|
||||
struct grid_cell gc;
|
||||
time_t t;
|
||||
char tim[26];
|
||||
|
||||
old_fd = wp->fd;
|
||||
if (wp->fd != -1) {
|
||||
bufferevent_free(wp->event);
|
||||
close(wp->fd);
|
||||
@ -290,9 +291,13 @@ server_destroy_pane(struct window_pane *wp, int notify)
|
||||
}
|
||||
|
||||
if (options_get_number(w->options, "remain-on-exit")) {
|
||||
if (old_fd == -1)
|
||||
if (~wp->flags & PANE_STATUSREADY)
|
||||
return;
|
||||
|
||||
if (wp->flags & PANE_STATUSDRAWN)
|
||||
return;
|
||||
wp->flags |= PANE_STATUSDRAWN;
|
||||
|
||||
if (notify)
|
||||
notify_pane("pane-died", wp);
|
||||
|
||||
@ -301,11 +306,24 @@ server_destroy_pane(struct window_pane *wp, int notify)
|
||||
screen_write_cursormove(&ctx, 0, screen_size_y(ctx.s) - 1);
|
||||
screen_write_linefeed(&ctx, 1, 8);
|
||||
memcpy(&gc, &grid_default_cell, sizeof gc);
|
||||
gc.attr |= GRID_ATTR_BRIGHT;
|
||||
screen_write_puts(&ctx, &gc, "Pane is dead");
|
||||
|
||||
time(&t);
|
||||
ctime_r(&t, tim);
|
||||
|
||||
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 %d, %s)",
|
||||
WTERMSIG(wp->status),
|
||||
tim);
|
||||
}
|
||||
|
||||
screen_write_stop(&ctx);
|
||||
wp->flags |= PANE_REDRAW;
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
|
1
server.c
1
server.c
@ -424,6 +424,7 @@ server_child_exited(pid_t pid, int status)
|
||||
TAILQ_FOREACH(wp, &w->panes, entry) {
|
||||
if (wp->pid == pid) {
|
||||
wp->status = status;
|
||||
wp->flags |= PANE_STATUSREADY;
|
||||
|
||||
log_debug("%%%u exited", wp->id);
|
||||
wp->flags |= PANE_EXITED;
|
||||
|
2
tmux.h
2
tmux.h
@ -778,6 +778,8 @@ struct window_pane {
|
||||
#define PANE_INPUTOFF 0x40
|
||||
#define PANE_CHANGED 0x80
|
||||
#define PANE_EXITED 0x100
|
||||
#define PANE_STATUSREADY 0x200
|
||||
#define PANE_STATUSDRAWN 0x400
|
||||
|
||||
int argc;
|
||||
char **argv;
|
||||
|
Loading…
Reference in New Issue
Block a user