Change the existing client flags for control mode to apply for any client, use

the same mechanism for the read-only flag and add an ignore-size flag.

refresh-client -F has become -f (-F stays for backwards compatibility) and
attach-session and switch-client now have -f flags also. A new format
"client_flags" lists the flags and is shown by list-clients by default.

This separates the read-only flag from "ignore size" behaviour (new
ignore-size) flag - both behaviours are useful in different circumstances.

attach -r and switchc -r remain and set or toggle both flags together.
This commit is contained in:
Nicholas Marriott
2020-05-05 15:42:20 +01:00
parent deacfedc65
commit 2f89d2e7d8
10 changed files with 136 additions and 50 deletions

View File

@ -2255,3 +2255,61 @@ server_client_get_cwd(struct client *c, struct session *s)
return (home);
return ("/");
}
/* Set client flags. */
void
server_client_set_flags(struct client *c, const char *flags)
{
char *s, *copy, *next;
int flag, not;
s = copy = xstrdup (flags);
while ((next = strsep(&s, ",")) != NULL) {
not = (*next == '!');
if (not)
next++;
if (strcmp(next, "no-output") == 0)
flag = CLIENT_CONTROL_NOOUTPUT;
else if (strcmp(next, "read-only") == 0)
flag = CLIENT_READONLY;
else if (strcmp(next, "ignore-size") == 0)
flag = CLIENT_IGNORESIZE;
else
continue;
log_debug("client %s set flag %s", c->name, next);
if (not)
c->flags &= ~flag;
else
c->flags |= flag;
}
free(copy);
}
/*Get client flags. This is only flags useful to show to users. */
const char *
server_client_get_flags(struct client *c)
{
static char s[256];
*s = '\0';
if (c->flags & CLIENT_ATTACHED)
strlcat(s, "attached,", sizeof s);
if (c->flags & CLIENT_CONTROL)
strlcat(s, "control-mode,", sizeof s);
if (c->flags & CLIENT_IGNORESIZE)
strlcat(s, "ignore-size,", sizeof s);
if (c->flags & CLIENT_CONTROL_NOOUTPUT)
strlcat(s, "no-output,", sizeof s);
if (c->flags & CLIENT_READONLY)
strlcat(s, "read-only,", sizeof s);
if (c->flags & CLIENT_SUSPENDED)
strlcat(s, "suspended,", sizeof s);
if (c->flags & CLIENT_UTF8)
strlcat(s, "UTF-8,", sizeof s);
if (*s != '\0')
s[strlen(s) - 1] = '\0';
return (s);
}