diff --git a/src/source.cc b/src/source.cc index 3e353a9..487b8a9 100644 --- a/src/source.cc +++ b/src/source.cc @@ -188,6 +188,9 @@ Source::View::View(const boost::filesystem::path &file_path, Glib::RefPtrget_iter_at_line(get_buffer()->get_line_count()-1); + if(iter!=get_buffer()->end()) + get_buffer()->insert(get_buffer()->end(), "\n"); std::stringstream stdin_stream(get_buffer()->get_text()), stdout_stream; auto exit_status=Terminal::get().process(stdin_stream, stdout_stream, command, this->file_path.parent_path()); @@ -197,11 +200,35 @@ Source::View::View(const boost::filesystem::path &file_path, Glib::RefPtrset_text(stdout_stream.str()); + //Insert new text without moving scrolled window + auto new_text=stdout_stream.str(); + size_t start_line_index=0; + int line_nr=0; + for(size_t c=0;cget_line_count()) { + auto start_iter=get_buffer()->get_iter_at_line(line_nr); + auto end_iter=get_iter_at_line_end(line_nr); + get_buffer()->erase(start_iter, end_iter); + } + else + get_buffer()->insert(get_buffer()->end(), "\n"); + auto iter=get_buffer()->get_iter_at_line(line_nr); + get_buffer()->insert(iter, new_text.substr(start_line_index, c-start_line_index)); + ++line_nr; + start_line_index=c+1; + } + } + iter=get_buffer()->get_iter_at_line(get_buffer()->get_line_count()-1); + if(iter!=get_buffer()->end()) + get_buffer()->insert(get_buffer()->end(), "\n"); + if(line_nrget_line_count()-1) { + auto iter=get_buffer()->get_iter_at_line(line_nr); + get_buffer()->erase(iter, get_buffer()->end()); + } get_buffer()->end_user_action(); place_cursor_at_line_offset(cursor_line_nr, cursor_line_offset); - scroll_to_cursor_delayed(this, true, false); } }; }