Browse Source

Smart indenting after enter when line ends with ':'.

merge-requests/365/head
eidheim 10 years ago
parent
commit
a93c159c69
  1. 29
      src/source.cc

29
src/source.cc

@ -1534,6 +1534,35 @@ bool Source::ClangViewParse::on_key_press_event(GdkEventKey* key) {
}
}
}
//Indenting after ':'
else if(*iter==':') {
auto previous_sentence_iter=get_buffer()->get_iter_at_line(iter.get_line());
while(previous_sentence_iter && (*previous_sentence_iter==tab_char || previous_sentence_iter.ends_line())) {
previous_sentence_iter.backward_char();
}
if(!previous_sentence_iter.ends_line())
previous_sentence_iter.forward_char();
Gtk::TextIter start_of_previous_sentence_iter;
if(find_start_of_closed_expression(previous_sentence_iter, start_of_previous_sentence_iter)) {
std::smatch sm;
auto start_previous_sentence=get_line_before(start_of_previous_sentence_iter);
if(std::regex_match(start_previous_sentence, sm, tabs_regex)) {
if(tabs.size()==(sm[1].str().size()+tab_size)) {
auto start_line_iter=get_buffer()->get_iter_at_line(iter.get_line());
auto start_line_plus_tab_size=start_line_iter;
for(size_t c=0;c<tab_size;c++)
start_line_plus_tab_size.forward_char();
get_buffer()->erase(start_line_iter, start_line_plus_tab_size);
}
else {
get_source_buffer()->insert_at_cursor("\n"+tabs+tab);
scroll_to(get_source_buffer()->get_insert());
get_source_buffer()->end_user_action();
return true;
}
}
}
}
get_source_buffer()->insert_at_cursor("\n"+tabs);
scroll_to(get_source_buffer()->get_insert());
get_source_buffer()->end_user_action();

Loading…
Cancel
Save