diff --git a/src/source.cc b/src/source.cc index 0c9a384..8580112 100644 --- a/src/source.cc +++ b/src/source.cc @@ -1735,15 +1735,19 @@ bool Source::View::on_key_press_event_bracket_language(GdkEventKey* key) { if(*previous_iter=='{') { Gtk::TextIter found_iter; - bool found_right_bracket=find_close_curly_bracket_forward(iter, found_iter); - + // Check if an '}' is needed bool has_right_curly_bracket=false; + bool found_right_bracket=find_close_curly_bracket_forward(iter, found_iter); if(found_right_bracket) { auto tabs_end_iter=get_tabs_end_iter(found_iter); auto line_tabs=get_line_before(tabs_end_iter); if(tabs.size()==line_tabs.size()) has_right_curly_bracket=true; } + // special case for functions and classes with no indentation after: namespace { + if(tabs.empty() && has_right_curly_bracket) + has_right_curly_bracket=symbol_count(iter, '{', '}')!=1; + if(*get_buffer()->get_insert()->get_iter()=='}') { get_buffer()->insert_at_cursor("\n"+tabs+tab+"\n"+tabs); auto insert_it = get_buffer()->get_insert()->get_iter(); diff --git a/src/source.h b/src/source.h index 0dd6366..2c5fcd1 100644 --- a/src/source.h +++ b/src/source.h @@ -129,6 +129,7 @@ namespace Source { Gtk::TextIter get_tabs_end_iter(int line_nr); Gtk::TextIter get_tabs_end_iter(); + /// Usually returns at start of line, but not always Gtk::TextIter find_start_of_sentence(Gtk::TextIter iter); bool find_open_non_curly_bracket_backward(Gtk::TextIter iter, Gtk::TextIter &found_iter); bool find_open_curly_bracket_backward(Gtk::TextIter iter, Gtk::TextIter &found_iter);