diff --git a/src/source_clang.cc b/src/source_clang.cc index d855131..8325c59 100644 --- a/src/source_clang.cc +++ b/src/source_clang.cc @@ -944,11 +944,26 @@ Source::ClangViewAutocomplete(file_path, project_path, language) { auto exit_code=Singleton::terminal()->execute(stdout_stream, command); if(exit_code==0) { get_source_buffer()->begin_user_action(); - auto cursor_line_nr=get_buffer()->get_insert()->get_iter().get_line(); + auto iter=get_buffer()->get_insert()->get_iter(); + auto cursor_line_nr=iter.get_line(); + auto cursor_line_offset=iter.get_line_offset(); + get_buffer()->erase(get_buffer()->begin(), get_buffer()->end()); get_buffer()->insert(get_buffer()->begin(), stdout_stream.str()); - if(cursor_line_nrget_line_count()) - get_buffer()->place_cursor(get_buffer()->get_iter_at_line(cursor_line_nr)); + + cursor_line_nr=std::min(cursor_line_nr, get_buffer()->get_line_count()-1); + if(cursor_line_nr>=0) { + iter=get_buffer()->get_iter_at_line(cursor_line_nr); + for(int c=0;cplace_cursor(iter); + while(gtk_events_pending()) + gtk_main_iteration(); + scroll_to(get_buffer()->get_insert(), 0.0, 1.0, 0.5); + } get_source_buffer()->end_user_action(); set_tab_char_and_size(' ', tab_size); //clang-format only does basic indentation with spaces as I understand it } diff --git a/src/terminal.cc b/src/terminal.cc index 989e3f4..c710ae1 100644 --- a/src/terminal.cc +++ b/src/terminal.cc @@ -225,7 +225,7 @@ int Terminal::execute(std::iostream &stdout_stream, const std::string &command, next_char_iter++; umessage.replace(iter, next_char_iter, "?"); } - stdout_stream << umessage; + stdout_stream.write(umessage.data(), n); } }); stdout_thread.detach(); diff --git a/src/terminal_win.cc b/src/terminal_win.cc index cd6a927..9d2fcbc 100644 --- a/src/terminal_win.cc +++ b/src/terminal_win.cc @@ -277,7 +277,7 @@ int Terminal::execute(std::iostream &stdout_stream, const std::string &command, next_char_iter++; umessage.replace(iter, next_char_iter, "?"); } - stdout_stream << umessage; + stdout_stream.write(umessage.data(), static_cast(n)); } }); stdout_thread.detach();