Browse Source

Fixes #281: )-key moves cursor forward instead of inserting ) when appropriate

merge-requests/365/head
eidheim 9 years ago
parent
commit
bb8109b7c4
  1. 59
      src/source.cc

59
src/source.cc

@ -1139,7 +1139,7 @@ bool Source::View::on_key_press_event(GdkEventKey* key) {
return on_key_press_event_basic(key);
auto iter=get_buffer()->get_insert()->get_iter();
if(iter.backward_char() && (get_source_buffer()->iter_has_context_class(iter, "comment") || get_source_buffer()->iter_has_context_class(iter, "string")))
if(get_source_buffer()->iter_has_context_class(iter, "comment") || get_source_buffer()->iter_has_context_class(iter, "string"))
return on_key_press_event_basic(key);
if(is_bracket_language)
@ -1595,6 +1595,63 @@ bool Source::View::on_key_press_event_bracket_language(GdkEventKey* key) {
}
}
}
//Move after ')' if closed expression
else if(key->keyval==GDK_KEY_parenright) {
if(*iter==')') {
Gtk::TextIter found_iter;
auto bracket_count=[this](Gtk::TextIter iter) {
int para_count=0;
int curly_count=0;
auto iter_stored=iter;
do {
if(!get_source_buffer()->iter_has_context_class(iter, "comment") && !get_source_buffer()->iter_has_context_class(iter, "string")) {
if(*iter==')')
para_count++;
else if(*iter=='(')
para_count--;
else if(*iter=='}')
curly_count++;
else if(*iter=='{')
curly_count--;
if(curly_count<0)
break;
}
} while(iter.backward_char());
iter=iter_stored;
if(!iter.forward_char()) {
return para_count;
}
curly_count=0;
do {
if(!get_source_buffer()->iter_has_context_class(iter, "comment") && !get_source_buffer()->iter_has_context_class(iter, "string")) {
if(*iter==')')
para_count++;
else if(*iter=='(')
para_count--;
else if(*iter=='}')
curly_count++;
else if(*iter=='{')
curly_count--;
if(curly_count>0)
break;
}
} while(iter.forward_char());
return para_count;
};
if(bracket_count(iter)==0) {
iter.forward_char();
get_buffer()->place_cursor(iter);
scroll_to(get_buffer()->get_insert());
get_buffer()->end_user_action();
return true;
}
}
}
get_buffer()->end_user_action();
return on_key_press_event_basic(key);

Loading…
Cancel
Save