Merge branch 'obsd-master'

This commit is contained in:
Thomas Adam
2026-01-07 10:01:08 +00:00
3 changed files with 29 additions and 13 deletions

View File

@@ -749,7 +749,7 @@ options_get_number(struct options *oo, const char *name)
return (o->value.number); return (o->value.number);
} }
const struct cmd_list * struct cmd_list *
options_get_command(struct options *oo, const char *name) options_get_command(struct options *oo, const char *name)
{ {
struct options_entry *o; struct options_entry *o;

View File

@@ -3443,6 +3443,24 @@ server_client_read_only(struct cmdq_item *item, __unused void *data)
return (CMD_RETURN_ERROR); return (CMD_RETURN_ERROR);
} }
/* Callback for default command. */
static enum cmd_retval
server_client_default_command(struct cmdq_item *item, __unused void *data)
{
struct client *c = cmdq_get_client(item);
struct cmd_list *cmdlist;
struct cmdq_item *new_item;
cmdlist = options_get_command(global_options, "default-client-command");
if ((c->flags & CLIENT_READONLY) &&
!cmd_list_all_have(cmdlist, CMD_READONLY))
new_item = cmdq_get_callback(server_client_read_only, NULL);
else
new_item = cmdq_get_command(cmdlist, NULL);
cmdq_insert_after(item, new_item);
return (CMD_RETURN_NORMAL);
}
/* Callback when command is done. */ /* Callback when command is done. */
static enum cmd_retval static enum cmd_retval
server_client_command_done(struct cmdq_item *item, __unused void *data) server_client_command_done(struct cmdq_item *item, __unused void *data)
@@ -3471,7 +3489,6 @@ server_client_dispatch_command(struct client *c, struct imsg *imsg)
struct cmd_parse_result *pr; struct cmd_parse_result *pr;
struct args_value *values; struct args_value *values;
struct cmdq_item *new_item; struct cmdq_item *new_item;
struct cmd_list *cmdlist;
if (c->flags & CLIENT_EXIT) if (c->flags & CLIENT_EXIT)
return (0); return (0);
@@ -3492,8 +3509,8 @@ server_client_dispatch_command(struct client *c, struct imsg *imsg)
argc = data.argc; argc = data.argc;
if (argc == 0) { if (argc == 0) {
cmdlist = cmd_list_copy(options_get_command(global_options, new_item = cmdq_get_callback(server_client_default_command,
"default-client-command"), 0, NULL); NULL);
} else { } else {
values = args_from_vector(argc, argv); values = args_from_vector(argc, argv);
pr = cmd_parse_from_arguments(values, argc, NULL); pr = cmd_parse_from_arguments(values, argc, NULL);
@@ -3507,18 +3524,17 @@ server_client_dispatch_command(struct client *c, struct imsg *imsg)
args_free_values(values, argc); args_free_values(values, argc);
free(values); free(values);
cmd_free_argv(argc, argv); cmd_free_argv(argc, argv);
cmdlist = pr->cmdlist; if ((c->flags & CLIENT_READONLY) &&
!cmd_list_all_have(pr->cmdlist, CMD_READONLY)) {
new_item = cmdq_get_callback(server_client_read_only,
NULL);
} else
new_item = cmdq_get_command(pr->cmdlist, NULL);
cmd_list_free(pr->cmdlist);
} }
if ((c->flags & CLIENT_READONLY) &&
!cmd_list_all_have(cmdlist, CMD_READONLY))
new_item = cmdq_get_callback(server_client_read_only, NULL);
else
new_item = cmdq_get_command(cmdlist, NULL);
cmdq_append(c, new_item); cmdq_append(c, new_item);
cmdq_append(c, cmdq_get_callback(server_client_command_done, NULL)); cmdq_append(c, cmdq_get_callback(server_client_command_done, NULL));
cmd_list_free(cmdlist);
return (0); return (0);
error: error:

2
tmux.h
View File

@@ -2438,7 +2438,7 @@ struct options_entry *options_match_get(struct options *, const char *, int *,
int, int *); int, int *);
const char *options_get_string(struct options *, const char *); const char *options_get_string(struct options *, const char *);
long long options_get_number(struct options *, const char *); long long options_get_number(struct options *, const char *);
const struct cmd_list *options_get_command(struct options *, const char *); struct cmd_list *options_get_command(struct options *, const char *);
struct options_entry * printflike(4, 5) options_set_string(struct options *, struct options_entry * printflike(4, 5) options_set_string(struct options *,
const char *, int, const char *, ...); const char *, int, const char *, ...);
struct options_entry *options_set_number(struct options *, const char *, struct options_entry *options_set_number(struct options *, const char *,