diff --git a/src/source.cc b/src/source.cc index 5aff594..05ec290 100644 --- a/src/source.cc +++ b/src/source.cc @@ -331,7 +331,7 @@ void Source::View::configure() { for(unsigned c=0;cend_user_action(); return true; } - //"Smart" backspace key TODO: remove commented out lines if this works + //"Smart" backspace key else if(key->keyval==GDK_KEY_BackSpace && !get_buffer()->get_has_selection()) { auto insert_it=get_buffer()->get_insert()->get_iter(); - //int line_nr=insert_it.get_line(); auto line=get_line_before(); std::smatch sm; if(std::regex_match(line, sm, tabs_regex) && sm[1].str().size()==line.size()) { @@ -854,6 +853,21 @@ bool Source::View::on_key_press_event(GdkEventKey* key) { get_buffer()->erase(insert_it, line_start_iter); } } + //"Smart" delete key + else if(key->keyval==GDK_KEY_Delete && !get_buffer()->get_has_selection()) { + auto insert_iter=get_buffer()->get_insert()->get_iter(); + auto iter=insert_iter; + bool perform_smart_delete=false; + while(*iter==' ' || *iter=='\t' || iter.ends_line()) { + if(iter.ends_line()) + perform_smart_delete=true; + if(!iter.forward_char()) { + break; + } + } + if(perform_smart_delete && iter.backward_char()) + get_buffer()->erase(insert_iter, iter); + } bool stop=Gsv::View::on_key_press_event(key); get_source_buffer()->end_user_action(); @@ -1095,9 +1109,9 @@ void Source::ClangViewParse::configure() { } } - bracket_regex=std::regex(std::string("^(")+tab_char+"*).*\\{ *$"); - no_bracket_statement_regex=std::regex(std::string("^(")+tab_char+"*)(if|for|else if|catch|while) *\\(.*[^;}] *$"); - no_bracket_no_para_statement_regex=std::regex(std::string("^(")+tab_char+"*)(else|try|do) *$"); + bracket_regex=std::regex("^([ \\t]*).*\\{ *$"); + no_bracket_statement_regex=std::regex("^([ \\t]*)(if|for|else if|catch|while) *\\(.*[^;}] *$"); + no_bracket_no_para_statement_regex=std::regex("^([ \\t]*)(else|try|do) *$"); } Source::ClangViewParse::~ClangViewParse() {