diff --git a/src/terminal.cc b/src/terminal.cc index 249cda7..4a3ecc6 100644 --- a/src/terminal.cc +++ b/src/terminal.cc @@ -124,15 +124,6 @@ Terminal::Terminal() { bold_tag=get_buffer()->create_tag(); bold_tag->property_weight()=PANGO_WEIGHT_BOLD; - signal_size_allocate().connect([this](Gtk::Allocation& allocation){ - auto iter=get_buffer()->end(); - if(iter.backward_char()) { - auto mark=get_buffer()->create_mark(iter); - scroll_to(mark, 0.0, 1.0, 1.0); - get_buffer()->delete_mark(mark); - } - }); - async_print_dispatcher.connect([this](){ async_print_strings_mutex.lock(); if(async_print_strings.size()>0) { @@ -295,13 +286,6 @@ size_t Terminal::print(const std::string &message, bool bold){ get_buffer()->insert_with_tag(get_buffer()->end(), umessage, bold_tag); else get_buffer()->insert(get_buffer()->end(), umessage); - - /*auto end_iter=get_buffer()->end(); - if(end_iter.backward_char()) { - auto mark=get_buffer()->create_mark(end_iter); - scroll_to(mark, 0.0, 1.0, 1.0); - get_buffer()->delete_mark(mark); - }*/ if(get_buffer()->get_line_count()>Singleton::Config::terminal()->history_size) { int lines=get_buffer()->get_line_count()-Singleton::Config::terminal()->history_size; @@ -327,11 +311,6 @@ void Terminal::print(size_t line_nr, const std::string &message){ auto end_line_iter=get_buffer()->get_iter_at_line(static_cast(line_nr-deleted_lines)); while(!end_line_iter.ends_line() && end_line_iter.forward_char()) {} get_buffer()->insert(end_line_iter, umessage); - - if(get_buffer()->get_line_count()>Singleton::Config::terminal()->history_size) { - int lines=get_buffer()->get_line_count()-Singleton::Config::terminal()->history_size; - get_buffer()->erase(get_buffer()->begin(), get_buffer()->get_iter_at_line(lines)); - } } std::shared_ptr Terminal::print_in_progress(std::string start_msg) { @@ -370,7 +349,6 @@ bool Terminal::on_key_press_event(GdkEventKey *event) { if(unicode>=32 && unicode<=126) { stdin_buffer+=chr; get_buffer()->insert_at_cursor(stdin_buffer.substr(stdin_buffer.size()-1)); - scroll_to(get_buffer()->get_insert()); } else if(event->keyval==GDK_KEY_BackSpace) { if(stdin_buffer.size()>0 && get_buffer()->get_char_count()>0) { @@ -378,14 +356,12 @@ bool Terminal::on_key_press_event(GdkEventKey *event) { iter--; stdin_buffer.pop_back(); get_buffer()->erase(iter, get_buffer()->end()); - scroll_to(get_buffer()->get_insert()); } } else if(event->keyval==GDK_KEY_Return) { stdin_buffer+='\n'; write(async_executes.back().second, stdin_buffer.c_str(), stdin_buffer.size()); get_buffer()->insert_at_cursor(stdin_buffer.substr(stdin_buffer.size()-1)); - scroll_to(get_buffer()->get_insert()); stdin_buffer.clear(); } } diff --git a/src/terminal_win.cc b/src/terminal_win.cc index 1296b45..ba65bfe 100644 --- a/src/terminal_win.cc +++ b/src/terminal_win.cc @@ -161,15 +161,6 @@ Terminal::Terminal() { bold_tag=get_buffer()->create_tag(); bold_tag->property_weight()=PANGO_WEIGHT_BOLD; - signal_size_allocate().connect([this](Gtk::Allocation& allocation){ - auto iter=get_buffer()->end(); - if(iter.backward_char()) { - auto mark=get_buffer()->create_mark(iter); - scroll_to(mark, 0.0, 1.0, 1.0); - get_buffer()->delete_mark(mark); - } - }); - async_print_dispatcher.connect([this](){ async_print_strings_mutex.lock(); if(async_print_strings.size()>0) { @@ -344,13 +335,6 @@ size_t Terminal::print(const std::string &message, bool bold){ get_buffer()->insert_with_tag(get_buffer()->end(), umessage, bold_tag); else get_buffer()->insert(get_buffer()->end(), umessage); - - /*auto end_iter=get_buffer()->end(); - if(end_iter.backward_char()) { - auto mark=get_buffer()->create_mark(end_iter); - scroll_to(mark, 0.0, 1.0, 1.0); - get_buffer()->delete_mark(mark); - }*/ if(get_buffer()->get_line_count()>Singleton::Config::terminal()->history_size) { int lines=get_buffer()->get_line_count()-Singleton::Config::terminal()->history_size; @@ -376,14 +360,8 @@ void Terminal::print(size_t line_nr, const std::string &message){ auto end_line_iter=get_buffer()->get_iter_at_line(static_cast(line_nr-deleted_lines)); while(!end_line_iter.ends_line() && end_line_iter.forward_char()) {} get_buffer()->insert(end_line_iter, umessage); - - if(get_buffer()->get_line_count()>Singleton::Config::terminal()->history_size) { - int lines=get_buffer()->get_line_count()-Singleton::Config::terminal()->history_size; - get_buffer()->erase(get_buffer()->begin(), get_buffer()->get_iter_at_line(lines)); - } } - std::shared_ptr Terminal::print_in_progress(std::string start_msg) { std::shared_ptr in_progress=std::shared_ptr(new Terminal::InProgress(start_msg)); return in_progress; @@ -420,7 +398,6 @@ bool Terminal::on_key_press_event(GdkEventKey *event) { if(unicode>=32 && unicode<=126) { stdin_buffer+=chr; get_buffer()->insert_at_cursor(stdin_buffer.substr(stdin_buffer.size()-1)); - scroll_to(get_buffer()->get_insert()); } else if(event->keyval==GDK_KEY_BackSpace) { if(stdin_buffer.size()>0 && get_buffer()->get_char_count()>0) { @@ -428,7 +405,6 @@ bool Terminal::on_key_press_event(GdkEventKey *event) { iter--; stdin_buffer.pop_back(); get_buffer()->erase(iter, get_buffer()->end()); - scroll_to(get_buffer()->get_insert()); } } else if(event->keyval==GDK_KEY_Return) { @@ -437,7 +413,6 @@ bool Terminal::on_key_press_event(GdkEventKey *event) { WriteFile(async_executes.back().second, stdin_buffer.c_str(), stdin_buffer.size(), &written, NULL); //TODO: is this line needed? get_buffer()->insert_at_cursor(stdin_buffer.substr(stdin_buffer.size()-1)); - scroll_to(get_buffer()->get_insert()); stdin_buffer.clear(); } } diff --git a/src/window.cc b/src/window.cc index 21fc2c1..82966a5 100644 --- a/src/window.cc +++ b/src/window.cc @@ -58,6 +58,7 @@ Window::Window() : box(Gtk::ORIENTATION_VERTICAL), notebook(directories), compil terminal_scrolled_window.add(*Singleton::terminal()); terminal_vbox.pack_start(terminal_scrolled_window); + info_and_status_hbox.pack_start(*Singleton::info(), Gtk::PACK_SHRINK); info_and_status_hbox.pack_end(*Singleton::status(), Gtk::PACK_SHRINK); terminal_vbox.pack_end(info_and_status_hbox, Gtk::PACK_SHRINK); @@ -70,6 +71,13 @@ Window::Window() : box(Gtk::ORIENTATION_VERTICAL), notebook(directories), compil notebook.open(file); }; + //Scroll to end of terminal whenever info is printed + Singleton::terminal()->signal_size_allocate().connect([this](Gtk::Allocation& allocation){ + auto adjustment=terminal_scrolled_window.get_vadjustment(); + adjustment->set_value(adjustment->get_upper()-adjustment->get_page_size()); + Singleton::terminal()->queue_draw(); + }); + entry_box.signal_show().connect([this](){ box.set_focus_chain({&vpaned}); vpaned.set_focus_chain({&directory_and_notebook_panes});