mirror of
https://github.com/tmux/tmux.git
synced 2025-01-15 05:09:04 +00:00
Make shell_command a global like other stuff rather than making it an
exception and using callback argument.
This commit is contained in:
parent
d0d42dc4cb
commit
ed3cfaafb2
18
client.c
18
client.c
@ -64,7 +64,7 @@ static void client_write(int, const char *, size_t);
|
|||||||
static void client_signal(int);
|
static void client_signal(int);
|
||||||
static void client_dispatch(struct imsg *, void *);
|
static void client_dispatch(struct imsg *, void *);
|
||||||
static void client_dispatch_attached(struct imsg *);
|
static void client_dispatch_attached(struct imsg *);
|
||||||
static void client_dispatch_wait(struct imsg *, const char *);
|
static void client_dispatch_wait(struct imsg *);
|
||||||
static const char *client_exit_message(void);
|
static const char *client_exit_message(void);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -215,8 +215,7 @@ client_exit_message(void)
|
|||||||
|
|
||||||
/* Client main loop. */
|
/* Client main loop. */
|
||||||
int
|
int
|
||||||
client_main(struct event_base *base, int argc, char **argv, int flags,
|
client_main(struct event_base *base, int argc, char **argv, int flags)
|
||||||
const char *shellcmd)
|
|
||||||
{
|
{
|
||||||
struct cmd *cmd;
|
struct cmd *cmd;
|
||||||
struct cmd_list *cmdlist;
|
struct cmd_list *cmdlist;
|
||||||
@ -237,7 +236,7 @@ client_main(struct event_base *base, int argc, char **argv, int flags,
|
|||||||
|
|
||||||
/* Set up the initial command. */
|
/* Set up the initial command. */
|
||||||
cmdflags = 0;
|
cmdflags = 0;
|
||||||
if (shellcmd != NULL) {
|
if (shell_command != NULL) {
|
||||||
msg = MSG_SHELL;
|
msg = MSG_SHELL;
|
||||||
cmdflags = CMD_STARTSERVER;
|
cmdflags = CMD_STARTSERVER;
|
||||||
} else if (argc == 0) {
|
} else if (argc == 0) {
|
||||||
@ -276,8 +275,7 @@ client_main(struct event_base *base, int argc, char **argv, int flags,
|
|||||||
}
|
}
|
||||||
return (1);
|
return (1);
|
||||||
}
|
}
|
||||||
client_peer = proc_add_peer(client_proc, fd, client_dispatch,
|
client_peer = proc_add_peer(client_proc, fd, client_dispatch, NULL);
|
||||||
(void *)shellcmd);
|
|
||||||
|
|
||||||
/* Save these before pledge(). */
|
/* Save these before pledge(). */
|
||||||
if ((cwd = getcwd(path, sizeof path)) == NULL) {
|
if ((cwd = getcwd(path, sizeof path)) == NULL) {
|
||||||
@ -533,7 +531,7 @@ client_signal(int sig)
|
|||||||
|
|
||||||
/* Callback for client read events. */
|
/* Callback for client read events. */
|
||||||
static void
|
static void
|
||||||
client_dispatch(struct imsg *imsg, void *arg)
|
client_dispatch(struct imsg *imsg, __unused void *arg)
|
||||||
{
|
{
|
||||||
if (imsg == NULL) {
|
if (imsg == NULL) {
|
||||||
client_exitreason = CLIENT_EXIT_LOST_SERVER;
|
client_exitreason = CLIENT_EXIT_LOST_SERVER;
|
||||||
@ -545,12 +543,12 @@ client_dispatch(struct imsg *imsg, void *arg)
|
|||||||
if (client_attached)
|
if (client_attached)
|
||||||
client_dispatch_attached(imsg);
|
client_dispatch_attached(imsg);
|
||||||
else
|
else
|
||||||
client_dispatch_wait(imsg, arg);
|
client_dispatch_wait(imsg);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Dispatch imsgs when in wait state (before MSG_READY). */
|
/* Dispatch imsgs when in wait state (before MSG_READY). */
|
||||||
static void
|
static void
|
||||||
client_dispatch_wait(struct imsg *imsg, const char *shellcmd)
|
client_dispatch_wait(struct imsg *imsg)
|
||||||
{
|
{
|
||||||
char *data;
|
char *data;
|
||||||
ssize_t datalen;
|
ssize_t datalen;
|
||||||
@ -630,7 +628,7 @@ client_dispatch_wait(struct imsg *imsg, const char *shellcmd)
|
|||||||
fatalx("bad MSG_SHELL string");
|
fatalx("bad MSG_SHELL string");
|
||||||
|
|
||||||
clear_signals(0);
|
clear_signals(0);
|
||||||
client_exec(data, shellcmd);
|
client_exec(data, shell_command);
|
||||||
/* NOTREACHED */
|
/* NOTREACHED */
|
||||||
case MSG_DETACH:
|
case MSG_DETACH:
|
||||||
case MSG_DETACHKILL:
|
case MSG_DETACHKILL:
|
||||||
|
12
tmux.c
12
tmux.c
@ -44,6 +44,7 @@ struct hooks *global_hooks;
|
|||||||
struct timeval start_time;
|
struct timeval start_time;
|
||||||
const char *socket_path;
|
const char *socket_path;
|
||||||
int ptm_fd = -1;
|
int ptm_fd = -1;
|
||||||
|
const char *shell_command;
|
||||||
|
|
||||||
static __dead void usage(void);
|
static __dead void usage(void);
|
||||||
static char *make_label(const char *);
|
static char *make_label(const char *);
|
||||||
@ -190,8 +191,8 @@ find_home(void)
|
|||||||
int
|
int
|
||||||
main(int argc, char **argv)
|
main(int argc, char **argv)
|
||||||
{
|
{
|
||||||
char *path, *label, tmp[PATH_MAX];
|
char *path, *label, **var;
|
||||||
char *shellcmd = NULL, **var;
|
char tmp[PATH_MAX];
|
||||||
const char *s, *shell;
|
const char *s, *shell;
|
||||||
int opt, flags, keys;
|
int opt, flags, keys;
|
||||||
const struct options_table_entry *oe;
|
const struct options_table_entry *oe;
|
||||||
@ -220,8 +221,7 @@ main(int argc, char **argv)
|
|||||||
flags |= CLIENT_256COLOURS;
|
flags |= CLIENT_256COLOURS;
|
||||||
break;
|
break;
|
||||||
case 'c':
|
case 'c':
|
||||||
free(shellcmd);
|
shell_command = optarg;
|
||||||
shellcmd = xstrdup(optarg);
|
|
||||||
break;
|
break;
|
||||||
case 'C':
|
case 'C':
|
||||||
if (flags & CLIENT_CONTROL)
|
if (flags & CLIENT_CONTROL)
|
||||||
@ -258,7 +258,7 @@ main(int argc, char **argv)
|
|||||||
argc -= optind;
|
argc -= optind;
|
||||||
argv += optind;
|
argv += optind;
|
||||||
|
|
||||||
if (shellcmd != NULL && argc != 0)
|
if (shell_command != NULL && argc != 0)
|
||||||
usage();
|
usage();
|
||||||
|
|
||||||
if ((ptm_fd = getptmfd()) == -1)
|
if ((ptm_fd = getptmfd()) == -1)
|
||||||
@ -348,5 +348,5 @@ main(int argc, char **argv)
|
|||||||
free(label);
|
free(label);
|
||||||
|
|
||||||
/* Pass control to the client. */
|
/* Pass control to the client. */
|
||||||
exit(client_main(event_init(), argc, argv, flags, shellcmd));
|
exit(client_main(event_init(), argc, argv, flags));
|
||||||
}
|
}
|
||||||
|
3
tmux.h
3
tmux.h
@ -1486,6 +1486,7 @@ extern struct environ *global_environ;
|
|||||||
extern struct timeval start_time;
|
extern struct timeval start_time;
|
||||||
extern const char *socket_path;
|
extern const char *socket_path;
|
||||||
extern int ptm_fd;
|
extern int ptm_fd;
|
||||||
|
extern const char *shell_command;
|
||||||
int areshell(const char *);
|
int areshell(const char *);
|
||||||
void setblocking(int, int);
|
void setblocking(int, int);
|
||||||
const char *find_home(void);
|
const char *find_home(void);
|
||||||
@ -1820,7 +1821,7 @@ struct cmd_list *cmd_string_parse(const char *, const char *, u_int, char **);
|
|||||||
void cmd_wait_for_flush(void);
|
void cmd_wait_for_flush(void);
|
||||||
|
|
||||||
/* client.c */
|
/* client.c */
|
||||||
int client_main(struct event_base *, int, char **, int, const char *);
|
int client_main(struct event_base *, int, char **, int);
|
||||||
|
|
||||||
/* key-bindings.c */
|
/* key-bindings.c */
|
||||||
RB_PROTOTYPE(key_bindings, key_binding, entry, key_bindings_cmp);
|
RB_PROTOTYPE(key_bindings, key_binding, entry, key_bindings_cmp);
|
||||||
|
Loading…
Reference in New Issue
Block a user