mirror of https://github.com/tmux/tmux.git
Merge branch 'obsd-master' into master
commit
5a2db4c7e8
|
@ -68,6 +68,9 @@ static const char *options_table_set_clipboard_list[] = {
|
||||||
static const char *options_table_window_size_list[] = {
|
static const char *options_table_window_size_list[] = {
|
||||||
"largest", "smallest", "manual", "latest", NULL
|
"largest", "smallest", "manual", "latest", NULL
|
||||||
};
|
};
|
||||||
|
static const char *options_table_remain_on_exit_list[] = {
|
||||||
|
"off", "on", "failed", NULL
|
||||||
|
};
|
||||||
|
|
||||||
/* Status line format. */
|
/* Status line format. */
|
||||||
#define OPTIONS_TABLE_STATUS_FORMAT1 \
|
#define OPTIONS_TABLE_STATUS_FORMAT1 \
|
||||||
|
@ -948,11 +951,12 @@ const struct options_table_entry options_table[] = {
|
||||||
},
|
},
|
||||||
|
|
||||||
{ .name = "remain-on-exit",
|
{ .name = "remain-on-exit",
|
||||||
.type = OPTIONS_TABLE_FLAG,
|
.type = OPTIONS_TABLE_CHOICE,
|
||||||
.scope = OPTIONS_TABLE_WINDOW|OPTIONS_TABLE_PANE,
|
.scope = OPTIONS_TABLE_WINDOW|OPTIONS_TABLE_PANE,
|
||||||
|
.choices = options_table_remain_on_exit_list,
|
||||||
.default_num = 0,
|
.default_num = 0,
|
||||||
.text = "Whether panes should remain ('on') or be automatically "
|
.text = "Whether panes should remain ('on') or be automatically "
|
||||||
"killed ('off') when the program inside exits."
|
"killed ('off' or 'failed') when the program inside exits."
|
||||||
},
|
},
|
||||||
|
|
||||||
{ .name = "synchronize-panes",
|
{ .name = "synchronize-panes",
|
||||||
|
|
16
server-fn.c
16
server-fn.c
|
@ -312,6 +312,7 @@ server_destroy_pane(struct window_pane *wp, int notify)
|
||||||
struct grid_cell gc;
|
struct grid_cell gc;
|
||||||
time_t t;
|
time_t t;
|
||||||
char tim[26];
|
char tim[26];
|
||||||
|
int remain_on_exit;
|
||||||
|
|
||||||
if (wp->fd != -1) {
|
if (wp->fd != -1) {
|
||||||
#ifdef HAVE_UTEMPTER
|
#ifdef HAVE_UTEMPTER
|
||||||
|
@ -323,10 +324,17 @@ server_destroy_pane(struct window_pane *wp, int notify)
|
||||||
wp->fd = -1;
|
wp->fd = -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (options_get_number(wp->options, "remain-on-exit")) {
|
remain_on_exit = options_get_number(wp->options, "remain-on-exit");
|
||||||
if (~wp->flags & PANE_STATUSREADY)
|
if (remain_on_exit != 0 && (~wp->flags & PANE_STATUSREADY))
|
||||||
return;
|
return;
|
||||||
|
switch (remain_on_exit) {
|
||||||
|
case 0:
|
||||||
|
break;
|
||||||
|
case 2:
|
||||||
|
if (WIFEXITED(wp->status) && WEXITSTATUS(wp->status) == 0)
|
||||||
|
break;
|
||||||
|
/* FALLTHROUGH */
|
||||||
|
case 1:
|
||||||
if (wp->flags & PANE_STATUSDRAWN)
|
if (wp->flags & PANE_STATUSDRAWN)
|
||||||
return;
|
return;
|
||||||
wp->flags |= PANE_STATUSDRAWN;
|
wp->flags |= PANE_STATUSDRAWN;
|
||||||
|
|
5
tmux.1
5
tmux.1
|
@ -4181,10 +4181,13 @@ interactive application starts and restores it on exit, so that any output
|
||||||
visible before the application starts reappears unchanged after it exits.
|
visible before the application starts reappears unchanged after it exits.
|
||||||
.Pp
|
.Pp
|
||||||
.It Xo Ic remain-on-exit
|
.It Xo Ic remain-on-exit
|
||||||
.Op Ic on | off
|
.Op Ic on | off | failed
|
||||||
.Xc
|
.Xc
|
||||||
A pane with this flag set is not destroyed when the program running in it
|
A pane with this flag set is not destroyed when the program running in it
|
||||||
exits.
|
exits.
|
||||||
|
If set to
|
||||||
|
.Ic failed ,
|
||||||
|
then only when the program exit status is not zero.
|
||||||
The pane may be reactivated with the
|
The pane may be reactivated with the
|
||||||
.Ic respawn-pane
|
.Ic respawn-pane
|
||||||
command.
|
command.
|
||||||
|
|
Loading…
Reference in New Issue