Browse Source

Minor cleanup and made insertion of ' and " more restrictive

merge-requests/365/head
eidheim 9 years ago
parent
commit
a4619cdb74
  1. 64
      src/source.cc
  2. 2
      src/source_spellcheck.cc

64
src/source.cc

@ -1228,15 +1228,13 @@ bool Source::View::on_key_press_event(GdkEventKey* key) {
get_buffer()->begin_user_action(); get_buffer()->begin_user_action();
if(!spellcheck_all) { if(Config::get().source.smart_brackets && on_key_press_event_smart_brackets(key)) {
if(Config::get().source.smart_brackets && on_key_press_event_smart_brackets(key)) { get_buffer()->end_user_action();
get_buffer()->end_user_action(); return true;
return true; }
} if(Config::get().source.smart_insertions && on_key_press_event_smart_insertions(key)) {
if(Config::get().source.smart_insertions && on_key_press_event_smart_insertions(key)) { get_buffer()->end_user_action();
get_buffer()->end_user_action(); return true;
return true;
}
} }
if(get_buffer()->get_has_selection()) { if(get_buffer()->get_has_selection()) {
@ -1797,6 +1795,12 @@ bool Source::View::on_key_press_event_smart_insertions(GdkEventKey *key) {
auto next_iter=iter; auto next_iter=iter;
next_iter.forward_char(); next_iter.forward_char();
auto allow_insertion=[](const Gtk::TextIter &iter) {
if(iter.ends_line() || *iter==' ' || *iter=='\t' || *iter==';' || *iter==')' || *iter==']' || *iter=='[' || *iter=='{' || *iter=='}')
return true;
return false;
};
// Move right when clicking ' before a ' or when clicking " before a " // Move right when clicking ' before a ' or when clicking " before a "
if(((key->keyval==GDK_KEY_apostrophe && *iter=='\'') || if(((key->keyval==GDK_KEY_apostrophe && *iter=='\'') ||
(key->keyval==GDK_KEY_quotedbl && *iter=='\"')) && is_code_iter(next_iter)) { (key->keyval==GDK_KEY_quotedbl && *iter=='\"')) && is_code_iter(next_iter)) {
@ -1830,31 +1834,25 @@ bool Source::View::on_key_press_event_smart_insertions(GdkEventKey *key) {
if(is_code_iter(iter)) { if(is_code_iter(iter)) {
// Insert () // Insert ()
if(key->keyval==GDK_KEY_parenleft) { if(key->keyval==GDK_KEY_parenleft && allow_insertion(iter)) {
//Allowed symbols if(symbol_count(iter, '(', ')')==0) {
if(iter.ends_line() || *iter==' ' || *iter=='\t' || *iter==';' || *iter==')' || *iter==']' || *iter=='[' || *iter=='{' || *iter=='}') { get_buffer()->insert_at_cursor("()");
if(symbol_count(iter, '(', ')')==0) { auto iter=get_buffer()->get_insert()->get_iter();
get_buffer()->insert_at_cursor("()"); iter.backward_char();
auto iter=get_buffer()->get_insert()->get_iter(); get_buffer()->place_cursor(iter);
iter.backward_char(); scroll_to(get_buffer()->get_insert());
get_buffer()->place_cursor(iter); return true;
scroll_to(get_buffer()->get_insert());
return true;
}
} }
} }
// Insert [] // Insert []
else if(key->keyval==GDK_KEY_bracketleft) { else if(key->keyval==GDK_KEY_bracketleft && allow_insertion(iter)) {
//Allowed symbols if(symbol_count(iter, '[', ']')==0) {
if(iter.ends_line() || *iter==' ' || *iter=='\t' || *iter==';' || *iter==')' || *iter==']' || *iter=='[' || *iter=='{' || *iter=='}') { get_buffer()->insert_at_cursor("[]");
if(symbol_count(iter, '[', ']')==0) { auto iter=get_buffer()->get_insert()->get_iter();
get_buffer()->insert_at_cursor("[]"); iter.backward_char();
auto iter=get_buffer()->get_insert()->get_iter(); get_buffer()->place_cursor(iter);
iter.backward_char(); scroll_to(get_buffer()->get_insert());
get_buffer()->place_cursor(iter); return true;
scroll_to(get_buffer()->get_insert());
return true;
}
} }
} }
// Move left on ] in [] // Move left on ] in []
@ -1889,7 +1887,7 @@ bool Source::View::on_key_press_event_smart_insertions(GdkEventKey *key) {
// } // }
// } // }
// Insert '' // Insert ''
else if(key->keyval==GDK_KEY_apostrophe && symbol_count(iter, '\'', -1)%2==0) { else if(key->keyval==GDK_KEY_apostrophe && allow_insertion(iter) && symbol_count(iter, '\'', -1)%2==0) {
get_buffer()->insert_at_cursor("''"); get_buffer()->insert_at_cursor("''");
auto iter=get_buffer()->get_insert()->get_iter(); auto iter=get_buffer()->get_insert()->get_iter();
iter.backward_char(); iter.backward_char();
@ -1898,7 +1896,7 @@ bool Source::View::on_key_press_event_smart_insertions(GdkEventKey *key) {
return true; return true;
} }
// Insert "" // Insert ""
else if(key->keyval==GDK_KEY_quotedbl && symbol_count(iter, '"', -1)%2==0) { else if(key->keyval==GDK_KEY_quotedbl && allow_insertion(iter) && symbol_count(iter, '"', -1)%2==0) {
get_buffer()->insert_at_cursor("\"\""); get_buffer()->insert_at_cursor("\"\"");
auto iter=get_buffer()->get_insert()->get_iter(); auto iter=get_buffer()->get_insert()->get_iter();
iter.backward_char(); iter.backward_char();

2
src/source_spellcheck.cc

@ -308,6 +308,8 @@ void Source::SpellCheckView::goto_next_spellcheck_error() {
} }
bool Source::SpellCheckView::is_code_iter(const Gtk::TextIter &iter) { bool Source::SpellCheckView::is_code_iter(const Gtk::TextIter &iter) {
if(spellcheck_all)
return false;
if(*iter=='\'') { if(*iter=='\'') {
auto previous_iter=iter; auto previous_iter=iter;
if(!iter.starts_line() && previous_iter.backward_char() && *previous_iter=='\'') if(!iter.starts_line() && previous_iter.backward_char() && *previous_iter=='\'')

Loading…
Cancel
Save