feat: add a source-optional keyword

This commit is contained in:
Lin Xianyi 2026-02-08 10:46:18 +08:00
parent 9b92f139c0
commit 5de87db8ca

View file

@ -362,7 +362,7 @@ typedef struct {
typedef int32_t (*FuncType)(const Arg *); typedef int32_t (*FuncType)(const Arg *);
Config config; Config config;
bool parse_config_file(Config *config, const char *file_path); bool parse_config_file(Config *config, const char *file_path, bool must_exist);
// Helper function to trim whitespace from start and end of a string // Helper function to trim whitespace from start and end of a string
void trim_whitespace(char *str) { void trim_whitespace(char *str) {
@ -2610,8 +2610,10 @@ bool parse_option(Config *config, char *key, char *value) {
config->gesture_bindings_count++; config->gesture_bindings_count++;
} }
} else if (strncmp(key, "source-optional", 15) == 0) {
parse_config_file(config, value, false);
} else if (strncmp(key, "source", 6) == 0) { } else if (strncmp(key, "source", 6) == 0) {
parse_config_file(config, value); parse_config_file(config, value, true);
} else { } else {
fprintf(stderr, fprintf(stderr,
"\033[1m\033[31m[ERROR]:\033[33m Unknown keyword: " "\033[1m\033[31m[ERROR]:\033[33m Unknown keyword: "
@ -2639,7 +2641,7 @@ bool parse_config_line(Config *config, const char *line) {
return parse_option(config, key, value); return parse_option(config, key, value);
} }
bool parse_config_file(Config *config, const char *file_path) { bool parse_config_file(Config *config, const char *file_path, bool must_exist) {
FILE *file; FILE *file;
char full_path[1024]; char full_path[1024];
@ -2684,11 +2686,15 @@ bool parse_config_file(Config *config, const char *file_path) {
} }
if (!file) { if (!file) {
fprintf(stderr, if (must_exist) {
"\033[1;31m\033[1;33m[ERROR]:\033[0m Failed to open " fprintf(stderr,
"config file: %s\n", "\033[1;31m\033[1;33m[ERROR]:\033[0m Failed to open "
file_path); "config file: %s\n",
return false; file_path);
return false;
} else {
return true;
}
} }
char line[512]; char line[512];
@ -3441,7 +3447,7 @@ bool parse_config(void) {
bool parse_correct = true; bool parse_correct = true;
set_value_default(); set_value_default();
parse_correct = parse_config_file(&config, filename); parse_correct = parse_config_file(&config, filename, true);
set_default_key_bindings(&config); set_default_key_bindings(&config);
override_config(); override_config();
return parse_correct; return parse_correct;