Browse Source

Fixed fix of fix of #60.

merge-requests/365/head
eidheim 10 years ago
parent
commit
f8d933c31d
  1. 24
      src/terminal.cc
  2. 25
      src/terminal_win.cc
  3. 8
      src/window.cc

24
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<int>(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::InProgress> 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();
}
}

25
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<int>(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::InProgress> Terminal::print_in_progress(std::string start_msg) {
std::shared_ptr<Terminal::InProgress> in_progress=std::shared_ptr<Terminal::InProgress>(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();
}
}

8
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});

Loading…
Cancel
Save