From de2c64ee60852b1a904fd12517481537c420df9f Mon Sep 17 00:00:00 2001 From: oyvang Date: Wed, 13 May 2015 13:33:59 +0200 Subject: [PATCH 1/2] fixed terminal view and compile and run --- juci/directories.cc | 13 ++++++- juci/source.cc | 3 +- juci/terminal.cc | 90 +++++++++++++++++++++------------------------ juci/terminal.h | 6 +-- juci/window.cc | 51 +++++++++++++++++-------- juci/window.h | 3 +- 6 files changed, 95 insertions(+), 71 deletions(-) diff --git a/juci/directories.cc b/juci/directories.cc index ba3008c..3134d6f 100644 --- a/juci/directories.cc +++ b/juci/directories.cc @@ -99,7 +99,18 @@ int Directories::Controller::count(const std::string path) { boost::algorithm::trim(project_name_var); if (variabel_start == std::string::npos) { // not a variabel variabel_start = line.find("(", 0); - variabel_end = line.find(")", variabel_start); + + variabel_end = line.find(' ', variabel_start); + if(variabel_end != std::string::npos){ + return line.substr(variabel_start+1, + (variabel_end)-variabel_start-1); + } + variabel_end = line.find("#", variabel_start); + if(variabel_end != std::string::npos){ + return line.substr(variabel_start+1, + (variabel_end)-variabel_start-1); + } + variabel_end = line.find(")", variabel_start); return line.substr(variabel_start+1, (variabel_end)-variabel_start-1); } diff --git a/juci/source.cc b/juci/source.cc index ea6a213..30b63ff 100644 --- a/juci/source.cc +++ b/juci/source.cc @@ -356,7 +356,7 @@ void Source::Controller::OnOpenFile(const string &filepath) { notebook_->index()); view().OnUpdateSyntax(model().ExtractTokens(start_offset, end_offset), model().config()); - } + buffer()->signal_end_user_action().connect([this]() { if (!go) { @@ -392,6 +392,7 @@ void Source::Controller::OnOpenFile(const string &filepath) { syntax.unlock(); } }); + } } Glib::RefPtr Source::Controller::buffer() { return view().get_buffer(); diff --git a/juci/terminal.cc b/juci/terminal.cc index e7f1ede..4b624e2 100644 --- a/juci/terminal.cc +++ b/juci/terminal.cc @@ -1,6 +1,8 @@ #include "terminal.h" #include #include +// #include +// #include Terminal::View::View(){ @@ -21,32 +23,17 @@ void Terminal::Controller::SetFolderCommand( boost::filesystem::path folder_command_ = "cd "+ path_ + "; "; } -bool Terminal::Controller::Compile(){ - if (running.try_lock()) { - std::thread execute([=]() { - Terminal().get_buffer()->set_text(""); - ExecuteCommand("cmake ."); - if (ExistInConsole(cmake_sucsess)){ - ExecuteCommand("make"); - } - }); - execute.detach(); - running.unlock(); - if (ExistInConsole(make_built)) return true; - } - PrintMessage("juCi++ ERROR: Failed to compile project in directory" - + path_ + "\n"); - return false; +void Terminal::Controller::Compile(){ + Terminal().get_buffer()->set_text(""); + ExecuteCommand("cmake .", "r"); + if (ExistInConsole(cmake_sucsess)){ + ExecuteCommand("make", "r"); + } } void Terminal::Controller::Run(std::string executable) { - if (running.try_lock()) { - std::thread execute([=]() { - ExecuteCommand("./"+executable); - }); - execute.detach(); - running.unlock(); - } + PrintMessage("juCi++ execute: " + executable + "\n"); + ExecuteCommand("./"+executable, "w"); } void Terminal::Controller::PrintMessage(std::string message){ @@ -54,22 +41,6 @@ void Terminal::Controller::PrintMessage(std::string message){ insert(Terminal().get_buffer()-> end(),"> "+message); } -// bool Terminal::Controller::FindExecutable(std::string executable) { -// std::string build = Terminal().get_buffer()->get_text(); -// double pos = build.find(make_built); -// Gtk::TextIter start = Terminal().get_buffer()->get_iter_at_offset(pos); -// Gtk::TextIter end = Terminal().get_buffer()->get_iter_at_offset(pos); -// while (!end.ends_line()) { -// end.forward_char(); -// } -// build = Terminal().get_buffer()->get_text(start, end); -// pos = build.find_last_of(" "); -// build = build.substr(pos+1); -// std::cout << "DEBUG: BUILD TARGET = "<< build << std::endl; -// std::cout << "EDEBUG: ECUTABLE FILE = "<< executable << std::endl; -// if(build != executable) return false; -// return true; -// } bool Terminal::Controller::ExistInConsole(std::string string) { double pos = Terminal().get_buffer()-> @@ -78,17 +49,38 @@ bool Terminal::Controller::ExistInConsole(std::string string) { return true; } -void Terminal::Controller::ExecuteCommand(std::string command) { - command = folder_command_+command; +void Terminal::Controller::ExecuteCommand(std::string command, std::string mode) { + std::cout << "EXECUTE COMMAND: "<< command << std::endl; - FILE* p = popen(command.c_str(), "r"); - if (p == NULL) { - PrintMessage("juCi++ ERROR: Failed to run command" + command + "\n"); - }else { - char buffer[1028]; - while (fgets(buffer, 1028, p) != NULL) { - PrintMessage(buffer); + if(mode == "w"){ + command = path_ + " " +command + " > some_file.txt"; + system(command.c_str()); + }else{ + + FILE* p = popen(command.c_str(), mode.c_str()); + command = folder_command_+command; + if (p == NULL) { + PrintMessage("juCi++ ERROR: Failed to run command" + command + "\n"); + }else { + char buffer[1028]; + while (fgets(buffer, 1028, p) != NULL) { + PrintMessage(buffer); + } + pclose(p); } - pclose(p); } + + + + // // run a process and create a streambuf that reads its stdout and stderr + // redi::ipstream proc(command, redi::pstreams::pstderr); + // std::string line; + // // read child's stdout + // while (std::getline(proc.out(), line)) + // PrintMessage(line+ "\n"); + + // // read child's stderr + // while (std::getline(proc.err(), line)) + // PrintMessage(line+ "\n"); + } diff --git a/juci/terminal.h b/juci/terminal.h index 650758f..a3fa6a6 100644 --- a/juci/terminal.h +++ b/juci/terminal.h @@ -25,17 +25,15 @@ namespace Terminal { Gtk::TextView& Terminal(){return view_.textview();} void SetFolderCommand(boost::filesystem::path CMake_path); void Run(std::string executable); - bool Compile(); + void Compile(); private: - void ExecuteCommand(std::string command); + void ExecuteCommand(std::string command, std::string mode); bool OnButtonRealeaseEvent(GdkEventKey* key); bool ExistInConsole(std::string string); - // bool FindExecutable(std::string executable); void PrintMessage(std::string message); Terminal::View view_; std::string folder_command_; std::string path_; - std::mutex running; const std::string cmake_sucsess = "Build files have been written to:"; const std::string make_built = "Built target"; const std::string make_executable = "Linking CXX executable"; diff --git a/juci/window.cc b/juci/window.cc index 94bd534..a09ee86 100644 --- a/juci/window.cc +++ b/juci/window.cc @@ -49,14 +49,23 @@ Window::Window() : Gtk::AccelKey(keybindings_.config_ .key_map()["compile_and_run"]), [this]() { - notebook_.OnSaveFile(); - std::string path = notebook_.CurrentPagePath(); - terminal_.SetFolderCommand(path); - if(terminal_.Compile()) { - std::string executable = notebook_.directories(). - GetCmakeVarValue(path,"add_executable"); - terminal_.Run(executable); - } + if (running.try_lock()) { + std::thread execute([=]() { + notebook_.OnSaveFile(); + std::string path = notebook_.CurrentPagePath(); + int pos = path.find_last_of("/\\"); + if(pos != std::string::npos){ + path.erase(path.begin()+pos,path.end()); + terminal_.SetFolderCommand(path); + } + terminal_.Compile(); + std::string executable = notebook_.directories(). + GetCmakeVarValue(path,"add_executable"); + terminal_.Run(executable); + }); + execute.detach(); + running.unlock(); + } }); keybindings_. @@ -66,11 +75,20 @@ Window::Window() : Gtk::AccelKey(keybindings_.config_ .key_map()["compile"]), [this]() { - notebook_.OnSaveFile(); - std::string path = - notebook_.CurrentPagePath(); - terminal_.SetFolderCommand(path); - terminal_.Compile(); + if (running.try_lock()) { + std::thread execute([=]() { + notebook_.OnSaveFile(); + std::string path = notebook_.CurrentPagePath(); + int pos = path.find_last_of("/\\"); + if(pos != std::string::npos){ + path.erase(path.begin()+pos,path.end()); + terminal_.SetFolderCommand(path); + } + terminal_.Compile(); + }); + execute.detach(); + running.unlock(); + } }); this->signal_button_release_event(). @@ -87,9 +105,12 @@ Window::Window() : keybindings_.BuildMenu(); window_box_.pack_start(menu_.view(), Gtk::PACK_SHRINK); + window_box_.pack_start(notebook_.entry_view(), Gtk::PACK_SHRINK); - window_box_.pack_start(notebook_.view()); - window_box_.pack_end(terminal_.view(),Gtk::PACK_SHRINK); + paned_.set_position(300); + paned_.pack1(notebook_.view(), true, false); + paned_.pack2(terminal_.view(), true, true); + window_box_.pack_end(paned_); show_all_children(); } // Window constructor diff --git a/juci/window.h b/juci/window.h index e9c5424..2166c35 100644 --- a/juci/window.h +++ b/juci/window.h @@ -25,11 +25,12 @@ public: Keybindings::Controller& keybindings() { return keybindings_; } private: + std::mutex running; + Gtk::VPaned paned_; //signal handlers void OnWindowHide(); void OnOpenFile(); void OnFileOpenFolder(); - bool OnMouseRelease(GdkEventButton* button); }; From 45218c42a89319c6adca984ec127f0e3089cf5b9 Mon Sep 17 00:00:00 2001 From: tedjk Date: Wed, 13 May 2015 14:18:28 +0200 Subject: [PATCH 2/2] moved python module to /lib and executable to /bin, updated plugins.py --- juci/CMakeLists.txt | 7 +++++-- juci/plugins.py | 2 +- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/juci/CMakeLists.txt b/juci/CMakeLists.txt index 64c2849..5cd0026 100644 --- a/juci/CMakeLists.txt +++ b/juci/CMakeLists.txt @@ -111,6 +111,9 @@ add_executable(${project_name} terminal.cc ) +set(EXECUTABLE_OUTPUT_PATH ${PROJECT_BINARY_DIR}/bin) + + add_library(${module} SHARED api api_ext @@ -132,8 +135,8 @@ link_directories( ${LIBCLANG_LIBRARY_DIRS} ) #module: -set_target_properties(${module} PROPERTIES PREFIX "") -# LIBRARY_OUTPUT_DIRECTORY "/usr/lib/python2.7/dist-packages/") +set_target_properties(${module} PROPERTIES PREFIX "" +LIBRARY_OUTPUT_DIRECTORY "${CMAKE_SOURCE_DIR}/lib/") target_link_libraries(${module} ${PYTHON_LIBRARIES} ${Boost_LIBRARIES}) #executable: target_link_libraries(${project_name} ${LIVCLANG_LIBRARIES} ${LCL_LIBRARIES} ${GTKMM_LIBRARIES} ${Boost_LIBRARIES} ${PYTHON_LIBRARIES}) diff --git a/juci/plugins.py b/juci/plugins.py index f8faf6e..ef50bb7 100644 --- a/juci/plugins.py +++ b/juci/plugins.py @@ -2,7 +2,7 @@ #plugin handler import sys, os, glob cwd = os.getcwd() -sys.path.append(cwd) +sys.path.append(cwd+"/lib") import juci_to_python_api as juci def loadplugins():