From 2150557600909ce8c460ea7c00da7f6fb072339b Mon Sep 17 00:00:00 2001 From: eidheim Date: Wed, 7 Sep 2016 10:25:58 +0200 Subject: [PATCH] Added preference item: smart_brackets --- CMakeLists.txt | 2 +- src/config.cc | 2 ++ src/config.h | 2 ++ src/files.h | 2 ++ src/source.cc | 68 ++++++++++++++++++++++++++------------------------ 5 files changed, 42 insertions(+), 34 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 6f7d947..3edeed3 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,7 +1,7 @@ cmake_minimum_required (VERSION 2.8.8) project(juci) -set(JUCI_VERSION "1.2.1.2") +set(JUCI_VERSION "1.2.1.3") set(CPACK_PACKAGE_NAME "jucipp") set(CPACK_PACKAGE_CONTACT "Ole Christian Eidheim ") diff --git a/src/config.cc b/src/config.cc index 74c2a67..0bb4802 100644 --- a/src/config.cc +++ b/src/config.cc @@ -193,6 +193,8 @@ void Config::get_source() { source.cleanup_whitespace_characters=source_json.get("cleanup_whitespace_characters"); source.show_whitespace_characters=source_json.get("show_whitespace_characters"); + + source.smart_brackets=source_json.get("smart_brackets"); source.show_map = source_json.get("show_map"); source.map_font_size = source_json.get("map_font_size"); diff --git a/src/config.h b/src/config.h index 6d1c0d4..3a7458f 100644 --- a/src/config.h +++ b/src/config.h @@ -60,6 +60,8 @@ public: bool cleanup_whitespace_characters; std::string show_whitespace_characters; + bool smart_brackets; + bool show_map; std::string map_font_size; bool show_git_diff; diff --git a/src/files.h b/src/files.h index 8893977..8227fa8 100644 --- a/src/files.h +++ b/src/files.h @@ -41,6 +41,8 @@ R"RAW( "cleanup_whitespace_characters": false, "show_whitespace_characters_comment": "Determines what kind of whitespaces should be drawn. Use comma-separated list of: space, tab, newline, nbsp, leading, text, trailing or all", "show_whitespace_characters": "", + "smart_brackets_comment": "When inserting an already closed bracket, the cursor might instead be moved, avoiding the need of arrow keys after autocomplete", + "smart_brackets": true, "show_map": true, "map_font_size": "1", "show_git_diff": true, diff --git a/src/source.cc b/src/source.cc index 41995f6..932d5bc 100644 --- a/src/source.cc +++ b/src/source.cc @@ -1683,43 +1683,45 @@ bool Source::View::on_key_press_event_bracket_language(GdkEventKey* key) { } } } - //Move after ')' if closed expression - else if(key->keyval==GDK_KEY_parenright) { - if(*iter==')') { - if(open_close_bracket_count(iter, '(', ')')==0) { - iter.forward_char(); - get_buffer()->place_cursor(iter); - scroll_to(get_buffer()->get_insert()); - get_buffer()->end_user_action(); - return true; + if(Config::get().source.smart_brackets) { + //Move after ')' if closed expression + if(key->keyval==GDK_KEY_parenright) { + if(*iter==')') { + if(open_close_bracket_count(iter, '(', ')')==0) { + iter.forward_char(); + get_buffer()->place_cursor(iter); + scroll_to(get_buffer()->get_insert()); + get_buffer()->end_user_action(); + return true; + } } } - } - //Move after '>' if >( and closed expression - else if(key->keyval==GDK_KEY_greater) { - if(*iter=='>') { - iter.forward_char(); - Gtk::TextIter parenthesis_end_iter; - if(*iter=='(' && is_templated_function(iter, parenthesis_end_iter)) { - get_buffer()->place_cursor(iter); - scroll_to(get_buffer()->get_insert()); - get_buffer()->end_user_action(); - return true; + //Move after '>' if >( and closed expression + else if(key->keyval==GDK_KEY_greater) { + if(*iter=='>') { + iter.forward_char(); + Gtk::TextIter parenthesis_end_iter; + if(*iter=='(' && is_templated_function(iter, parenthesis_end_iter)) { + get_buffer()->place_cursor(iter); + scroll_to(get_buffer()->get_insert()); + get_buffer()->end_user_action(); + return true; + } } } - } - //Move after '(' if >( and select text inside parentheses - else if(key->keyval==GDK_KEY_parenleft) { - auto previous_iter=iter; - previous_iter.backward_char(); - if(*previous_iter=='>') { - Gtk::TextIter parenthesis_end_iter; - if(*iter=='(' && is_templated_function(iter, parenthesis_end_iter)) { - iter.forward_char(); - get_buffer()->select_range(iter, parenthesis_end_iter); - scroll_to(iter); - get_buffer()->end_user_action(); - return true; + //Move after '(' if >( and select text inside parentheses + else if(key->keyval==GDK_KEY_parenleft) { + auto previous_iter=iter; + previous_iter.backward_char(); + if(*previous_iter=='>') { + Gtk::TextIter parenthesis_end_iter; + if(*iter=='(' && is_templated_function(iter, parenthesis_end_iter)) { + iter.forward_char(); + get_buffer()->select_range(iter, parenthesis_end_iter); + scroll_to(iter); + get_buffer()->end_user_action(); + return true; + } } } }