You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 

70 lines
1.7 KiB

#include "terminal.h"
#include <iostream>
Terminal::View::View(){
scrolledwindow_.add(textview_);
scrolledwindow_.set_size_request(-1,150);
view_.add(scrolledwindow_);
}
Terminal::Controller::Controller() {
root = "";
Terminal().signal_key_release_event().
connect(sigc::mem_fun(*this,&Terminal::Controller::OnButtonRealeaseEvenet),false);
}
bool Terminal::Controller::OnButtonRealeaseEvenet(GdkEventKey *key) {
if(key->keyval == 65421 || key->keyval == 65293){
ExecuteCommand();
}
return false;
}
void Terminal::Controller::ExecuteCommand() {
std::cout << "EXECUTE COMMAND ALGORITHM "<< std::endl;
std::string temp = getCommand();
if(temp != ""){
std::cout << "EXECUTE COMMAND: "<<temp << std::endl;
FILE* p = popen(temp.c_str(), "r");
if (p == NULL)
{
Terminal().get_buffer()->insert(Terminal().get_buffer()->end(),"Command Failed\n");
} else{
char buffer[1028];
while (fgets(buffer, 1028, p) != NULL)
{
Terminal().get_buffer()->insert(Terminal().get_buffer()->end(),buffer);
}
pclose(p);
}
Terminal().get_buffer()->insert(Terminal().get_buffer()->end(),"Command Executed\n");
}else{
std::cout << "NO COMMAND TO RUN"<< std::endl;
}
}
std::string Terminal::Controller::getCommand(){
std::string command = "";
Gtk::TextIter start,end;
int a = Terminal().get_buffer()->get_insert()->get_iter().get_line()-1;
if(a==-1)a=0;
start = Terminal().get_buffer()->get_iter_at_line(a);
end =Terminal().get_buffer()->get_iter_at_line(a);
while(!end.ends_line()) {
end++;
}
while(!start.starts_line()) {
start--;
}
command = Terminal().get_buffer()->get_text(start,end);
return command;
}