Browse Source

Improved clang-format support: no longer scrolls window when using clang-format

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

31
src/source.cc

@ -188,6 +188,9 @@ Source::View::View(const boost::filesystem::path &file_path, Glib::RefPtr<Gsv::L
command+="}\""; command+="}\"";
} }
auto 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");
std::stringstream stdin_stream(get_buffer()->get_text()), stdout_stream; 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()); 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::RefPtr<Gsv::L
auto cursor_line_nr=iter.get_line(); auto cursor_line_nr=iter.get_line();
auto cursor_line_offset=iter.get_line_offset(); auto cursor_line_offset=iter.get_line_offset();
get_buffer()->set_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;c<new_text.size();++c) {
if(new_text[c]=='\n') {
if(line_nr<get_buffer()->get_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_nr<get_buffer()->get_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(); get_buffer()->end_user_action();
place_cursor_at_line_offset(cursor_line_nr, cursor_line_offset); place_cursor_at_line_offset(cursor_line_nr, cursor_line_offset);
scroll_to_cursor_delayed(this, true, false);
} }
}; };
} }

Loading…
Cancel
Save