diff --git a/src/source.cc b/src/source.cc index 5ff6040..b9bf05e 100644 --- a/src/source.cc +++ b/src/source.cc @@ -2334,7 +2334,8 @@ bool Source::View::on_key_press_event_bracket_language(GdkEventKey *key) { else if(iter.starts_line() && iter.ends_line() && !get_buffer()->get_has_selection()) { // Indenting after for instance: if(...)\n...;\n auto condition_iter = iter; - condition_iter.backward_char(); + while(condition_iter.starts_line() && condition_iter.backward_char()) { + } condition_iter = find_non_whitespace_code_iter_backward(condition_iter); if(*condition_iter == ';' && condition_iter.get_line() > 0 && is_code_iter(condition_iter)) { auto start_iter = get_start_of_expression(condition_iter); diff --git a/tests/source_key_test.cc b/tests/source_key_test.cc index effd8b2..8810061 100644 --- a/tests/source_key_test.cc +++ b/tests/source_key_test.cc @@ -2104,6 +2104,22 @@ int main() { iter.forward_to_line_end(); g_assert(buffer->get_insert()->get_iter() == iter); } + { + buffer->set_text(" if(true)\n" + " ;\n" + "\n" + "\n"); + auto iter = buffer->get_iter_at_line(3); + buffer->place_cursor(iter); + view.on_key_press_event(&event); + g_assert(buffer->get_text() == " if(true)\n" + " ;\n" + "\n" + " \n"); + iter = buffer->get_iter_at_line(3); + iter.forward_to_line_end(); + g_assert(buffer->get_insert()->get_iter() == iter); + } { view.set_tab_char_and_size('\t', 1); buffer->set_text("\t\tif(true)\n"