summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/input_handler.cc6
-rw-r--r--src/unit_tests.cc2
-rw-r--r--src/word_db.cc8
-rw-r--r--src/word_db.hh1
4 files changed, 15 insertions, 2 deletions
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<String> 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<String>{ "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<String> 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<String> find_prefix(const String& prefix);
+ int get_word_occurences(const String& word) const;
using WordList = std::map<String, int>;
private: