diff options
| author | Maxime Coste <mawww@kakoune.org> | 2020-06-07 13:46:50 +1000 |
|---|---|---|
| committer | Maxime Coste <mawww@kakoune.org> | 2020-06-09 21:38:47 +1000 |
| commit | f75d49e9efbbaafeaedcca0572c24728baf5f12d (patch) | |
| tree | a098178f0967f1c99b7151792d240ff352ab4d7a /src | |
| parent | 66f15cf4ad8b0127f93503cad41d570a7c9f5d72 (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.cc | 2 | ||||
| -rw-r--r-- | src/option_manager.hh | 9 | ||||
| -rw-r--r-- | src/scope.cc | 2 | ||||
| -rw-r--r-- | src/window.cc | 3 |
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(); } |
