mirror of
https://github.com/tmux/tmux.git
synced 2024-10-31 22:58:49 +00:00
Add two new values for the destroy-unattached option to destroy sessions
only if they are not members of sessions groups, from Mark Huang, GitHub issue 3806.
This commit is contained in:
parent
4bdb855020
commit
40b97b1715
@ -85,6 +85,9 @@ static const char *options_table_window_size_list[] = {
|
|||||||
static const char *options_table_remain_on_exit_list[] = {
|
static const char *options_table_remain_on_exit_list[] = {
|
||||||
"off", "on", "failed", NULL
|
"off", "on", "failed", NULL
|
||||||
};
|
};
|
||||||
|
static const char *options_table_destroy_unattached_list[] = {
|
||||||
|
"off", "on", "keep-last", "keep-group", NULL
|
||||||
|
};
|
||||||
static const char *options_table_detach_on_destroy_list[] = {
|
static const char *options_table_detach_on_destroy_list[] = {
|
||||||
"off", "on", "no-detached", "previous", "next", NULL
|
"off", "on", "no-detached", "previous", "next", NULL
|
||||||
};
|
};
|
||||||
@ -484,11 +487,12 @@ const struct options_table_entry options_table[] = {
|
|||||||
},
|
},
|
||||||
|
|
||||||
{ .name = "destroy-unattached",
|
{ .name = "destroy-unattached",
|
||||||
.type = OPTIONS_TABLE_FLAG,
|
.type = OPTIONS_TABLE_CHOICE,
|
||||||
.scope = OPTIONS_TABLE_SESSION,
|
.scope = OPTIONS_TABLE_SESSION,
|
||||||
|
.choices = options_table_destroy_unattached_list,
|
||||||
.default_num = 0,
|
.default_num = 0,
|
||||||
.text = "Whether to destroy sessions when they have no attached "
|
.text = "Whether to destroy sessions when they have no attached "
|
||||||
"clients."
|
"clients, or keep the last session whether in the group."
|
||||||
},
|
},
|
||||||
|
|
||||||
{ .name = "detach-on-destroy",
|
{ .name = "detach-on-destroy",
|
||||||
|
2
proc.c
2
proc.c
@ -92,7 +92,7 @@ proc_event_cb(__unused int fd, short events, void *arg)
|
|||||||
log_debug("peer %p message %d", peer, imsg.hdr.type);
|
log_debug("peer %p message %d", peer, imsg.hdr.type);
|
||||||
|
|
||||||
if (peer_check_version(peer, &imsg) != 0) {
|
if (peer_check_version(peer, &imsg) != 0) {
|
||||||
int fd = imsg_get_fd(&imsg);
|
fd = imsg_get_fd(&imsg);
|
||||||
if (fd != -1)
|
if (fd != -1)
|
||||||
close(fd);
|
close(fd);
|
||||||
imsg_free(&imsg);
|
imsg_free(&imsg);
|
||||||
|
22
server-fn.c
22
server-fn.c
@ -454,7 +454,8 @@ server_destroy_session(struct session *s)
|
|||||||
void
|
void
|
||||||
server_check_unattached(void)
|
server_check_unattached(void)
|
||||||
{
|
{
|
||||||
struct session *s;
|
struct session *s;
|
||||||
|
struct session_group *sg;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* If any sessions are no longer attached and have destroy-unattached
|
* If any sessions are no longer attached and have destroy-unattached
|
||||||
@ -463,8 +464,23 @@ server_check_unattached(void)
|
|||||||
RB_FOREACH(s, sessions, &sessions) {
|
RB_FOREACH(s, sessions, &sessions) {
|
||||||
if (s->attached != 0)
|
if (s->attached != 0)
|
||||||
continue;
|
continue;
|
||||||
if (options_get_number (s->options, "destroy-unattached"))
|
switch (options_get_number(s->options, "destroy-unattached")) {
|
||||||
session_destroy(s, 1, __func__);
|
case 0: /* off */
|
||||||
|
continue;
|
||||||
|
case 1: /* on */
|
||||||
|
break;
|
||||||
|
case 2: /* keep-last */
|
||||||
|
sg = session_group_contains(s);
|
||||||
|
if (sg == NULL || session_group_count(sg) <= 1)
|
||||||
|
continue;
|
||||||
|
break;
|
||||||
|
case 3: /* keep-group */
|
||||||
|
sg = session_group_contains(s);
|
||||||
|
if (sg != NULL && session_group_count(sg) == 1)
|
||||||
|
continue;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
session_destroy(s, 1, __func__);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
16
tmux.1
16
tmux.1
@ -4023,10 +4023,20 @@ The value is the width and height separated by an
|
|||||||
character.
|
character.
|
||||||
The default is 80x24.
|
The default is 80x24.
|
||||||
.It Xo Ic destroy-unattached
|
.It Xo Ic destroy-unattached
|
||||||
.Op Ic on | off
|
.Op Ic off | on | keep-last | keep-group
|
||||||
.Xc
|
.Xc
|
||||||
If enabled and the session is no longer attached to any clients, it is
|
If
|
||||||
destroyed.
|
.Ic on ,
|
||||||
|
destroy the session after the last client has detached.
|
||||||
|
If
|
||||||
|
.Ic off
|
||||||
|
(the default), leave the session orphaned.
|
||||||
|
If
|
||||||
|
.Ic keep-last ,
|
||||||
|
destroy the session only if it is in a group and has other sessions in that group.
|
||||||
|
If
|
||||||
|
.Ic keep-group ,
|
||||||
|
destroy the session unless it is in a group and is the only session in that group.
|
||||||
.It Xo Ic detach-on-destroy
|
.It Xo Ic detach-on-destroy
|
||||||
.Op Ic off | on | no-detached | previous | next
|
.Op Ic off | on | no-detached | previous | next
|
||||||
.Xc
|
.Xc
|
||||||
|
Loading…
Reference in New Issue
Block a user