diff options
author | pommicket <pommicket@gmail.com> | 2023-01-01 22:45:59 -0500 |
---|---|---|
committer | pommicket <pommicket@gmail.com> | 2023-01-01 22:45:59 -0500 |
commit | a3e6a4914c92b4ce56940579b9e24568b9199344 (patch) | |
tree | 9255abcf6ea097e135d4449e28f3066e93d91566 | |
parent | 8308d6fc53ee339a0b5cac4b9b837179c61efbaa (diff) |
rename options to settings
-rw-r--r-- | config.c | 223 | ||||
-rw-r--r-- | main.c | 1 | ||||
-rw-r--r-- | settings.h | 119 | ||||
-rw-r--r-- | ted.h | 2 |
4 files changed, 178 insertions, 167 deletions
@@ -7,6 +7,9 @@ // [section2] // asdf = 123 + +#include "settings.h" + // all worth it for the -Wformat warnings #define config_err(cfg, ...) do {\ if ((cfg)->error) break;\ @@ -186,139 +189,27 @@ static u32 config_parse_key_combo(ConfigReader *cfg, char const *str) { } -// all the "control" pointers here are relative to a NULL Settings object. -typedef struct { - char const *name; - const bool *control; - bool per_language; // allow per-language control -} OptionBool; -typedef struct { - char const *name; - const u8 *control; - u8 min, max; - bool per_language; -} OptionU8; -typedef struct { - char const *name; - const float *control; - float min, max; - bool per_language; -} OptionFloat; -typedef struct { - char const *name; - const u16 *control; - u16 min, max; - bool per_language; -} OptionU16; -typedef struct { - char const *name; - const u32 *control; - u32 min, max; - bool per_language; -} OptionU32; -typedef struct { - char const *name; - const char *control; - size_t buf_size; - bool per_language; -} OptionString; - -typedef enum { - OPTION_BOOL = 1, - OPTION_U8, - OPTION_U16, - OPTION_U32, - OPTION_FLOAT, - OPTION_STRING -} OptionType; -typedef struct { - OptionType type; - const char *name; - bool per_language; - union { - OptionU8 _u8; - OptionBool _bool; - OptionU16 _u16; - OptionU32 _u32; - OptionFloat _float; - OptionString _string; - } u; -} OptionAny; - -// core options -static Settings const options_zero = {0}; -static OptionBool const options_bool[] = { - {"auto-indent", &options_zero.auto_indent, true}, - {"auto-add-newline", &options_zero.auto_add_newline, true}, - {"auto-reload", &options_zero.auto_reload, true}, - {"auto-reload-config", &options_zero.auto_reload_config, false}, - {"syntax-highlighting", &options_zero.syntax_highlighting, true}, - {"line-numbers", &options_zero.line_numbers, true}, - {"restore-session", &options_zero.restore_session, false}, - {"regenerate-tags-if-not-found", &options_zero.regenerate_tags_if_not_found, true}, - {"indent-with-spaces", &options_zero.indent_with_spaces, true}, - {"trigger-characters", &options_zero.trigger_characters, true}, - {"identifier-trigger-characters", &options_zero.identifier_trigger_characters, true}, - {"signature-help-enabled", &options_zero.signature_help_enabled, true}, - {"lsp-enabled", &options_zero.lsp_enabled, true}, - {"hover-enabled", &options_zero.hover_enabled, true}, - {"vsync", &options_zero.vsync, false}, - {"highlight-enabled", &options_zero.highlight_enabled, true}, - {"highlight-auto", &options_zero.highlight_auto, true}, -}; -static OptionU8 const options_u8[] = { - {"tab-width", &options_zero.tab_width, 1, 100, true}, - {"cursor-width", &options_zero.cursor_width, 1, 100, true}, - {"undo-save-time", &options_zero.undo_save_time, 1, 200, true}, - {"border-thickness", &options_zero.border_thickness, 1, 30, false}, - {"padding", &options_zero.padding, 0, 100, false}, - {"scrolloff", &options_zero.scrolloff, 1, 100, true}, - {"tags-max-depth", &options_zero.tags_max_depth, 1, 100, false}, -}; -static OptionU16 const options_u16[] = { - {"text-size", &options_zero.text_size, TEXT_SIZE_MIN, TEXT_SIZE_MAX, false}, - {"max-menu-width", &options_zero.max_menu_width, 10, U16_MAX, false}, - {"error-display-time", &options_zero.error_display_time, 0, U16_MAX, false}, - {"framerate-cap", &options_zero.framerate_cap, 3, 1000, false}, -}; -static OptionU32 const options_u32[] = { - {"max-file-size", &options_zero.max_file_size, 100, 2000000000, false}, - {"max-file-size-view-only", &options_zero.max_file_size_view_only, 100, 2000000000, false}, -}; -static OptionFloat const options_float[] = { - {"cursor-blink-time-on", &options_zero.cursor_blink_time_on, 0, 1000, true}, - {"cursor-blink-time-off", &options_zero.cursor_blink_time_off, 0, 1000, true}, - {"hover-time", &options_zero.hover_time, 0, INFINITY, true}, -}; -static OptionString const options_string[] = { - {"build-default-command", options_zero.build_default_command, sizeof options_zero.build_default_command, true}, - {"bg-shader", options_zero.bg_shader_text, sizeof options_zero.bg_shader_text, true}, - {"bg-texture", options_zero.bg_shader_image, sizeof options_zero.bg_shader_image, true}, - {"root-identifiers", options_zero.root_identifiers, sizeof options_zero.root_identifiers, true}, - {"lsp", options_zero.lsp, sizeof options_zero.lsp, true}, -}; - -static void option_bool_set(Settings *settings, const OptionBool *opt, bool value) { - *(bool *)((char *)settings + ((char*)opt->control - (char*)&options_zero)) = value; +static void option_bool_set(Settings *settings, const SettingBool *opt, bool value) { + *(bool *)((char *)settings + ((char*)opt->control - (char*)&settings_zero)) = value; } -static void option_u8_set(Settings *settings, const OptionU8 *opt, u8 value) { +static void option_u8_set(Settings *settings, const SettingU8 *opt, u8 value) { if (value >= opt->min && value <= opt->max) - *(u8 *)((char *)settings + ((char*)opt->control - (char*)&options_zero)) = value; + *(u8 *)((char *)settings + ((char*)opt->control - (char*)&settings_zero)) = value; } -static void option_u16_set(Settings *settings, const OptionU16 *opt, u16 value) { +static void option_u16_set(Settings *settings, const SettingU16 *opt, u16 value) { if (value >= opt->min && value <= opt->max) - *(u16 *)((char *)settings + ((char*)opt->control - (char*)&options_zero)) = value; + *(u16 *)((char *)settings + ((char*)opt->control - (char*)&settings_zero)) = value; } -static void option_u32_set(Settings *settings, const OptionU32 *opt, u32 value) { +static void option_u32_set(Settings *settings, const SettingU32 *opt, u32 value) { if (value >= opt->min && value <= opt->max) - *(u32 *)((char *)settings + ((char*)opt->control - (char*)&options_zero)) = value; + *(u32 *)((char *)settings + ((char*)opt->control - (char*)&settings_zero)) = value; } -static void option_float_set(Settings *settings, const OptionFloat *opt, float value) { +static void option_float_set(Settings *settings, const SettingFloat *opt, float value) { if (value >= opt->min && value <= opt->max) - *(float *)((char *)settings + ((char*)opt->control - (char*)&options_zero)) = value; + *(float *)((char *)settings + ((char*)opt->control - (char*)&settings_zero)) = value; } -static void option_string_set(Settings *settings, const OptionString *opt, const char *value) { - char *control = (char *)settings + (opt->control - (char*)&options_zero); +static void option_string_set(Settings *settings, const SettingString *opt, const char *value) { + char *control = (char *)settings + (opt->control - (char*)&settings_zero); str_cpy(control, opt->buf_size, value); } @@ -391,46 +282,46 @@ static void config_init_options(void) { if (initialized_options) return; OptionAny *opt = all_options; - for (size_t i = 0; i < arr_count(options_bool); ++i) { - opt->type = OPTION_BOOL; - opt->name = options_bool[i].name; - opt->per_language = options_bool[i].per_language; - opt->u._bool = options_bool[i]; + for (size_t i = 0; i < arr_count(settings_bool); ++i) { + opt->type = SETTING_BOOL; + opt->name = settings_bool[i].name; + opt->per_language = settings_bool[i].per_language; + opt->u._bool = settings_bool[i]; ++opt; } - for (size_t i = 0; i < arr_count(options_u8); ++i) { - opt->type = OPTION_U8; - opt->name = options_u8[i].name; - opt->per_language = options_u8[i].per_language; - opt->u._u8 = options_u8[i]; + for (size_t i = 0; i < arr_count(settings_u8); ++i) { + opt->type = SETTING_U8; + opt->name = settings_u8[i].name; + opt->per_language = settings_u8[i].per_language; + opt->u._u8 = settings_u8[i]; ++opt; } - for (size_t i = 0; i < arr_count(options_u16); ++i) { - opt->type = OPTION_U16; - opt->name = options_u16[i].name; - opt->per_language = options_u16[i].per_language; - opt->u._u16 = options_u16[i]; + for (size_t i = 0; i < arr_count(settings_u16); ++i) { + opt->type = SETTING_U16; + opt->name = settings_u16[i].name; + opt->per_language = settings_u16[i].per_language; + opt->u._u16 = settings_u16[i]; ++opt; } - for (size_t i = 0; i < arr_count(options_u32); ++i) { - opt->type = OPTION_U32; - opt->name = options_u32[i].name; - opt->per_language = options_u32[i].per_language; - opt->u._u32 = options_u32[i]; + for (size_t i = 0; i < arr_count(settings_u32); ++i) { + opt->type = SETTING_U32; + opt->name = settings_u32[i].name; + opt->per_language = settings_u32[i].per_language; + opt->u._u32 = settings_u32[i]; ++opt; } - for (size_t i = 0; i < arr_count(options_float); ++i) { - opt->type = OPTION_FLOAT; - opt->name = options_float[i].name; - opt->per_language = options_float[i].per_language; - opt->u._float = options_float[i]; + for (size_t i = 0; i < arr_count(settings_float); ++i) { + opt->type = SETTING_FLOAT; + opt->name = settings_float[i].name; + opt->per_language = settings_float[i].per_language; + opt->u._float = settings_float[i]; ++opt; } - for (size_t i = 0; i < arr_count(options_string); ++i) { - opt->type = OPTION_STRING; - opt->name = options_string[i].name; - opt->per_language = options_string[i].per_language; - opt->u._string = options_string[i]; + for (size_t i = 0; i < arr_count(settings_string); ++i) { + opt->type = SETTING_STRING; + opt->name = settings_string[i].name; + opt->per_language = settings_string[i].per_language; + opt->u._string = settings_string[i]; ++opt; } initialized_options = true; @@ -852,44 +743,44 @@ static void config_parse_line(ConfigReader *cfg, Settings *settings, const Confi } switch (any->type) { - case OPTION_BOOL: { - OptionBool const *option = &any->u._bool; + case SETTING_BOOL: { + SettingBool const *option = &any->u._bool; if (is_bool) option_bool_set(settings, option, boolean); else config_err(cfg, "Invalid %s: %s. This should be yes, no, on, or off.", option->name, value); } break; - case OPTION_U8: { - OptionU8 const *option = &any->u._u8; + case SETTING_U8: { + SettingU8 const *option = &any->u._u8; if (is_integer && integer >= option->min && integer <= option->max) option_u8_set(settings, option, (u8)integer); else config_err(cfg, "Invalid %s: %s. This should be an integer from %u to %u.", option->name, value, option->min, option->max); } break; - case OPTION_U16: { - OptionU16 const *option = &any->u._u16; + case SETTING_U16: { + SettingU16 const *option = &any->u._u16; if (is_integer && integer >= option->min && integer <= option->max) option_u16_set(settings, option, (u16)integer); else config_err(cfg, "Invalid %s: %s. This should be an integer from %u to %u.", option->name, value, option->min, option->max); } break; - case OPTION_U32: { - OptionU32 const *option = &any->u._u32; + case SETTING_U32: { + SettingU32 const *option = &any->u._u32; if (is_integer && integer >= option->min && integer <= option->max) option_u32_set(settings, option, (u32)integer); else config_err(cfg, "Invalid %s: %s. This should be an integer from %" PRIu32 " to %" PRIu32 ".", option->name, value, option->min, option->max); } break; - case OPTION_FLOAT: { - OptionFloat const *option = &any->u._float; + case SETTING_FLOAT: { + SettingFloat const *option = &any->u._float; if (is_floating && floating >= option->min && floating <= option->max) option_float_set(settings, option, (float)floating); else config_err(cfg, "Invalid %s: %s. This should be a number from %g to %g.", option->name, value, option->min, option->max); } break; - case OPTION_STRING: { - OptionString const *option = &any->u._string; + case SETTING_STRING: { + SettingString const *option = &any->u._string; if (strlen(value) >= option->buf_size) { config_err(cfg, "%s is too long (length: %zu, maximum length: %zu).", key, strlen(value), option->buf_size - 1); } else { @@ -11,6 +11,7 @@ - run everything through valgrind ideally with leak checking - grep -i -n TODO *.[ch] - when searching files, put exact matches at the top +- auto-set build command for cmake (both for windows and unix) --- LSP MERGE --- - improve structure of ted source code to make LSP completions better (make every c file a valid translation unit) diff --git a/settings.h b/settings.h new file mode 100644 index 0000000..8e0596b --- /dev/null +++ b/settings.h @@ -0,0 +1,119 @@ +#ifndef SETTINGS_H_ +#define SETTINGS_H_ + +// NOTE: the actual Settings struct is stored in ted.h. +// This file is only included by config.c. + +// all the "control" pointers here are relative to a NULL Settings object. +typedef struct { + char const *name; + const bool *control; + bool per_language; // allow per-language control +} SettingBool; +typedef struct { + char const *name; + const u8 *control; + u8 min, max; + bool per_language; +} SettingU8; +typedef struct { + char const *name; + const float *control; + float min, max; + bool per_language; +} SettingFloat; +typedef struct { + char const *name; + const u16 *control; + u16 min, max; + bool per_language; +} SettingU16; +typedef struct { + char const *name; + const u32 *control; + u32 min, max; + bool per_language; +} SettingU32; +typedef struct { + char const *name; + const char *control; + size_t buf_size; + bool per_language; +} SettingString; + +typedef enum { + SETTING_BOOL = 1, + SETTING_U8, + SETTING_U16, + SETTING_U32, + SETTING_FLOAT, + SETTING_STRING +} SettingType; +typedef struct { + SettingType type; + const char *name; + bool per_language; + union { + SettingU8 _u8; + SettingBool _bool; + SettingU16 _u16; + SettingU32 _u32; + SettingFloat _float; + SettingString _string; + } u; +} OptionAny; + +// core options +static Settings const settings_zero = {0}; +static SettingBool const settings_bool[] = { + {"auto-indent", &settings_zero.auto_indent, true}, + {"auto-add-newline", &settings_zero.auto_add_newline, true}, + {"auto-reload", &settings_zero.auto_reload, true}, + {"auto-reload-config", &settings_zero.auto_reload_config, false}, + {"syntax-highlighting", &settings_zero.syntax_highlighting, true}, + {"line-numbers", &settings_zero.line_numbers, true}, + {"restore-session", &settings_zero.restore_session, false}, + {"regenerate-tags-if-not-found", &settings_zero.regenerate_tags_if_not_found, true}, + {"indent-with-spaces", &settings_zero.indent_with_spaces, true}, + {"trigger-characters", &settings_zero.trigger_characters, true}, + {"identifier-trigger-characters", &settings_zero.identifier_trigger_characters, true}, + {"signature-help-enabled", &settings_zero.signature_help_enabled, true}, + {"lsp-enabled", &settings_zero.lsp_enabled, true}, + {"hover-enabled", &settings_zero.hover_enabled, true}, + {"vsync", &settings_zero.vsync, false}, + {"highlight-enabled", &settings_zero.highlight_enabled, true}, + {"highlight-auto", &settings_zero.highlight_auto, true}, +}; +static SettingU8 const settings_u8[] = { + {"tab-width", &settings_zero.tab_width, 1, 100, true}, + {"cursor-width", &settings_zero.cursor_width, 1, 100, true}, + {"undo-save-time", &settings_zero.undo_save_time, 1, 200, true}, + {"border-thickness", &settings_zero.border_thickness, 1, 30, false}, + {"padding", &settings_zero.padding, 0, 100, false}, + {"scrolloff", &settings_zero.scrolloff, 1, 100, true}, + {"tags-max-depth", &settings_zero.tags_max_depth, 1, 100, false}, +}; +static SettingU16 const settings_u16[] = { + {"text-size", &settings_zero.text_size, TEXT_SIZE_MIN, TEXT_SIZE_MAX, false}, + {"max-menu-width", &settings_zero.max_menu_width, 10, U16_MAX, false}, + {"error-display-time", &settings_zero.error_display_time, 0, U16_MAX, false}, + {"framerate-cap", &settings_zero.framerate_cap, 3, 1000, false}, +}; +static SettingU32 const settings_u32[] = { + {"max-file-size", &settings_zero.max_file_size, 100, 2000000000, false}, + {"max-file-size-view-only", &settings_zero.max_file_size_view_only, 100, 2000000000, false}, +}; +static SettingFloat const settings_float[] = { + {"cursor-blink-time-on", &settings_zero.cursor_blink_time_on, 0, 1000, true}, + {"cursor-blink-time-off", &settings_zero.cursor_blink_time_off, 0, 1000, true}, + {"hover-time", &settings_zero.hover_time, 0, INFINITY, true}, +}; +static SettingString const settings_string[] = { + {"build-default-command", settings_zero.build_default_command, sizeof settings_zero.build_default_command, true}, + {"bg-shader", settings_zero.bg_shader_text, sizeof settings_zero.bg_shader_text, true}, + {"bg-texture", settings_zero.bg_shader_image, sizeof settings_zero.bg_shader_image, true}, + {"root-identifiers", settings_zero.root_identifiers, sizeof settings_zero.root_identifiers, true}, + {"lsp", settings_zero.lsp, sizeof settings_zero.lsp, true}, +}; + +#endif // SETTINGS_H_ @@ -144,7 +144,7 @@ typedef struct { typedef struct { // NOTE: to add more options to ted, add fields here, - // and change the options_<type> global constant in config.c + // and change the settings_<type> global constant in settings.h SettingsContext context; u32 colors[COLOR_COUNT]; |