diff --git a/src/input_handler.cc b/src/input_handler.cc index 037bcdcf..49c02367 100644 --- a/src/input_handler.cc +++ b/src/input_handler.cc @@ -776,11 +776,13 @@ public: String current_word{begin, end}; + auto& word_db = get_word_db(buffer); std::unordered_set matches; - auto bufmatches = get_word_db(buffer).find_prefix(prefix); + auto bufmatches = word_db.find_prefix(prefix); matches.insert(bufmatches.begin(), bufmatches.end()); - matches.erase(current_word); + if (word_db.get_word_occurences(current_word) <= 1) + matches.erase(current_word); if (other_buffers) { diff --git a/src/unit_tests.cc b/src/unit_tests.cc index 66fe53f2..e26ce611 100644 --- a/src/unit_tests.cc +++ b/src/unit_tests.cc @@ -80,6 +80,8 @@ void test_word_db() auto res = word_db.find_prefix(""); std::sort(res.begin(), res.end()); kak_assert(res == std::vector{ "allo" COMMA "kanaky" COMMA "mutch" COMMA "tchaa" COMMA "tchou" }); + kak_assert(word_db.get_word_occurences("tchou") == 3); + kak_assert(word_db.get_word_occurences("allo") == 1); buffer.erase(buffer.iterator_at({1, 6}), buffer.iterator_at({4, 0})); res = word_db.find_prefix(""); std::sort(res.begin(), res.end()); diff --git a/src/word_db.cc b/src/word_db.cc index e33d15ed..e9b05795 100644 --- a/src/word_db.cc +++ b/src/word_db.cc @@ -112,4 +112,12 @@ std::vector WordDB::find_prefix(const String& prefix) return res; } +int WordDB::get_word_occurences(const String& word) const +{ + auto it = m_words.find(word); + if (it != m_words.end()) + return it->second; + return 0; +} + } diff --git a/src/word_db.hh b/src/word_db.hh index 48ed2c4f..950cc05d 100644 --- a/src/word_db.hh +++ b/src/word_db.hh @@ -18,6 +18,7 @@ public: WordDB(const Buffer& buffer); std::vector find_prefix(const String& prefix); + int get_word_occurences(const String& word) const; using WordList = std::map; private: