summaryrefslogtreecommitdiff
path: root/src/option_manager.cc
diff options
context:
space:
mode:
authorMaxime Coste <mawww@kakoune.org>2024-04-11 11:37:18 +1000
committerMaxime Coste <mawww@kakoune.org>2024-04-12 15:28:40 +1000
commit3d7d0fecca885b00a7ae80180ea1841fab2c5993 (patch)
tree94218f4a6dab3f448ceaff034e51079a0ecc2e3c /src/option_manager.cc
parentb1c114bf6d950684df0524e450782a151e6a0323 (diff)
Introduce "local" scope in evaluate-commands
When using `eval` a new scope named 'local' gets pushed for the whole evaluation, this makes it possible to temporarily set an option/hook/alias... Local scopes nest so nested evals do work as expected. Remove the now trivial with-option command
Diffstat (limited to 'src/option_manager.cc')
-rw-r--r--src/option_manager.cc9
1 files changed, 9 insertions, 0 deletions
diff --git a/src/option_manager.cc b/src/option_manager.cc
index 5dd3d612..0a77548f 100644
--- a/src/option_manager.cc
+++ b/src/option_manager.cc
@@ -28,6 +28,15 @@ OptionManager::~OptionManager()
kak_assert(m_watchers.empty());
}
+void OptionManager::reparent(OptionManager& parent)
+{
+ if (m_parent)
+ m_parent->unregister_watcher(*this);
+
+ m_parent = &parent;
+ parent.register_watcher(*this);
+}
+
void OptionManager::register_watcher(OptionManagerWatcher& watcher) const
{
kak_assert(not contains(m_watchers, &watcher));