Browse Source

Fixes #60, default max terminal buffer size is now 1000.

merge-requests/365/head
eidheim 10 years ago
parent
commit
bcd8a1a4e3
  1. 1
      src/config.cc
  2. 1
      src/files.h
  3. 20
      src/terminal.cc
  4. 3
      src/terminal.h
  5. 52
      src/terminal_win.cc

1
src/config.cc

@ -62,6 +62,7 @@ void MainConfig::retrieve_config() {
Singleton::Config::window()->default_size = {cfg.get<int>("default_window_size.width"), cfg.get<int>("default_window_size.height")}; Singleton::Config::window()->default_size = {cfg.get<int>("default_window_size.width"), cfg.get<int>("default_window_size.height")};
Singleton::Config::terminal()->make_command=cfg.get<std::string>("project.make_command"); Singleton::Config::terminal()->make_command=cfg.get<std::string>("project.make_command");
Singleton::Config::terminal()->cmake_command=cfg.get<std::string>("project.cmake_command"); Singleton::Config::terminal()->cmake_command=cfg.get<std::string>("project.cmake_command");
Singleton::Config::terminal()->history_size=cfg.get<int>("terminal_history_size");
} }
bool MainConfig::check_config_file(const boost::property_tree::ptree &default_cfg, std::string parent_path) { bool MainConfig::check_config_file(const boost::property_tree::ptree &default_cfg, std::string parent_path) {

1
src/files.h

@ -9,6 +9,7 @@ const std::string configjson =
" \"width\": 600,\n" " \"width\": 600,\n"
" \"height\": 400\n" " \"height\": 400\n"
" },\n" " },\n"
" \"terminal_history_size\": 1000,\n"
" \"gtk_theme\": {\n" " \"gtk_theme\": {\n"
" \"name\": \"Adwaita\", //Use \"\" for default theme, At least these two exist on all systems: Adwaita, Raleigh\n" " \"name\": \"Adwaita\", //Use \"\" for default theme, At least these two exist on all systems: Adwaita, Raleigh\n"
" \"variant\": \"\" //Use \"\" for default variant, and \"dark\" for dark theme variant\n" " \"variant\": \"\" //Use \"\" for default variant, and \"dark\" for dark theme variant\n"

20
src/terminal.cc

@ -296,17 +296,26 @@ int Terminal::print(const std::string &message, bool bold){
else else
get_buffer()->insert(get_buffer()->end(), umessage); get_buffer()->insert(get_buffer()->end(), umessage);
auto end_iter=get_buffer()->end(); /*auto end_iter=get_buffer()->end();
if(end_iter.backward_char()) { if(end_iter.backward_char()) {
auto mark=get_buffer()->create_mark(end_iter); auto mark=get_buffer()->create_mark(end_iter);
scroll_to(mark, 0.0, 1.0, 1.0); scroll_to(mark, 0.0, 1.0, 1.0);
get_buffer()->delete_mark(mark); 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;
get_buffer()->erase(get_buffer()->begin(), get_buffer()->get_iter_at_line(lines));
deleted_lines+=static_cast<size_t>(lines);
} }
return get_buffer()->end().get_line(); return static_cast<int>(static_cast<size_t>(get_buffer()->end().get_line())+deleted_lines);
} }
void Terminal::print(int line_nr, const std::string &message){ void Terminal::print(int line_nr, const std::string &message){
if(static_cast<size_t>(line_nr)<deleted_lines)
return;
Glib::ustring umessage=message; Glib::ustring umessage=message;
Glib::ustring::iterator iter; Glib::ustring::iterator iter;
while(!umessage.validate(iter)) { while(!umessage.validate(iter)) {
@ -315,9 +324,14 @@ void Terminal::print(int line_nr, const std::string &message){
umessage.replace(iter, next_char_iter, "?"); umessage.replace(iter, next_char_iter, "?");
} }
auto end_line_iter=get_buffer()->get_iter_at_line(line_nr); auto end_line_iter=get_buffer()->get_iter_at_line(static_cast<int>(static_cast<size_t>(line_nr)-deleted_lines));
while(!end_line_iter.ends_line() && end_line_iter.forward_char()) {} while(!end_line_iter.ends_line() && end_line_iter.forward_char()) {}
get_buffer()->insert(end_line_iter, umessage); 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> Terminal::print_in_progress(std::string start_msg) {

3
src/terminal.h

@ -15,6 +15,7 @@ public:
public: public:
std::string cmake_command; std::string cmake_command;
std::string make_command; std::string make_command;
int history_size;
}; };
class InProgress { class InProgress {
@ -60,6 +61,8 @@ private:
std::list<std::pair<pid_t, int> > async_executes; std::list<std::pair<pid_t, int> > async_executes;
#endif #endif
std::string stdin_buffer; std::string stdin_buffer;
size_t deleted_lines=0;
}; };
#endif // JUCI_TERMINAL_H_ #endif // JUCI_TERMINAL_H_

52
src/terminal_win.cc

@ -332,30 +332,58 @@ void Terminal::kill_async_executes(bool force) {
} }
int Terminal::print(const std::string &message, bool bold){ int Terminal::print(const std::string &message, bool bold){
INFO("Terminal: PrintMessage"); Glib::ustring umessage=message;
Glib::ustring::iterator iter;
while(!umessage.validate(iter)) {
auto next_char_iter=iter;
next_char_iter++;
umessage.replace(iter, next_char_iter, "?");
}
if(bold) if(bold)
get_buffer()->insert_with_tag(get_buffer()->end(), message, bold_tag); get_buffer()->insert_with_tag(get_buffer()->end(), umessage, bold_tag);
else else
get_buffer()->insert(get_buffer()->end(), message); get_buffer()->insert(get_buffer()->end(), umessage);
auto iter=get_buffer()->end(); /*auto end_iter=get_buffer()->end();
if(iter.backward_char()) { if(end_iter.backward_char()) {
auto mark=get_buffer()->create_mark(iter); auto mark=get_buffer()->create_mark(end_iter);
scroll_to(mark, 0.0, 1.0, 1.0); scroll_to(mark, 0.0, 1.0, 1.0);
get_buffer()->delete_mark(mark); 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;
get_buffer()->erase(get_buffer()->begin(), get_buffer()->get_iter_at_line(lines));
deleted_lines+=static_cast<size_t>(lines);
} }
return get_buffer()->end().get_line(); return static_cast<int>(static_cast<size_t>(get_buffer()->end().get_line())+deleted_lines);
} }
void Terminal::print(int line_nr, const std::string &message){ void Terminal::print(int line_nr, const std::string &message){
INFO("Terminal: PrintMessage at line " << line_nr); if(static_cast<size_t>(line_nr)<deleted_lines)
auto iter=get_buffer()->get_iter_at_line(line_nr); return;
while(!iter.ends_line())
iter++; Glib::ustring umessage=message;
get_buffer()->insert(iter, message); Glib::ustring::iterator iter;
while(!umessage.validate(iter)) {
auto next_char_iter=iter;
next_char_iter++;
umessage.replace(iter, next_char_iter, "?");
}
auto end_line_iter=get_buffer()->get_iter_at_line(static_cast<int>(static_cast<size_t>(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> 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)); std::shared_ptr<Terminal::InProgress> in_progress=std::shared_ptr<Terminal::InProgress>(new Terminal::InProgress(start_msg));
return in_progress; return in_progress;

Loading…
Cancel
Save