summaryrefslogtreecommitdiff
path: root/scene/gui/text_edit.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'scene/gui/text_edit.cpp')
-rw-r--r--scene/gui/text_edit.cpp29
1 files changed, 24 insertions, 5 deletions
diff --git a/scene/gui/text_edit.cpp b/scene/gui/text_edit.cpp
index 6fd6137ac8..55e1a2cc52 100644
--- a/scene/gui/text_edit.cpp
+++ b/scene/gui/text_edit.cpp
@@ -852,6 +852,11 @@ void TextEdit::_notification(int p_what) {
k++;
}
+ // check for space between name and bracket
+ while (k < str.length() && (str[k] == '\t' || str[k] == ' ')) {
+ k++;
+ }
+
if (str[k] == '(') {
in_function_name = true;
}
@@ -1973,6 +1978,7 @@ void TextEdit::_input_event(const InputEvent& p_input_event) {
}
} break;
case KEY_TAB: {
+ if (k.mod.command) break; // avoid tab when command
if (readonly)
break;
@@ -4116,7 +4122,7 @@ void TextEdit::_update_completion_candidates() {
}
}
- if (l[cursor.column - 1] == '(' && !pre_keyword && !completion_strings[0].begins_with("\"")) {
+ if (cursor.column > 0 && l[cursor.column - 1] == '(' && !pre_keyword && !completion_strings[0].begins_with("\"")) {
cancel = true;
}
@@ -4131,16 +4137,28 @@ void TextEdit::_update_completion_candidates() {
completion_options.clear();
completion_index=0;
completion_base=s;
- int ci_match=0;
Vector<float> sim_cache;
for(int i=0;i<completion_strings.size();i++) {
+ if (s == completion_strings[i]) {
+ // A perfect match, stop completion
+ _cancel_completion();
+ return;
+ }
if (s.is_subsequence_ofi(completion_strings[i])) {
// don't remove duplicates if no input is provided
if (s != "" && completion_options.find(completion_strings[i]) != -1) {
continue;
}
// Calculate the similarity to keep completions in good order
- float similarity = s.similarity(completion_strings[i]);
+ float similarity;
+ if (completion_strings[i].to_lower().begins_with(s.to_lower())) {
+ // Substrings are the best candidates
+ similarity = 1.1;
+ } else {
+ // Otherwise compute the similarity
+ similarity = s.to_lower().similarity(completion_strings[i].to_lower());
+ }
+
int comp_size = completion_options.size();
if (comp_size == 0) {
completion_options.push_back(completion_strings[i]);
@@ -4150,8 +4168,8 @@ void TextEdit::_update_completion_candidates() {
int pos = 0;
do {
comp_sim = sim_cache[pos++];
- } while(pos < comp_size && similarity <= comp_sim);
- pos--; // Pos will be off by one
+ } while(pos < comp_size && similarity < comp_sim);
+ pos = similarity > comp_sim ? pos - 1 : pos; // Pos will be off by one
completion_options.insert(pos, completion_strings[i]);
sim_cache.insert(pos, similarity);
}
@@ -4541,6 +4559,7 @@ TextEdit::TextEdit() {
scroll_past_end_of_file_enabled=false;
auto_brace_completion_enabled=false;
brace_matching_enabled=false;
+ highlight_all_occurrences=false;
auto_indent=false;
insert_mode = false;
window_has_focus=true;