diff options
| author | Maxime Coste <frrrwww@gmail.com> | 2013-05-06 13:52:20 +0200 |
|---|---|---|
| committer | Maxime Coste <frrrwww@gmail.com> | 2013-05-06 13:52:20 +0200 |
| commit | c1615b5c15d64b746ff7d4080da43a8d659576ca (patch) | |
| tree | 29a81c565c8474c0975ff9509013a35bb453c506 /src | |
| parent | 2342e7686fb9de142b0f331852bb5294c55c6440 (diff) | |
add unordered_set option support, use it for completers
Diffstat (limited to 'src')
| -rw-r--r-- | src/input_handler.cc | 2 | ||||
| -rw-r--r-- | src/option_manager.cc | 2 | ||||
| -rw-r--r-- | src/option_types.hh | 37 |
3 files changed, 38 insertions, 3 deletions
diff --git a/src/input_handler.cc b/src/input_handler.cc index 176fa975..01a8e471 100644 --- a/src/input_handler.cc +++ b/src/input_handler.cc @@ -664,7 +664,7 @@ private: { if (not m_completions.is_valid()) { - auto& completers = options()["completers"].get<std::vector<String>>(); + auto& completers = options()["completers"].get<std::unordered_set<String>>(); BufferIterator cursor = m_context.editor().main_selection().last(); if (contains(completers, "option")) m_completions = complete_opt(cursor, m_context.options()); diff --git a/src/option_manager.cc b/src/option_manager.cc index 63a6a7a5..68e65710 100644 --- a/src/option_manager.cc +++ b/src/option_manager.cc @@ -119,7 +119,7 @@ GlobalOptions::GlobalOptions() declare_option<String>("filetype", ""); declare_option<std::vector<String>>("completions", {}); declare_option<std::vector<String>>("path", { "./", "/usr/include" }); - declare_option<std::vector<String>>("completers", {"option", "word"}); + declare_option<std::unordered_set<String>>("completers", {"option", "word"}); declare_option<bool>("insert_hide_sel", false); } diff --git a/src/option_types.hh b/src/option_types.hh index e44b3f0d..121b8f56 100644 --- a/src/option_types.hh +++ b/src/option_types.hh @@ -7,6 +7,7 @@ #include <tuple> #include <vector> +#include <unordered_set> namespace Kakoune { @@ -64,6 +65,39 @@ bool option_add(std::vector<T>& opt, const std::vector<T>& vec) return not vec.empty(); } +template<typename T> +String option_to_string(const std::unordered_set<T>& opt) +{ + String res; + for (auto it = begin(opt); it != end(opt); ++it) + { + if (it != begin(opt)) + res += list_separator; + res += option_to_string(*it); + } + return res; +} + +template<typename T> +void option_from_string(const String& str, std::unordered_set<T>& opt) +{ + opt.clear(); + std::vector<String> elems = split(str, list_separator); + for (auto& elem: elems) + { + T opt_elem; + option_from_string(elem, opt_elem); + opt.insert(opt_elem); + } +} + +template<typename T> +bool option_add(std::unordered_set<T>& opt, const std::unordered_set<T>& set) +{ + std::copy(set.begin(), set.end(), std::inserter(opt, opt.begin())); + return not set.empty(); +} + constexpr Codepoint tuple_separator = '|'; template<size_t I, typename... Types> @@ -124,7 +158,8 @@ template<typename RealType, typename ValueType = int> inline bool option_add(StronglyTypedNumber<RealType, ValueType>& opt, StronglyTypedNumber<RealType, ValueType> val) { - opt += val; return val != 0; + opt += val; + return val != 0; } template<typename T> |
