summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--README.md1
-rw-r--r--config.c1
-rw-r--r--ted.h16
3 files changed, 18 insertions, 0 deletions
diff --git a/README.md b/README.md
index fe837c7..dad3edd 100644
--- a/README.md
+++ b/README.md
@@ -164,6 +164,7 @@ Then, open windows\_installer\\ted\\ted.sln, and build.
<tr><td>1.2</td> <td>Bug fixes, per-language settings</td> <td>2022 Jul 29</td></tr>
<tr><td>1.2r1</td> <td>Mouse X1/X2 bug fix, support for X1/X2 commands.</td> <td>2022 Aug 19</td></tr>
<tr><td>1.2r2</td> <td>Shift+PgUp/PgDown, many rust-related fixes.</td> <td>2022 Sep 30</td></tr>
+<tr><td>1.3</td> <td>Custom background shader, some bugfixes.</td> <td>2022 Nov 3</td></tr>
</table>
## License
diff --git a/config.c b/config.c
index d886756..887c466 100644
--- a/config.c
+++ b/config.c
@@ -27,6 +27,7 @@ static void context_copy(SettingsContext *dest, const SettingsContext *src) {
dest->path = str_dup(src->path);
}
+/* does being in the context of `parent` imply you are in the context of `child`? */
static bool context_is_parent(const SettingsContext *parent, const SettingsContext *child) {
if (child->language == 0 && parent->language != 0)
return false;
diff --git a/ted.h b/ted.h
index 3db5a3c..e204b17 100644
--- a/ted.h
+++ b/ted.h
@@ -138,6 +138,8 @@ typedef struct KeyAction {
i64 argument;
} KeyAction;
+// a SettingsContext is a context where a specific set of settings are applied.
+// this corresponds to [PATH//LANGUAGE.(section)] in config files
typedef struct {
Language language; // these settings apply to this language.
char *path; // these settings apply to all paths which start with this string, or all paths if path=NULL
@@ -470,6 +472,20 @@ void ted_switch_to_buffer(Ted *ted, TextBuffer *buffer);
Settings *ted_active_settings(Ted *ted);
void ted_load_configs(Ted *ted, bool reloading);
static TextBuffer *find_search_buffer(Ted *ted);
+// first, we read all config files, then we parse them.
+// this is because we want less specific settings (e.g. settings applied
+// to all languages instead of one particular language) to be applied first,
+// then more specific settings are based off of those.
+// EXAMPLE:
+// ---config file 1---
+// [Javascript.core]
+// syntax-highlighting = off
+// (inherits tab-width = 4)
+// [CSS.core]
+// tab-width = 2 (overrides tab-width = 4)
+// ---config file 2---
+// [core]
+// tab-width = 4
void config_read(Ted *ted, ConfigPart **parts, const char *filename);
void config_parse(Ted *ted, ConfigPart **parts);
void config_free(Ted *ted);