summaryrefslogtreecommitdiffhomepage
path: root/packages/ext-keybindings/src/config.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'packages/ext-keybindings/src/config.cpp')
-rw-r--r--packages/ext-keybindings/src/config.cpp21
1 files changed, 21 insertions, 0 deletions
diff --git a/packages/ext-keybindings/src/config.cpp b/packages/ext-keybindings/src/config.cpp
index 4d1045f..726b24b 100644
--- a/packages/ext-keybindings/src/config.cpp
+++ b/packages/ext-keybindings/src/config.cpp
@@ -101,4 +101,25 @@ auto load_from_string(std::string_view toml_text) -> LoadResult {
return result;
}
+auto reload_bindings(const std::vector<policy::Binding>& current, std::string_view toml_text)
+ -> ReloadDecision {
+ ReloadDecision decision;
+ LoadResult loaded = load_from_string(toml_text);
+ decision.warnings = std::move(loaded.warnings);
+
+ // KEEP-OLD on a syntax error or on a parse that produced no usable bindings
+ // (an empty file, a [[keybind]]-less doc, or one where every entry was
+ // skipped). Either way the live table must remain the user's working keys.
+ if (loaded.parse_error || loaded.bindings.empty()) {
+ decision.bindings = current; // unchanged copy
+ decision.swapped = false;
+ return decision;
+ }
+
+ // SUCCESS: the new table replaces the live one (the swap).
+ decision.bindings = std::move(loaded.bindings);
+ decision.swapped = true;
+ return decision;
+}
+
} // namespace unbox::ext_keybindings::config