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;
}
}