From 19887dff276bcfe42200063e9975b1a43ac1ac6a Mon Sep 17 00:00:00 2001 From: eidheim Date: Thu, 10 Sep 2020 09:19:22 +0200 Subject: [PATCH] Fixes #438: improved detection and handling of closing curly bracket in special circumstances --- src/source.cpp | 10 ++++++++++ tests/source_key_test.cpp | 14 ++++++++++++++ 2 files changed, 24 insertions(+) diff --git a/src/source.cpp b/src/source.cpp index f7bc78e..b7f0cc6 100644 --- a/src/source.cpp +++ b/src/source.cpp @@ -2542,6 +2542,16 @@ bool Source::View::on_key_press_event_bracket_language(GdkEventKey *event) { } } } + /** + * Handle pressing enter after '{' in special expressions like: + * enum class A { a, + * b } + */ + else if(close_iter.get_line() > condition_iter.get_line() && close_iter.get_line_offset() > condition_iter.get_line_offset()) { + get_buffer()->insert_at_cursor('\n' + get_line_before(get_tabs_end_iter(condition_iter.get_line() + 1))); + scroll_to(get_buffer()->get_insert()); + return true; + } } // Check if one should add semicolon after '}' diff --git a/tests/source_key_test.cpp b/tests/source_key_test.cpp index 6e8bedf..51f63ae 100644 --- a/tests/source_key_test.cpp +++ b/tests/source_key_test.cpp @@ -588,6 +588,20 @@ int main() { g_assert(buffer->get_insert()->get_iter().get_line_offset() == 4); } + { + buffer->set_text(" enum class A { a,\n" + " b };"); + auto iter = buffer->begin(); + iter.forward_chars(16); + buffer->place_cursor(iter); + view.on_key_press_event(&event); + g_assert(buffer->get_text() == " enum class A {\n" + " a,\n" + " b };"); + g_assert(buffer->get_insert()->get_iter().get_line() == 1); + g_assert(buffer->get_insert()->get_iter().get_line_offset() == 17); + } + { buffer->set_text(" else"); view.on_key_press_event(&event);