diff --git a/src/source.cc b/src/source.cc index 7c73e9d..5aa9665 100644 --- a/src/source.cc +++ b/src/source.cc @@ -2073,15 +2073,30 @@ bool Source::View::on_key_press_event_bracket_language(GdkEventKey* key) { // return (\n // ReactDOM.render(\n
\n if(open_non_curly_bracket_iter_found && (*open_non_curly_bracket_iter=='[' || *open_non_curly_bracket_iter=='(')) { - if(condition_iter.get_line()==open_non_curly_bracket_iter.get_line()) - tabs=get_line_before(start_iter)+tab; + // If next line should have an extra tab: + if(condition_iter.get_line()==open_non_curly_bracket_iter.get_line()) { + get_buffer()->insert_at_cursor("\n"+tabs+tab); + scroll_to(get_buffer()->get_insert()); + return true; + } + // Indent as in current or next line: else { - start_iter=get_tabs_end_iter(get_buffer()->get_iter_at_line(condition_iter.get_line())); - tabs=get_line_before(start_iter); + auto start_iter=get_tabs_end_iter(get_buffer()->get_iter_at_line(condition_iter.get_line())); + auto tabs=get_line_before(start_iter); + + int line_nr=iter.get_line(); + if(iter.ends_line() && (line_nr+1)get_line_count()) { + auto next_line_tabs=get_line_before(get_tabs_end_iter(line_nr+1)); + if(next_line_tabs.size()>tabs.size()) { + get_buffer()->insert_at_cursor("\n"+next_line_tabs); + scroll_to(get_buffer()->get_insert()); + return true; + } + } + get_buffer()->insert_at_cursor("\n"+tabs); + scroll_to(get_buffer()->get_insert()); + return true; } - get_buffer()->insert_at_cursor("\n"+tabs); - scroll_to(get_buffer()->get_insert()); - return true; } }