Added in reload and exec_always handling

This commit is contained in:
Luminarys 2015-08-10 13:53:43 -05:00
parent 9c3a04b996
commit c0ee2a6406
4 changed files with 63 additions and 4 deletions

View file

@ -78,6 +78,28 @@ int cmd_exec(struct sway_config *config, int argc, char **argv) {
sway_log(L_ERROR, "Invalid exec command (expected at least 1 argument, got %d)", argc);
return 1;
}
if (config->reloading) {
sway_log(L_DEBUG, "Ignoring exec %s due to reload", join_args(argv, argc));
return 0;
}
if (fork() == 0) {
char *args = join_args(argv, argc);
sway_log(L_DEBUG, "Executing %s", args);
execl("/bin/sh", "sh", "-c", args, (char *)NULL);
free(args);
exit(0);
}
return 0;
}
int cmd_exec_always(struct sway_config *config, int argc, char **argv) {
if (argc < 1) {
sway_log(L_ERROR, "Invalid exec_always command (expected at least 1 argument, got %d)", argc);
return 1;
}
if (fork() == 0) {
char *args = join_args(argv, argc);
sway_log(L_DEBUG, "Executing %s", args);
@ -152,6 +174,31 @@ int cmd_layout(struct sway_config *config, int argc, char **argv) {
return 0;
}
int cmd_reload(struct sway_config *config, int argc, char **argv) {
if (argc != 0) {
sway_log(L_ERROR, "Invalid reload command (expected 1 arguments, got %d)", argc);
return 1;
}
// TODO: Allow use of more config file locations
const char *name = "/.sway/config";
const char *home = getenv("HOME");
char *temp = malloc(strlen(home) + strlen(name) + 1);
strcpy(temp, home);
strcat(temp, name);
FILE *f = fopen(temp, "r");
if (!f) {
fprintf(stderr, "Unable to open %s for reading", temp);
free(temp);
exit(1);
}
free(temp);
config = read_config(f, true);
fclose(f);
return 0;
}
int cmd_set(struct sway_config *config, int argc, char **argv) {
if (argc != 2) {
sway_log(L_ERROR, "Invalid set command (expected 2 arguments, got %d)", argc);
@ -232,12 +279,14 @@ int cmd_fullscreen(struct sway_config *config, int argc, char **argv) {
struct cmd_handler handlers[] = {
{ "bindsym", cmd_bindsym },
{ "exec", cmd_exec },
{ "exec_always", cmd_exec_always },
{ "exit", cmd_exit },
{ "focus", cmd_focus },
{ "focus_follows_mouse", cmd_focus_follows_mouse },
{ "fullscreen", cmd_fullscreen },
{ "layout", cmd_layout },
{ "log_colors", cmd_log_colors },
{ "reload", cmd_reload },
{ "set", cmd_set },
{ "splith", cmd_splith },
{ "splitv", cmd_splitv }

View file

@ -18,12 +18,17 @@ void config_defaults(struct sway_config *config) {
// Flags
config->focus_follows_mouse = true;
config->mouse_warping = true;
config->reloading = false;
}
struct sway_config *read_config(FILE *file) {
struct sway_config *read_config(FILE *file, bool is_active) {
struct sway_config *config = malloc(sizeof(struct sway_config));
config_defaults(config);
if (is_active) {
config->reloading = true;
}
bool success = true;
int temp_depth = 0; // Temporary: skip all config sections with depth
@ -56,6 +61,8 @@ _continue:
exit(1);
}
config->reloading = false;
return config;
}

View file

@ -29,9 +29,11 @@ struct sway_config {
// Flags
bool focus_follows_mouse;
bool mouse_warping;
bool reloading;
};
struct sway_config *read_config(FILE *file);
struct sway_config *read_config(FILE *file, bool is_active);
char *do_var_replacement(struct sway_config *config, char *str);
extern struct sway_config *config;

View file

@ -23,7 +23,7 @@ void load_config() {
exit(1);
}
free(temp);
config = read_config(f);
config = read_config(f, false);
fclose(f);
}
@ -52,6 +52,7 @@ int main(int argc, char **argv) {
.motion = handle_pointer_motion,
.button = handle_pointer_button
}
};
setenv("WLC_DIM", "0", 0);