diff --git a/.gitignore b/.gitignore index ce3861e..d03bf98 100644 --- a/.gitignore +++ b/.gitignore @@ -3,7 +3,6 @@ !*/ - #Whitelist !*.cc !*.h diff --git a/plugins/snippet.py b/plugins/snippet.py deleted file mode 100644 index 5f77be6..0000000 --- a/plugins/snippet.py +++ /dev/null @@ -1,67 +0,0 @@ -#!/usr/bin/python -#snippet plugin -import juci_to_python_api as juci, inspect - -def initPlugin(): - juci.addMenuElement("Snippet") - juci.addSubMenuElement("SnippetMenu", #name of parent menu - "Insert snippet", #menu description - "insertSnippet()", #function to execute - inspect.getfile(inspect.currentframe()), #plugin path - "space") -snippets = {} - -snippets["for"] = """\ -for(int i=0; i - -int main(int argc, char *argv[]) { - std::cout << "Hello, world! << std::endl; -} -""" - -def getSnippet(word): - try: - output = snippets[word] - except KeyError: - output = word - return output - -def insertSnippet(): - theWord=juci.getWord() - output=getSnippet(theWord) - juci.replaceWord(output) - - diff --git a/src/api.cc b/src/api.cc deleted file mode 100644 index be1381d..0000000 --- a/src/api.cc +++ /dev/null @@ -1,213 +0,0 @@ -#include "api.h" -#include "logging.h" -#include "singletons.h" - -Menu* PluginApi::menu=nullptr; -Notebook* PluginApi::notebook=nullptr; -///////////////////////////// -//// API ServiceProvider //// -///////////////////////////// -PluginApi::PluginApi(Notebook* notebook, Menu* menu) { - DEBUG("Adding pointers for the API"); - this->notebook = notebook; - this->menu = menu; - DEBUG("Initiating plugins(from plugins.py).."); -#ifndef __APPLE__ - //InitPlugins(); //TODO: fix this -#endif - DEBUG("Plugins initiated.."); -} - -void PluginApi::ReplaceWord(std::string word) { - Glib::RefPtr buffer = libjuci::BufferFromNotebook(); - Gtk::TextIter word_start = libjuci::IterFromNotebook(); - Gtk::TextIter word_end = libjuci::IterFromNotebook(); - libjuci::IterToWordStart(word_start); - libjuci::IterToWordEnd(word_end); - if (word_start != word_end) { - buffer->erase(word_start, word_end); - Gtk::TextIter current = libjuci::IterFromNotebook(); - buffer->insert(current, word); - } -} - -void PluginApi::ReplaceLine(std::string line) { - WARNING("use of unimplemented method"); -} - -std::string PluginApi::GetWord() { - Glib::RefPtr buffer = libjuci::BufferFromNotebook(); - Gtk::TextIter word_start = libjuci::IterFromNotebook(); - Gtk::TextIter word_end = libjuci::IterFromNotebook(); - - libjuci::IterToWordStart(word_start); - libjuci::IterToWordEnd(word_end); - - if (word_start < word_end) { - std::string word = buffer->get_text(word_start, word_end); - return word; - } - return ""; -} - -void PluginApi::InitPlugins() { - libjuci::LoadPlugin(Singleton::config_dir() + "plugins.py"); -} - -void PluginApi::AddMenuElement(std::string plugin_name) { - DEBUG("Adding menu element for "+plugin_name); - AddMenuXml(plugin_name, "PluginMenu"); - std::string plugin_action_name = plugin_name+"Menu"; - menu->action_group->add(Gtk::Action::create(plugin_action_name, plugin_name)); -} - -void PluginApi::AddSubMenuElement(std::string parent_menu, - std::string menu_name, - std::string menu_func_name, - std::string plugin_path, - std::string menu_keybinding) { - AddSubMenuXml(menu_func_name, parent_menu); - menu->action_group->add(Gtk::Action::create(menu_func_name, - menu_name), - Gtk::AccelKey(menu_keybinding), - [=]() { - libjuci::LoadPluginFunction(menu_func_name, plugin_path); - }); -} - -void PluginApi::AddMenuXml(std::string plugin_name, std::string parent_menu) { - std::string temp_menu = menu->ui; - std::size_t plugin_menu_pos = temp_menu.find(parent_menu); - // +2 gets you outside of the tag:<'menu_name'> - plugin_menu_pos+=parent_menu.size() +2; - std::string menu_prefix = temp_menu.substr(0, plugin_menu_pos); - std::string menu_suffix = temp_menu.substr(plugin_menu_pos); - std::string menu_input = - " " - " "; - - menu->ui = menu_prefix + menu_input + menu_suffix; -} - -void PluginApi::AddSubMenuXml(std::string plugin_name, - std::string parent_menu) { - std::string temp_menu = menu->ui; - - std::size_t parent_menu_pos = temp_menu.find(parent_menu); - // +2 gets you outside of the tag:<'menu_name'> - parent_menu_pos+=parent_menu.size() +2; - std::string menu_prefix = temp_menu.substr(0, parent_menu_pos); - std::string menu_suffix = temp_menu.substr(parent_menu_pos); - - std::string menu_input =""; - menu->ui = menu_prefix + menu_input + menu_suffix; -} - -/////////////////////// -//// Api to python //// -/////////////////////// -void libjuci::ReplaceWord(const std::string word) { - PluginApi::ReplaceWord(word); -} - -void libjuci::ReplaceLine(const std::string line) { - std::cout << "unimplemented: " << __func__ << " called" - << std::endl; -} -std::string libjuci::GetWord() { - return PluginApi::GetWord(); -} - -void libjuci::AddMenuElement(std::string plugin_name) { - PluginApi::AddMenuElement(plugin_name); -} - -void libjuci::AddSubMenuElement(std::string parent_menu, - std::string menu_name, - std::string menu_func_name, - std::string plugin_path, - std::string menu_keybinding) { - PluginApi::AddSubMenuElement(parent_menu, - menu_name, - menu_func_name, - plugin_path, - menu_keybinding); -} - -////////////////////////////// -//// Boost.Python methods //// -////////////////////////////// -namespace bp = boost::python; - -bp::api::object libjuci::OpenPythonScript(const std::string path, - bp::api::object python_name_space) { - bp::str str_path(path); - return bp::exec_file(str_path, python_name_space); -} - -void libjuci::LoadPlugin(const std::string& plugin_name) { - try { - Py_Initialize(); - bp::api::object main_module = bp::import("__main__"); - bp::api::object main_namespace = - main_module.attr("__dict__"); - bp::api::object ignored2 = - OpenPythonScript(plugin_name, main_namespace); - }catch (bp::error_already_set const&) { - PyErr_Print(); - } -} - -void libjuci::LoadPluginFunction(const std::string &function_name, - const std::string &plugin_path) { - try { - Py_Initialize(); - bp::api::object main_module = bp::import("__main__"); - bp::api::object main_namespace = main_module.attr("__dict__"); - bp::api::object ignored2 = OpenPythonScript(plugin_path, main_namespace); - bp::str func_name(function_name); - bp::api::object returnValue = bp::eval(func_name, main_namespace); - }catch (bp::error_already_set const&) { - PyErr_Print(); - } -} - -void libjuci::InitPlugin(const std::string& plugin_path) { - try { - Py_Initialize(); - bp::api::object main_module = bp::import("__main__"); - bp::api::object main_namespace = main_module.attr("__dict__"); - bp::api::object ignored2 = OpenPythonScript(plugin_path, main_namespace); - bp::object returnValue = bp::eval("initPlugin()", main_namespace); - // do something with return_value - }catch (bp::error_already_set const&) { - PyErr_Print(); - } -} - -/////////////////////// -//// Glib wrappers //// -/////////////////////// -void libjuci::IterToWordStart(Gtk::TextIter &iter) { - if (!iter.starts_line()) { - while (!iter.starts_word()) { - iter.backward_char(); - } - } -} - -void libjuci::IterToWordEnd(Gtk::TextIter &iter) { - if (!iter.ends_line()) { - while (!iter.ends_word()) { - iter.forward_char(); - } - } -} - -Glib::RefPtr libjuci::BufferFromNotebook() { - return Glib::RefPtr(PluginApi::notebook->get_current_view()->get_buffer()); -} - -Gtk::TextIter libjuci::IterFromNotebook() { - return libjuci::BufferFromNotebook()->get_insert()->get_iter(); -} diff --git a/src/api.h b/src/api.h deleted file mode 100644 index a3aafca..0000000 --- a/src/api.h +++ /dev/null @@ -1,72 +0,0 @@ -#ifndef JUCI_API_H_ -#define JUCI_API_H_ - -#include -#include -#include -#include "notebook.h" -#include "menu.h" - -//////////////////// -//// Plugin Api //// -//////////////////// -class PluginApi { -public: - PluginApi(Notebook* notebook, Menu* menu); - static Menu* menu; - static Notebook* notebook; - static void InitPlugins(); - // for Python module: - static std::string GetWord(); - // menu management - static void AddMenuElement(const std::string plugin_name); - static void AddSubMenuElement(const std::string parent_menu, - const std::string menu_name, - const std::string menu_func_name, - const std::string plugin_path, - const std::string menu_keybinding); - static void ReplaceWord(const std::string word); - static void ReplaceLine(const std::string line); -protected: - static void AddMenuXml(std::string plugin_name, std::string parent_menu); - static void AddSubMenuXml(std::string plugin_name, std::string parent_menu); -}; // PluginApi -namespace libjuci { - /////////////////////// - //// Glib wrappers //// - /////////////////////// - void IterToWordStart(Gtk::TextIter &iter); - void IterToWordEnd(Gtk::TextIter &iter); - Gtk::TextIter IterFromNotebook(); - Glib::RefPtr BufferFromNotebook(); - /////////////////////// - //// Api to python //// - /////////////////////// - void ReplaceWord(const std::string word); - void ReplaceLine(const std::string line); - std::string GetWord(); - - void AddMenuElement(const std::string plugin_name); - - void AddSubMenuElement(const std::string parent_menu, - const std::string menu_name, - const std::string menu_func_name, - const std::string plugin_path, - const std::string menu_keybinding); - void AddMenuXml(const std::string plugin_name, - const std::string parent_menu); - void AddSubMenuXml(const std::string plugin_name, - const std::string parent_menu); - ////////////////////////////// - //// Boost.Python methods //// - ////////////////////////////// - namespace bp = boost::python; - bp::api::object OpenPythonScript(const std::string path, - bp::api::object python_name_space); - void LoadPlugin(const std::string& plugin_name); - void LoadPluginFunction(const std::string &function_name, - const std::string &plugin_path); - - void InitPlugin(const std::string& plugin_path); -} // namespace libjuci -#endif // JUCI_API_H_ diff --git a/src/api_ext.cc b/src/api_ext.cc deleted file mode 100644 index 9b8b1ba..0000000 --- a/src/api_ext.cc +++ /dev/null @@ -1,15 +0,0 @@ -#include "api.h" - -BOOST_PYTHON_MODULE(juci_to_python_api) { - using namespace boost::python; - // plugin inclusion - def("addMenuElement", &libjuci::AddMenuElement); - def("addSubMenuElement", &libjuci::AddSubMenuElement); - def("loadPlugin", &libjuci::LoadPlugin); - def("initPlugin", &libjuci::InitPlugin); - - // text editing - def("replaceLine", &libjuci::ReplaceLine); - def("replaceWord", &libjuci::ReplaceWord); - def("getWord", &libjuci::GetWord); - } // module::juci_to_python_api diff --git a/src/config.cc b/src/config.cc index 2ec52f9..ece1f5a 100644 --- a/src/config.cc +++ b/src/config.cc @@ -59,14 +59,11 @@ void Config::load() { void Config::find_or_create_config_files() { auto config_dir = home/"config"; auto config_json = config_dir/"config.json"; - auto plugins_py = config_dir/"plugins.py"; boost::filesystem::create_directories(config_dir); // io exp captured by calling method if (!boost::filesystem::exists(config_json)) - filesystem::write(config_json, configjson); // vars configjson and pluginspy - if (!boost::filesystem::exists(plugins_py)) // live in files.h - filesystem::write(plugins_py, pluginspy); + filesystem::write(config_json, configjson); auto juci_style_path = home/"styles"; boost::filesystem::create_directories(juci_style_path); // io exp captured by calling method diff --git a/src/files.h b/src/files.h index e1d84ef..858be1a 100644 --- a/src/files.h +++ b/src/files.h @@ -326,82 +326,4 @@ const std::string juci_dark_blue_style = "\n" "\n"; -const std::string pluginspy = -"#!/usr/bin/python \n" -"import juci_to_python_api as juci \n" -"import glob \n" -"\n" -"def loadplugins(): \n" -" plugin_files = glob.glob(\"../plugins/*.py\") \n" -" for current_file in plugin_files: \n" -" juci.initPlugin(current_file) \n" -"loadplugins() \n"; - -const std::string snippetpy = -"#!/usr/bin/python \n" -"#snippet plugin \n" -"import juci_to_python_api as juci, inspect \n" -" \n" -"def initPlugin(): \n" -" juci.addMenuElement(\"Snippet\") \n" -" juci.addSubMenuElement(\"SnippetMenu\", #name of parent menu \n" -" \"Insert snippet\", #menu description \n" -" \"insertSnippet()\", #function to execute \n" -" inspect.getfile(inspect.currentframe()), #plugin path \n" -" \"space\") \n" -"snippets = {} \n" -" \n" -"snippets[\"for\"] = \"\"\"\\\n" -"for(int i=0; i \n" -" \n" -"int main(int argc, char *argv[]) { \n" -" std::cout << \"Hello, world! << std::endl; \n" -"} \n" -"\"\"\" \n" -" \n" -"def getSnippet(word): \n" -" try: \n" -" output = snippets[word] \n" -" except KeyError: \n" -" output = word \n" -" return output \n" -" \n" -"def insertSnippet(): \n" -" theWord=juci.getWord() \n" -" output=getSnippet(theWord) \n" -" juci.replaceWord(output) \n"; - #endif // JUCI_FILES_H_