summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorMaxime Coste <mawww@kakoune.org>2020-06-07 13:46:50 +1000
committerMaxime Coste <mawww@kakoune.org>2020-06-09 21:38:47 +1000
commitf75d49e9efbbaafeaedcca0572c24728baf5f12d (patch)
treea098178f0967f1c99b7151792d240ff352ab4d7a /src
parent66f15cf4ad8b0127f93503cad41d570a7c9f5d72 (diff)
Do not include non-primitive option value in *SetOption hook filter
Only include the value for int/str/bool options, for the rest just write '<option name>=...'. This should reduce the cost of some patterns such as repeatedly adding a value inside a list option. It seems very unlikely that the actual value would be matched by a hook regex string for non primitive types.
Diffstat (limited to 'src')
-rw-r--r--src/buffer.cc2
-rw-r--r--src/option_manager.hh9
-rw-r--r--src/scope.cc2
-rw-r--r--src/window.cc3
4 files changed, 12 insertions, 4 deletions
diff --git a/src/buffer.cc b/src/buffer.cc
index d84586cd..ddbad72c 100644
--- a/src/buffer.cc
+++ b/src/buffer.cc
@@ -685,7 +685,7 @@ void Buffer::on_option_changed(const Option& option)
m_flags &= ~Flags::ReadOnly;
}
run_hook_in_own_context(Hook::BufSetOption,
- format("{}={}", option.name(), option.get_as_string(Quoting::Raw)));
+ format("{}={}", option.name(), option.get_desc_string()));
}
void Buffer::run_hook_in_own_context(Hook hook, StringView param, String client_name)
diff --git a/src/option_manager.hh b/src/option_manager.hh
index 81f3b1b9..739ec6bd 100644
--- a/src/option_manager.hh
+++ b/src/option_manager.hh
@@ -55,6 +55,7 @@ public:
virtual String get_as_string(Quoting quoting) const = 0;
virtual Vector<String> get_as_strings() const = 0;
+ virtual String get_desc_string() const = 0;
virtual void set_from_strings(ConstArrayView<String> strs) = 0;
virtual void add_from_strings(ConstArrayView<String> strs) = 0;
virtual void update(const Context& context) = 0;
@@ -154,6 +155,14 @@ public:
return option_to_string(m_value, quoting);
}
+ String get_desc_string() const override
+ {
+ if constexpr (std::is_same_v<int, T> or std::is_same_v<bool, T> or std::is_same_v<String, T>)
+ return option_to_string(m_value, Quoting::Raw);
+ else
+ return "...";
+ }
+
void set_from_strings(ConstArrayView<String> strs) override
{
set(option_from_strings(Meta::Type<T>{}, strs));
diff --git a/src/scope.cc b/src/scope.cc
index 79da998c..64bcd445 100644
--- a/src/scope.cc
+++ b/src/scope.cc
@@ -19,7 +19,7 @@ void GlobalScope::on_option_changed(const Option& option)
{
Context empty_context{Context::EmptyContextFlag{}};
hooks().run_hook(Hook::GlobalSetOption,
- format("{}={}", option.name(), option.get_as_string(Quoting::Raw)),
+ format("{}={}", option.name(), option.get_desc_string()),
empty_context);
}
diff --git a/src/window.cc b/src/window.cc
index 8acc7a03..ab885ca9 100644
--- a/src/window.cc
+++ b/src/window.cc
@@ -346,8 +346,7 @@ void Window::clear_display_buffer()
void Window::on_option_changed(const Option& option)
{
- run_hook_in_own_context(Hook::WinSetOption, format("{}={}", option.name(),
- option.get_as_string(Quoting::Raw)));
+ run_hook_in_own_context(Hook::WinSetOption, format("{}={}", option.name(), option.get_desc_string()));
// an highlighter might depend on the option, so we need to redraw
force_redraw();
}