diff --git a/src/source_clang.cpp b/src/source_clang.cpp index 9550ae1..b3846f1 100644 --- a/src/source_clang.cpp +++ b/src/source_clang.cpp @@ -893,7 +893,7 @@ Source::ClangViewAutocomplete::ClangViewAutocomplete(const boost::filesystem::pa autocomplete.is_restart_key = [this](guint keyval) { auto iter = get_buffer()->get_insert()->get_iter(); iter.backward_chars(2); - if(keyval == '.' || (keyval == ':' && *iter == ':') || (keyval == '>' && *iter == '-')) + if(keyval == '.' || (*iter == ':' && keyval == ':') || (*iter == '-' && keyval == '>')) return true; return false; }; diff --git a/src/source_language_protocol.cpp b/src/source_language_protocol.cpp index 22c720d..6ade6c9 100644 --- a/src/source_language_protocol.cpp +++ b/src/source_language_protocol.cpp @@ -1610,7 +1610,7 @@ void Source::LanguageProtocolView::setup_autocomplete() { autocomplete->is_restart_key = [this](guint keyval) { auto iter = get_buffer()->get_insert()->get_iter(); iter.backward_chars(2); - if(keyval == '.' || (keyval == ':' && *iter == ':')) + if(keyval == '.' || (*iter == ':' && keyval == ':') || (*iter == '-' && keyval == '>')) return true; return false; }; @@ -1657,7 +1657,7 @@ void Source::LanguageProtocolView::setup_autocomplete() { } return true; } - else if(prevprev.backward_char() && *prevprev == ':' && *prev == ':') { + else if(prevprev.backward_char() && ((*prevprev == ':' && *prev == ':') || (*prevprev == '-' && *prev == '>'))) { { LockGuard lock(autocomplete->prefix_mutex); autocomplete->prefix = get_buffer()->get_text(prefix_start, prefix_end); @@ -1689,7 +1689,7 @@ void Source::LanguageProtocolView::setup_autocomplete() { autocomplete->prefix = get_buffer()->get_text(prefix_start, prefix_end); } auto prevprev = prev; - autocomplete_enable_snippets = !(*prev == '.' || (prevprev.backward_char() && *prevprev == ':' && *prev == ':')); + autocomplete_enable_snippets = !(*prev == '.' || (prevprev.backward_char() && ((*prevprev == ':' && *prev == ':') || (*prevprev == '-' && *prev == '>')))); return true; } @@ -1809,6 +1809,12 @@ void Source::LanguageProtocolView::setup_autocomplete() { } for(auto &item : items) { auto label = item.string_or("filterText", item.string_or("label", "")); + if(!label.empty()) { + if(starts_with(label, ".")) + label.erase(0, 1); + else if(starts_with(label, "::") || starts_with(label, "->")) + label.erase(0, 2); + } if(starts_with(label, prefix)) { auto detail = item.string_or("detail", ""); LanguageProtocol::Documentation documentation(item.child_optional("documentation"));