Skip to content
This repository has been archived by the owner on Jun 25, 2020. It is now read-only.

Commit

Permalink
Added reload functionality by re-writing the textbuffer
Browse files Browse the repository at this point in the history
  • Loading branch information
insunaa committed Sep 29, 2016
1 parent 2fbf275 commit 14f6e33
Show file tree
Hide file tree
Showing 3 changed files with 34 additions and 2 deletions.
32 changes: 32 additions & 0 deletions src/notebook.cc
Original file line number Diff line number Diff line change
Expand Up @@ -128,6 +128,38 @@ std::vector<Source::View*> &Notebook::get_views() {
return source_views;
}

void Notebook::reload(const boost::filesystem::path &file_path, size_t notebook_index) {
if(boost::filesystem::exists(file_path)) {
std::ifstream can_read(file_path.string());
if(!can_read) {
Terminal::get().print("Error: could not open "+file_path.string()+"\n", true);
return;
}
can_read.close();
}

auto last_view=get_current_view();
int offset = last_view->get_buffer()->get_insert()->get_iter().get_offset();
int line = last_view->get_buffer()->get_insert()->get_iter().get_line();

auto language=Source::guess_language(file_path);
last_view->get_buffer()->erase(last_view->get_buffer()->begin(), last_view->get_buffer()->end());
last_view->get_source_buffer()->begin_not_undoable_action();
if(language) {
if(filesystem::read_non_utf8(file_path, last_view->get_buffer())==-1)
Terminal::get().print("Warning: "+file_path.string()+" is not a valid UTF-8 file. Saving might corrupt the file.\n");
}
else {
if(filesystem::read(file_path, last_view->get_buffer())==-1)
Terminal::get().print("Error: "+file_path.string()+" is not a valid UTF-8 file.\n", true);
}

last_view->get_source_buffer()->end_not_undoable_action();

last_view->place_cursor_at_line_offset(line, offset);
last_view->get_buffer()->set_modified(true);
}

void Notebook::open(const boost::filesystem::path &file_path, size_t notebook_index) {
if(notebook_index==1 && !split)
toggle_split();
Expand Down
1 change: 1 addition & 0 deletions src/notebook.h
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,7 @@ class Notebook : public Gtk::HPaned {
std::vector<Source::View*> &get_views();

void open(const boost::filesystem::path &file_path, size_t notebook_index=-1);
void reload(const boost::filesystem::path &file_path, size_t notebook_index=-1);
void configure(size_t index);
bool save(size_t index);
bool save_current();
Expand Down
3 changes: 1 addition & 2 deletions src/window.cc
Original file line number Diff line number Diff line change
Expand Up @@ -321,8 +321,7 @@ void Window::set_menu_actions() {

menu.add_action("reload_file", [this]() {
auto path = Notebook::get().get_current_view()->file_path;
Notebook::get().close_current();
Notebook::get().open(path);
Notebook::get().reload(path);
});

menu.add_action("save", [this]() {
Expand Down

0 comments on commit 14f6e33

Please sign in to comment.