From 8cfa2346247228eecdc43eda7bd3d9eb22ba0699 Mon Sep 17 00:00:00 2001 From: eidheim Date: Sun, 20 May 2018 10:22:33 +0200 Subject: [PATCH] Language protocol: in workaround of missing '(' in autocomplete insert, now moves cursor after ')' in case of no parameters. Also added correct indentation on enter after ':' for Python. --- src/source.cc | 19 ++++++++++++------- src/source_language_protocol.cc | 8 ++++++-- 2 files changed, 18 insertions(+), 9 deletions(-) diff --git a/src/source.cc b/src/source.cc index e40b863..81aad22 100644 --- a/src/source.cc +++ b/src/source.cc @@ -1630,13 +1630,18 @@ bool Source::View::on_key_press_event_basic(GdkEventKey* key) { iter=get_buffer()->get_insert()->get_iter(); auto tabs=get_line_before(get_tabs_end_iter(iter)); - int line_nr=iter.get_line(); - if(iter.ends_line() && (line_nr+1)get_line_count()) { - auto next_line_tabs=get_line_before(get_tabs_end_iter(line_nr+1)); - if(next_line_tabs.size()>tabs.size()) { - get_buffer()->insert_at_cursor("\n"+next_line_tabs); - scroll_to(get_buffer()->get_insert()); - return true; + auto previous_iter=iter; + if(previous_iter.backward_char() && *previous_iter==':' && language && language->get_id()=="python") // Python indenting after : + tabs+=tab; + else { + int line_nr=iter.get_line(); + if(iter.ends_line() && (line_nr+1)get_line_count()) { + auto next_line_tabs=get_line_before(get_tabs_end_iter(line_nr+1)); + if(next_line_tabs.size()>tabs.size()) { + get_buffer()->insert_at_cursor("\n"+next_line_tabs); + scroll_to(get_buffer()->get_insert()); + return true; + } } } get_buffer()->insert_at_cursor("\n"+tabs); diff --git a/src/source_language_protocol.cc b/src/source_language_protocol.cc index 50906ba..94e23cd 100644 --- a/src/source_language_protocol.cc +++ b/src/source_language_protocol.cc @@ -1229,8 +1229,12 @@ void Source::LanguageProtocolView::setup_autocomplete() { // In case ( is missing in insert but is present in label if(label.size()>insert.size() && label.back()==')' && insert.find('(')==std::string::npos) { auto pos=label.find('('); - if(pos!=std::string::npos && pos==insert.size() && pos+1