Browse Source

Make install complete

merge-requests/365/head
Jørgen Lien Sellæg 11 years ago
parent
commit
9b7d338b6b
  1. 7
      CMakeLists.txt
  2. 101
      config/config.json
  3. 40
      config/menu.xml
  4. 10
      config/plugins.py
  5. 1
      src/CMakeLists.txt
  6. 32
      src/config.cc
  7. 5
      src/config.h
  8. 157
      src/files.h

7
CMakeLists.txt

@ -4,7 +4,6 @@ set(project_name juci)
set(module juci_to_python_api) set(module juci_to_python_api)
#### TODO WINDOWS SUPPORT #### #### TODO WINDOWS SUPPORT ####
set(juci_config_folder "$ENV{HOME}/.juci")
set(bin_install_path "/usr/local/bin") set(bin_install_path "/usr/local/bin")
set(lib_install_path "/usr/local/lib/python2.7/dist-packages/") set(lib_install_path "/usr/local/lib/python2.7/dist-packages/")
##### #####
@ -12,9 +11,3 @@ set(lib_install_path "/usr/local/lib/python2.7/dist-packages/")
project (${project_name}) project (${project_name})
add_subdirectory("src") add_subdirectory("src")
install(
DIRECTORY "config" "plugins"
DESTINATION ${juci_config_folder}
USE_SOURCE_PERMISSIONS)
install(CODE "FILE(MAKE_DIRECTORY ${juci_config_filder}/log)")

101
config/config.json

@ -1,101 +0,0 @@
{
"source": {
"colors": {
"text_color": "black",
"string": "#CC0000",
"namespace_ref": "#990099",
"type": "#0066FF",
"keyword": "blue",
"comment": "grey",
"own": "pink",
"diagnostic_warning": "orange",
"diagnostic_error": "red"
},
"syntax": {
"43": "type",
"46": "namespace_ref",
"109": "string",
"702": "keyword",
"703": "own",
"705": "comment"
},
"extensions": [
"c",
"cc",
"cpp",
"cxx",
"c++",
"h",
"hh",
"hpp",
"hxx",
"h++"
],
"visual": {
"background": "white",
"background_selected": "blue",
"background_tooltips": "yellow",
"font": "Monospace",
"show_line_numbers": 1,
"highlight_current_line": 1
},
"tab_size": 2,
"tab_char": "<space>"
},
"keybindings": {
"new_file": "<primary>n",
"open_folder": "<primary><alt>o",
"open_file": "<primary>o",
"save": "<primary>s",
"save_as": "<primary><shift>s",
"quit": "<primary>q",
"split_window": "<primary><alt>s",
"close_tab": "<primary>w",
"edit_copy": "<primary>c",
"edit_cut": "<primary>x",
"edit_paste": "<primary>v",
"edit_undo": "<primary>z",
"edit_redo": "<primary><shift>z",
"edit_find": "<primary>f",
"source_goto_declaration": "<primary>d",
"source_goto_method": "<primary>m",
"source_rename": "<primary>r",
"compile_and_run": "<primary>Return",
"compile": "<primary><shift>Return"
},
"directoryfilter": {
"ignore": [
"cmake",
"#",
"~",
".idea",
".so",
"in-lowercase.pls"
],
"exceptions": [
"cmakelists.txt",
"in-lowercase.pls"
]
},
"project": {
"run_commands": [
"./.build/"
],
"compile_commands": [
"rm -rf ./.build",
"mkdir ./.build",
"cmake -DCMAKE_EXPORT_COMPILE_COMMANDS=ON -B./.build -H.",
"cd ./.build/; make",
"cp ./.build/compile_commands.json compile_commands.json"
]
},
"example": {
"key": "value",
"key2": [
"val1",
"val2",
3
],
"key3": "value"
}
}

40
config/menu.xml

@ -1,40 +0,0 @@
<ui>
<menubar name='MenuBar'>
<menu action='FileMenu'>
<menuitem action='FileNewFile'/>
<menuitem action='FileOpenFile'/>
<menuitem action='FileOpenFolder'/>
<menuitem action='FileSave'/>
<menuitem action='FileSaveAs'/>
<separator/>
<menuitem action='FileQuit'/>
</menu>
<menu action='EditMenu'>
<menuitem action='EditCopy'/>
<menuitem action='EditCut'/>
<menuitem action='EditPaste'/>
<separator/>
<menuitem action='EditFind'/>
<menuitem action='EditUndo'/>
<menuitem action='EditRedo'/>
</menu>
<menu action='SourceMenu'>
<menuitem action='SourceGotoDeclaration'/>
<menuitem action='SourceGotoMethod'/>
<menuitem action='SourceRename'/>
</menu>
<menu action='ProjectMenu'>
<menuitem action='ProjectCompileAndRun'/>
<menuitem action='ProjectCompile'/>
</menu>
<menu action='WindowMenu'>
<menuitem action='WindowCloseTab'/>
<menuitem action='WindowSplitWindow'/>
</menu>
<menu action='PluginMenu'>
</menu>
<menu action='HelpMenu'>
<menuitem action='HelpAbout'/>
</menu>
</menubar>
</ui>

10
config/plugins.py

@ -1,10 +0,0 @@
#!/usr/bin/python
import juci_to_python_api as juci
import glob
def loadplugins():
plugin_files = glob.glob("../plugins/*.py")
for current_file in plugin_files:
juci.initPlugin(current_file)
loadplugins()

1
src/CMakeLists.txt

@ -119,6 +119,5 @@ if(${validation})
RUNTIME DESTINATION ${bin_install_path} RUNTIME DESTINATION ${bin_install_path}
LIBRARY DESTINATION ${lib_install_path} LIBRARY DESTINATION ${lib_install_path}
) )
endif(${validation}) endif(${validation})

32
src/config.cc

@ -3,24 +3,40 @@
#include "logging.h" #include "logging.h"
#include <fstream> #include <fstream>
#include <string> #include <string>
#include <vector>
#include <exception> #include <exception>
#include "files.h"
MainConfig::MainConfig() { MainConfig::MainConfig() {
INFO("Reading config file"); find_or_create_config_files();
boost::property_tree::json_parser::read_json(Singleton::config_dir() + "config.json", cfg_); boost::property_tree::json_parser::read_json(Singleton::config_dir() + "config.json", cfg);
INFO("Config file read");
GenerateSource(); GenerateSource();
GenerateKeybindings(); GenerateKeybindings();
GenerateDirectoryFilter(); GenerateDirectoryFilter();
GenerateTerminalCommands(); GenerateTerminalCommands();
} }
void MainConfig::find_or_create_config_files() {
std::vector<std::string> files = {"config.json", "menu.xml", "plugins.py"};
boost::filesystem::create_directories(boost::filesystem::path(Singleton::config_dir()));
for (auto &file : files) {
auto path = boost::filesystem::path(Singleton::config_dir() + file);
if (!boost::filesystem::is_regular_file(path)) {
std::ofstream output;
output.open(path.string());
if (file == "config.json") output << configjson;
if (file == "plugins.py") output << pluginspy;
if (file == "menu.xml") output << menuxml;
output.close();
}
}
}
void MainConfig::GenerateSource() { void MainConfig::GenerateSource() {
auto source_cfg=Singleton::Config::source(); auto source_cfg=Singleton::Config::source();
DEBUG("Fetching source cfg"); DEBUG("Fetching source cfg");
// boost::property_tree::ptree // boost::property_tree::ptree
auto source_json = cfg_.get_child("source"); auto source_json = cfg.get_child("source");
auto syntax_json = source_json.get_child("syntax"); auto syntax_json = source_json.get_child("syntax");
auto colors_json = source_json.get_child("colors"); auto colors_json = source_json.get_child("colors");
auto extensions_json = source_json.get_child("extensions"); auto extensions_json = source_json.get_child("extensions");
@ -63,7 +79,7 @@ void MainConfig::GenerateSource() {
void MainConfig::GenerateTerminalCommands() { void MainConfig::GenerateTerminalCommands() {
auto terminal_cfg=Singleton::Config::terminal(); auto terminal_cfg=Singleton::Config::terminal();
boost::property_tree::ptree source_json = cfg_.get_child("project"); boost::property_tree::ptree source_json = cfg.get_child("project");
boost::property_tree::ptree compile_commands_json = source_json.get_child("compile_commands"); boost::property_tree::ptree compile_commands_json = source_json.get_child("compile_commands");
boost::property_tree::ptree run_commands_json = source_json.get_child("run_commands"); boost::property_tree::ptree run_commands_json = source_json.get_child("run_commands");
for (auto &i : compile_commands_json) { for (auto &i : compile_commands_json) {
@ -87,7 +103,7 @@ void MainConfig::GenerateKeybindings() {
while (getline(input, line)) while (getline(input, line))
menu->ui += line; menu->ui += line;
} }
boost::property_tree::ptree keys_json = cfg_.get_child("keybindings"); boost::property_tree::ptree keys_json = cfg.get_child("keybindings");
for (auto &i : keys_json) { for (auto &i : keys_json) {
auto key=i.second.get_value<std::string>(); auto key=i.second.get_value<std::string>();
menu->key_map[i.first] = key; menu->key_map[i.first] = key;
@ -98,7 +114,7 @@ void MainConfig::GenerateKeybindings() {
void MainConfig::GenerateDirectoryFilter() { void MainConfig::GenerateDirectoryFilter() {
auto dir_cfg=Singleton::Config::directories(); auto dir_cfg=Singleton::Config::directories();
DEBUG("Fetching directory filter"); DEBUG("Fetching directory filter");
boost::property_tree::ptree dir_json = cfg_.get_child("directoryfilter"); boost::property_tree::ptree dir_json = cfg.get_child("directoryfilter");
boost::property_tree::ptree ignore_json = dir_json.get_child("ignore"); boost::property_tree::ptree ignore_json = dir_json.get_child("ignore");
boost::property_tree::ptree except_json = dir_json.get_child("exceptions"); boost::property_tree::ptree except_json = dir_json.get_child("exceptions");
for ( auto &i : except_json ) for ( auto &i : except_json )

5
src/config.h

@ -6,13 +6,14 @@
class MainConfig { class MainConfig {
public: public:
MainConfig(); MainConfig();
void find_or_create_config_files();
void PrintMenu(); void PrintMenu();
void GenerateSource(); void GenerateSource();
void GenerateKeybindings(); void GenerateKeybindings();
void GenerateDirectoryFilter(); void GenerateDirectoryFilter();
void GenerateTerminalCommands(); void GenerateTerminalCommands();
private: private:
boost::property_tree::ptree cfg_; boost::property_tree::ptree cfg;
boost::property_tree::ptree key_tree_; boost::property_tree::ptree key_tree;
}; };
#endif #endif

157
src/files.h

@ -0,0 +1,157 @@
#include <string>
const std::string configjson =
"{\n"
" \"source\": {\n"
" \"colors\": {\n"
" \"text_color\": \"black\",\n"
" \"string\": \"#CC0000\",\n"
" \"namespace_ref\": \"#990099\",\n"
" \"type\": \"#0066FF\",\n"
" \"keyword\": \"blue\",\n"
" \"comment\": \"grey\",\n"
" \"own\": \"pink\",\n"
" \"diagnostic_warning\": \"orange\",\n"
" \"diagnostic_error\": \"red\"\n"
" },\n"
" \"syntax\": {\n"
" \"43\": \"type\",\n"
" \"46\": \"namespace_ref\",\n"
" \"109\": \"string\",\n"
" \"702\": \"keyword\",\n"
" \"703\": \"own\",\n"
" \"705\": \"comment\"\n"
" },\n"
" \"extensions\": [\n"
" \"c\",\n"
" \"cc\",\n"
" \"cpp\",\n"
" \"cxx\",\n"
" \"c++\",\n"
" \"h\",\n"
" \"hh\",\n"
" \"hpp\",\n"
" \"hxx\",\n"
" \"h++\"\n"
" ],\n"
" \"visual\": {\n"
" \"background\": \"white\",\n"
" \"background_selected\": \"blue\",\n"
" \"background_tooltips\": \"yellow\",\n"
" \"font\": \"Monospace\",\n"
" \"show_line_numbers\": 1,\n"
" \"highlight_current_line\": 1\n"
" },\n"
" \"tab_size\": 2,\n"
" \"tab_char\": \"<space>\"\n"
" },\n"
" \"keybindings\": {\n"
" \"new_file\": \"<primary>n\",\n"
" \"open_folder\": \"<primary><alt>o\",\n"
" \"open_file\": \"<primary>o\",\n"
" \"save\": \"<primary>s\",\n"
" \"save_as\": \"<primary><shift>s\",\n"
" \"quit\": \"<primary>q\",\n"
" \"split_window\": \"<primary><alt>s\",\n"
" \"close_tab\": \"<primary>w\",\n"
" \"edit_copy\": \"<primary>c\",\n"
" \"edit_cut\": \"<primary>x\",\n"
" \"edit_paste\": \"<primary>v\",\n"
" \"edit_undo\": \"<primary>z\",\n"
" \"edit_redo\": \"<primary><shift>z\",\n"
" \"edit_find\": \"<primary>f\",\n"
" \"source_goto_declaration\": \"<primary>d\",\n"
" \"source_goto_method\": \"<primary>m\",\n"
" \"source_rename\": \"<primary>r\",\n"
" \"compile_and_run\": \"<primary>Return\",\n"
" \"compile\": \"<primary><shift>Return\"\n"
" },\n"
" \"directoryfilter\": {\n"
" \"ignore\": [\n"
" \"cmake\",\n"
" \"#\",\n"
" \"~\",\n"
" \".idea\",\n"
" \".so\",\n"
" \"in-lowercase.pls\"\n"
" ],\n"
" \"exceptions\": [\n"
" \"cmakelists.txt\",\n"
" \"in-lowercase.pls\"\n"
" ]\n"
" },\n"
" \"project\": {\n"
" \"run_commands\": [\n"
" \"./.build/\"\n"
" ],\n"
" \"compile_commands\": [\n"
" \"rm -rf ./.build\",\n"
" \"mkdir ./.build\",\n"
" \"cmake -DCMAKE_EXPORT_COMPILE_COMMANDS=ON -B./.build -H.\",\n"
" \"cd ./.build/; make\",\n"
" \"cp ./.build/compile_commands.json compile_commands.json\"\n"
" ]\n"
" },\n"
" \"example\": {\n"
" \"key\": \"value\",\n"
" \"key2\": [\n"
" \"val1\",\n"
" \"val2\",\n"
" 3\n"
" ],\n"
" \"key3\": \"value\"\n"
" }\n"
"}\n";
const std::string menuxml =
"<ui>\n"
" <menubar name=\"MenuBar\">\n"
" <menu action=\"FileMenu\">\n"
" <menuitem action=\"FileNewFile\"/>\n"
" <menuitem action=\"FileOpenFile\"/>\n"
" <menuitem action=\"FileOpenFolder\"/>\n"
" <menuitem action=\"FileSave\"/>\n"
" <menuitem action=\"FileSaveAs\"/>\n"
" <separator/>\n"
" <menuitem action=\"FileQuit\"/>\n"
" </menu>\n"
" <menu action=\"EditMenu\">\n"
" <menuitem action=\"EditCopy\"/>\n"
" <menuitem action=\"EditCut\"/>\n"
" <menuitem action=\"EditPaste\"/>\n"
" <separator/>\n"
" <menuitem action=\"EditFind\"/>\n"
" <menuitem action=\"EditUndo\"/>\n"
" <menuitem action=\"EditRedo\"/>\n"
" </menu>\n"
" <menu action=\"SourceMenu\">\n"
" <menuitem action=\"SourceGotoDeclaration\"/>\n"
" <menuitem action=\"SourceGotoMethod\"/>\n"
" <menuitem action=\"SourceRename\"/>\n"
" </menu>\n"
" <menu action=\"ProjectMenu\">\n"
" <menuitem action=\"ProjectCompileAndRun\"/>\n"
" <menuitem action=\"ProjectCompile\"/>\n"
" </menu>\n"
" <menu action=\"WindowMenu\">\n"
" <menuitem action=\"WindowCloseTab\"/>\n"
" <menuitem action=\"WindowSplitWindow\"/>\n"
" </menu>\n"
" <menu action=\"PluginMenu\">\n"
" </menu>\n"
" <menu action=\"HelpMenu\">\n"
" <menuitem action=\"HelpAbout\"/>\n"
" </menu>\n"
" </menubar>\n"
"</ui>\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";
Loading…
Cancel
Save