mirror of https://gitlab.com/cppit/jucipp
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.
692 lines
32 KiB
692 lines
32 KiB
#include "config.hpp" |
|
#include "filesystem.hpp" |
|
#include "process.hpp" |
|
#include "terminal.hpp" |
|
#include "utility.hpp" |
|
#include <algorithm> |
|
#include <exception> |
|
#include <iostream> |
|
#include <thread> |
|
|
|
Config::Config() { |
|
home_path = filesystem::get_home_path(); |
|
if(home_path.empty()) |
|
throw std::runtime_error("Could not find home path"); |
|
home_juci_path = home_path / ".juci"; |
|
} |
|
|
|
void Config::load() { |
|
auto config_dir = home_juci_path / "config"; |
|
auto config_json = config_dir / "config.json"; |
|
try { |
|
boost::filesystem::create_directories(config_dir); |
|
|
|
if(!boost::filesystem::exists(config_json)) |
|
filesystem::write(config_json, default_config()); |
|
|
|
auto juci_style_path = home_juci_path / "styles"; |
|
boost::filesystem::create_directories(juci_style_path); |
|
|
|
juci_style_path /= "juci-light.xml"; |
|
if(!boost::filesystem::exists(juci_style_path)) |
|
filesystem::write(juci_style_path, juci_light_style()); |
|
juci_style_path = juci_style_path.parent_path(); |
|
juci_style_path /= "juci-dark.xml"; |
|
if(!boost::filesystem::exists(juci_style_path)) |
|
filesystem::write(juci_style_path, juci_dark_style()); |
|
juci_style_path = juci_style_path.parent_path(); |
|
juci_style_path /= "juci-dark-blue.xml"; |
|
if(!boost::filesystem::exists(juci_style_path)) |
|
filesystem::write(juci_style_path, juci_dark_blue_style()); |
|
|
|
JSON cfg(config_json); |
|
update(cfg); |
|
read(cfg); |
|
} |
|
catch(const std::exception &e) { |
|
dispatcher.post([config_json = std::move(config_json), e_what = std::string(e.what())] { |
|
::Terminal::get().print("\e[31mError\e[m: could not parse " + filesystem::get_short_path(config_json).string() + ": " + e_what + "\n", true); |
|
}); |
|
JSON default_cfg(default_config()); |
|
read(default_cfg); |
|
} |
|
} |
|
|
|
void Config::update(JSON &cfg) { |
|
auto version = cfg.string("version"); |
|
if(version == JUCI_VERSION) |
|
return; |
|
JSON default_cfg(default_config()); |
|
make_version_dependent_corrections(cfg, default_cfg, version); |
|
cfg.set("version", JUCI_VERSION); |
|
|
|
add_missing_nodes(cfg, default_cfg); |
|
remove_deprecated_nodes(cfg, default_cfg); |
|
|
|
cfg.to_file(home_juci_path / "config" / "config.json", 2); |
|
|
|
auto style_path = home_juci_path / "styles"; |
|
filesystem::write(style_path / "juci-light.xml", juci_light_style()); |
|
filesystem::write(style_path / "juci-dark.xml", juci_dark_style()); |
|
filesystem::write(style_path / "juci-dark-blue.xml", juci_dark_blue_style()); |
|
} |
|
|
|
void Config::make_version_dependent_corrections(JSON &cfg, const JSON &default_cfg, const std::string &version) { |
|
try { |
|
if(version_compare(version, "1.2.4") <= 0) { |
|
auto keybindings = cfg.object("keybindings"); |
|
auto print = keybindings.string_optional("print"); |
|
if(print && *print == "<primary>p") { |
|
keybindings.set("print", ""); |
|
dispatcher.post([] { |
|
::Terminal::get().print("Preference change: keybindings.print set to \"\"\n"); |
|
}); |
|
} |
|
} |
|
} |
|
catch(const std::exception &e) { |
|
std::cerr << "Error correcting preferences: " << e.what() << std::endl; |
|
} |
|
} |
|
|
|
void Config::add_missing_nodes(JSON &cfg, const JSON &default_cfg) { |
|
for(auto &default_cfg_child : default_cfg.children_or_empty()) { |
|
try { |
|
auto cfg_child = cfg.child(default_cfg_child.first); |
|
add_missing_nodes(cfg_child, default_cfg_child.second); |
|
} |
|
catch(...) { |
|
cfg.set(default_cfg_child.first, default_cfg_child.second); |
|
} |
|
} |
|
} |
|
|
|
void Config::remove_deprecated_nodes(JSON &cfg, const JSON &default_cfg) { |
|
auto children = cfg.children_or_empty(); |
|
for(size_t i = 0; i < children.size();) { |
|
try { |
|
auto default_cfg_child = default_cfg.child(children[i].first); |
|
remove_deprecated_nodes(children[i].second, default_cfg_child); |
|
++i; |
|
} |
|
catch(...) { |
|
cfg.remove(children[i].first); |
|
children = cfg.children_or_empty(); |
|
} |
|
} |
|
} |
|
|
|
void Config::read(const JSON &cfg) { |
|
for(auto &keybinding : cfg.children("keybindings")) |
|
menu.keys[keybinding.first] = keybinding.second.string(); |
|
|
|
auto source_json = cfg.object("source"); |
|
source.style = source_json.string("style"); |
|
source.font = source_json.string("font"); |
|
source.add_missing_newline_at_end_of_file_on_save = source_json.boolean("add_missing_newline_at_end_of_file_on_save", JSON::ParseOptions::accept_string); |
|
source.remove_trailing_whitespace_characters_on_save = source_json.boolean("remove_trailing_whitespace_characters_on_save", JSON::ParseOptions::accept_string); |
|
source.show_whitespace_characters = source_json.string("show_whitespace_characters"); |
|
source.format_style_on_save = source_json.boolean("format_style_on_save", JSON::ParseOptions::accept_string); |
|
source.format_style_on_save_if_style_file_found = source_json.boolean("format_style_on_save_if_style_file_found", JSON::ParseOptions::accept_string); |
|
source.smart_brackets = source_json.boolean("smart_brackets", JSON::ParseOptions::accept_string); |
|
source.smart_inserts = source_json.boolean("smart_inserts", JSON::ParseOptions::accept_string); |
|
if(source.smart_inserts) |
|
source.smart_brackets = true; |
|
source.show_map = source_json.boolean("show_map", JSON::ParseOptions::accept_string); |
|
source.map_font_size = source_json.integer("map_font_size", JSON::ParseOptions::accept_string); |
|
source.show_git_diff = source_json.boolean("show_git_diff", JSON::ParseOptions::accept_string); |
|
source.show_background_pattern = source_json.boolean("show_background_pattern", JSON::ParseOptions::accept_string); |
|
source.show_right_margin = source_json.boolean("show_right_margin", JSON::ParseOptions::accept_string); |
|
source.right_margin_position = source_json.integer("right_margin_position", JSON::ParseOptions::accept_string); |
|
source.pixels_between_lines = source_json.integer("pixels_between_lines", JSON::ParseOptions::accept_string); |
|
source.spellcheck_language = source_json.string("spellcheck_language"); |
|
auto default_tab_char_str = source_json.string("default_tab_char"); |
|
if(default_tab_char_str.size() == 1) |
|
source.default_tab_char = default_tab_char_str[0]; |
|
else |
|
source.default_tab_char = ' '; |
|
source.default_tab_size = source_json.integer("default_tab_size", JSON::ParseOptions::accept_string); |
|
source.auto_tab_char_and_size = source_json.boolean("auto_tab_char_and_size", JSON::ParseOptions::accept_string); |
|
source.tab_indents_line = source_json.boolean("tab_indents_line", JSON::ParseOptions::accept_string); |
|
source.word_wrap = source_json.string("word_wrap"); |
|
source.highlight_current_line = source_json.boolean("highlight_current_line", JSON::ParseOptions::accept_string); |
|
source.show_line_numbers = source_json.boolean("show_line_numbers", JSON::ParseOptions::accept_string); |
|
source.enable_multiple_cursors = source_json.boolean("enable_multiple_cursors", JSON::ParseOptions::accept_string); |
|
source.auto_reload_changed_files = source_json.boolean("auto_reload_changed_files", JSON::ParseOptions::accept_string); |
|
source.search_for_selection = source_json.boolean("search_for_selection", JSON::ParseOptions::accept_string); |
|
source.tooltip_top_offset = source_json.integer("tooltip_top_offset", JSON::ParseOptions::accept_string); |
|
source.clang_format_style = source_json.string("clang_format_style"); |
|
source.clang_usages_threads = static_cast<unsigned>(source_json.integer("clang_usages_threads", JSON::ParseOptions::accept_string)); |
|
source.clang_tidy_enable = source_json.boolean("clang_tidy_enable", JSON::ParseOptions::accept_string); |
|
source.clang_tidy_checks = source_json.string("clang_tidy_checks"); |
|
source.clang_detailed_preprocessing_record = source_json.boolean("clang_detailed_preprocessing_record", JSON::ParseOptions::accept_string); |
|
source.debug_place_cursor_at_stop = source_json.boolean("debug_place_cursor_at_stop", JSON::ParseOptions::accept_string); |
|
|
|
for(auto &documentation_searches : cfg.children("documentation_searches")) { |
|
auto &documentation_search = source.documentation_searches[documentation_searches.first]; |
|
documentation_search.separator = documentation_searches.second.string("separator"); |
|
for(auto &i : documentation_searches.second.children("queries")) |
|
documentation_search.queries[i.first] = i.second.string(); |
|
} |
|
|
|
auto theme_json = cfg.object("gtk_theme"); |
|
theme.name = theme_json.string("name"); |
|
theme.variant = theme_json.string("variant"); |
|
theme.font = theme_json.string("font"); |
|
|
|
auto project_json = cfg.object("project"); |
|
project.default_build_path = project_json.string("default_build_path"); |
|
project.debug_build_path = project_json.string("debug_build_path"); |
|
auto cmake_json = project_json.object("cmake"); |
|
project.cmake.command = cmake_json.string("command"); |
|
project.cmake.compile_command = cmake_json.string("compile_command"); |
|
auto meson_json = project_json.object("meson"); |
|
project.meson.command = meson_json.string("command"); |
|
project.meson.compile_command = meson_json.string("compile_command"); |
|
project.default_build_management_system = project_json.string("default_build_management_system"); |
|
project.save_on_compile_or_run = project_json.boolean("save_on_compile_or_run", JSON::ParseOptions::accept_string); |
|
project.ctags_command = project_json.string("ctags_command"); |
|
project.grep_command = project_json.string("grep_command"); |
|
project.cargo_command = project_json.string("cargo_command"); |
|
project.python_command = project_json.string("python_command"); |
|
project.markdown_command = project_json.string("markdown_command"); |
|
std::stringstream ss(project_json.string("open_with_default_application")); |
|
std::string str; |
|
project.open_with_default_application.clear(); |
|
while(getline(ss, str, ',')) { |
|
while(!str.empty() && str.front() == ' ') |
|
str.erase(str.begin()); |
|
project.open_with_default_application.emplace_back(std::move(str)); |
|
} |
|
|
|
auto terminal_json = cfg.object("terminal"); |
|
terminal.history_size = terminal_json.integer("history_size", JSON::ParseOptions::accept_string); |
|
terminal.font = terminal_json.string("font"); |
|
terminal.clear_on_compile = terminal_json.boolean("clear_on_compile", JSON::ParseOptions::accept_string); |
|
terminal.clear_on_run_command = terminal_json.boolean("clear_on_run_command", JSON::ParseOptions::accept_string); |
|
terminal.hide_entry_on_run_command = terminal_json.boolean("hide_entry_on_run_command", JSON::ParseOptions::accept_string); |
|
|
|
auto log_json = cfg.object("log"); |
|
log.libclang = log_json.boolean("libclang", JSON::ParseOptions::accept_string); |
|
log.language_server = log_json.boolean("language_server", JSON::ParseOptions::accept_string); |
|
} |
|
|
|
std::string Config::default_config() { |
|
static auto get_config = [] { |
|
std::string cmake_version; |
|
unsigned thread_count = 0; |
|
std::stringstream ss; |
|
TinyProcessLib::Config processConfig{}; |
|
#ifdef JUCI_FLATPAK_SANDBOX |
|
processConfig.flatpak_spawn_host = true; |
|
#endif |
|
TinyProcessLib::Process process( |
|
"cmake --version", "", |
|
[&ss](const char *buffer, size_t n) { |
|
ss.write(buffer, n); |
|
}, |
|
[](const char *buffer, size_t n) {}, false, processConfig); |
|
if(process.get_exit_status() == 0) { |
|
std::string line; |
|
if(std::getline(ss, line)) { |
|
auto pos = line.rfind(" "); |
|
if(pos != std::string::npos) { |
|
cmake_version = line.substr(pos + 1); |
|
thread_count = std::thread::hardware_concurrency(); |
|
} |
|
} |
|
} |
|
|
|
return std::string(R"RAW({ |
|
"version": ")RAW" + |
|
std::string(JUCI_VERSION) + |
|
R"RAW(", |
|
"gtk_theme": { |
|
"name_comment": "Use \"\" for default theme, At least these two exist on all systems: Adwaita, Raleigh", |
|
"name": "", |
|
"variant_comment": "Use \"\" for default variant, and \"dark\" for dark theme variant. Note that not all themes support dark variant, but for instance Adwaita does", |
|
"variant": "", |
|
"font_comment": "Set to override theme font, for instance: \"Arial 12\"", |
|
"font": "" |
|
}, |
|
"source": { |
|
"style_comment": "Use \"\" for default style, and for instance juci-dark or juci-dark-blue together with dark gtk_theme variant. Styles from normal gtksourceview install: classic, cobalt, kate, oblivion, solarized-dark, solarized-light, tango", |
|
"style": "juci-light", |
|
"font_comment": "Use \"\" for default font, and for instance \"Monospace 12\" to also set size",)RAW" |
|
#ifdef __APPLE__ |
|
R"RAW( |
|
"font": "Menlo",)RAW" |
|
#else |
|
#ifdef _WIN32 |
|
R"RAW( |
|
"font": "Consolas",)RAW" |
|
#else |
|
R"RAW( |
|
"font": "Monospace",)RAW" |
|
#endif |
|
#endif |
|
R"RAW( |
|
"add_missing_newline_at_end_of_file_on_save": true, |
|
"remove_trailing_whitespace_characters_on_save": false, |
|
"show_whitespace_characters_comment": "Determines what kind of whitespaces should be drawn. Use comma-separated list of: space, tab, newline, nbsp, leading, text, trailing or all", |
|
"show_whitespace_characters": "", |
|
"format_style_on_save_comment": "Performs style format on save if supported on language in buffer", |
|
"format_style_on_save": false, |
|
"format_style_on_save_if_style_file_found_comment": "Format style if format file is found, even if format_style_on_save is false", |
|
"format_style_on_save_if_style_file_found": true, |
|
"smart_brackets_comment": "If smart_inserts is enabled, this option is automatically enabled. When inserting an already closed bracket, the cursor might instead be moved, avoiding the need of arrow keys after autocomplete", |
|
"smart_brackets": true, |
|
"smart_inserts_comment": "When for instance inserting (, () gets inserted. Applies to: (), [], \", '. Also enables pressing ; inside an expression before a final ) to insert ; at the end of line, and deletions of empty insertions", |
|
"smart_inserts": true, |
|
"show_map": true, |
|
"map_font_size": 1, |
|
"show_git_diff": true, |
|
"show_background_pattern": true, |
|
"show_right_margin": false, |
|
"right_margin_position": 80, |
|
"pixels_between_lines": 0, |
|
"spellcheck_language_comment": "Use \"\" to set language from your locale settings", |
|
"spellcheck_language": "en_US", |
|
"auto_tab_char_and_size_comment": "Use false to always use default tab char and size", |
|
"auto_tab_char_and_size": true, |
|
"default_tab_char_comment": "Use \"\t\" for regular tab", |
|
"default_tab_char": " ", |
|
"default_tab_size": 2, |
|
"tab_indents_line": true, |
|
"word_wrap_comment": "Specify language ids that should enable word wrap, for instance: chdr, c, cpphdr, cpp, js, python, or all to enable word wrap for all languages", |
|
"word_wrap": "markdown, latex", |
|
"highlight_current_line": true, |
|
"show_line_numbers": true, |
|
"enable_multiple_cursors": false, |
|
"auto_reload_changed_files": true, |
|
"search_for_selection": true, |
|
"tooltip_top_offset": 0, |
|
"clang_format_style_comment": "IndentWidth, AccessModifierOffset and UseTab are set automatically. See http://clang.llvm.org/docs/ClangFormatStyleOptions.html", |
|
"clang_format_style": "ColumnLimit: 0, NamespaceIndentation: All", |
|
"clang_tidy_enable_comment": "Enable clang-tidy in new C/C++ buffers", |
|
"clang_tidy_enable": false, |
|
"clang_tidy_checks_comment": "In new C/C++ buffers, these checks are appended to the value of 'Checks' in the .clang-tidy file, if any", |
|
"clang_tidy_checks": "", |
|
"clang_usages_threads_comment": "The number of threads used in finding usages in unparsed files. -1 corresponds to the number of cores available, and 0 disables the search", |
|
"clang_usages_threads": -1, |
|
"clang_detailed_preprocessing_record_comment": "Set to true to, at the cost of increased resource use, include all macro definitions and instantiations when parsing new C/C++ buffers. You should reopen buffers and delete build/.usages_clang after changing this option.", |
|
"clang_detailed_preprocessing_record": false, |
|
"debug_place_cursor_at_stop": false |
|
}, |
|
"terminal": { |
|
"history_size": 10000, |
|
"font_comment": "Use \"\" to use source.font with slightly smaller size", |
|
"font": "", |
|
"clear_on_compile": true, |
|
"clear_on_run_command": false, |
|
"hide_entry_on_run_command": true |
|
}, |
|
"project": { |
|
"default_build_path_comment": "Use <project_directory_name> to insert the project top level directory name", |
|
"default_build_path": "./build", |
|
"debug_build_path_comment": "Use <project_directory_name> to insert the project top level directory name, and <default_build_path> to insert your default_build_path setting.", |
|
"debug_build_path": "<default_build_path>/debug", |
|
"cmake": {)RAW" |
|
#ifdef _WIN32 |
|
R"RAW( |
|
"command": "cmake -G\"MSYS Makefiles\"",)RAW" |
|
#else |
|
R"RAW( |
|
"command": "cmake",)RAW" |
|
#endif |
|
R"RAW( |
|
"compile_command": "cmake --build .)RAW" + |
|
(thread_count > 1 && !cmake_version.empty() && version_compare(cmake_version, "3.12") >= 0 ? " --parallel " + std::to_string(thread_count) : "") + |
|
R"RAW(" |
|
}, |
|
"meson": { |
|
"command": "meson", |
|
"compile_command": "ninja" |
|
}, |
|
"default_build_management_system_comment": "Select which build management system to use when creating a new C or C++ project, for instance \"cmake\" or \"meson\"", |
|
"default_build_management_system": "cmake", |
|
"save_on_compile_or_run": true,)RAW" |
|
#ifdef JUCI_USE_UCTAGS |
|
R"RAW( |
|
"ctags_command": "uctags",)RAW" |
|
#else |
|
R"RAW( |
|
"ctags_command": "ctags",)RAW" |
|
#endif |
|
R"RAW( |
|
"grep_command": "grep", |
|
"cargo_command": "cargo", |
|
"python_command": "python -u", |
|
"markdown_command": "grip -b", |
|
"open_with_default_application_comment": "Comma-separated list of file extensions that should be opened with system default applications", |
|
"open_with_default_application": ".pdf,.png" |
|
}, |
|
"keybindings": { |
|
"preferences": "<primary>comma", |
|
"snippets": "", |
|
"commands": "", |
|
"quit": "<primary>q", |
|
"file_new_file": "<primary>n", |
|
"file_new_folder": "<primary><shift>n", |
|
"file_open_file": "<primary>o", |
|
"file_open_folder": "<primary><shift>o", |
|
"file_find_file": "<primary>p", |
|
"file_switch_file_type": "<alt>o", |
|
"file_reload_file": "", |
|
"file_save": "<primary>s", |
|
"file_save_as": "<primary><shift>s", |
|
"file_close_file": "<primary>w", |
|
"file_close_folder": "", |
|
"file_close_project": "", |
|
"file_close_other_files": "", |
|
"file_print": "", |
|
"edit_undo": "<primary>z", |
|
"edit_redo": "<primary><shift>z", |
|
"edit_cut": "<primary>x", |
|
"edit_cut_lines": "<primary><shift>x", |
|
"edit_copy": "<primary>c", |
|
"edit_copy_lines": "<primary><shift>c", |
|
"edit_paste": "<primary>v", |
|
"edit_extend_selection": "<primary><shift>a", |
|
"edit_shrink_selection": "<primary><shift><alt>a", |
|
"edit_show_or_hide": "", |
|
"edit_find": "<primary>f", |
|
"source_spellcheck": "", |
|
"source_spellcheck_clear": "", |
|
"source_spellcheck_next_error": "<primary><shift>e", |
|
"source_git_next_diff": "<primary>k", |
|
"source_git_show_diff": "<alt>k", |
|
"source_indentation_set_buffer_tab": "", |
|
"source_indentation_auto_indent_buffer": "<primary><shift>i", |
|
"source_goto_line": "<primary>g", |
|
"source_center_cursor": "<primary>l", |
|
"source_cursor_history_back": "<alt>Left", |
|
"source_cursor_history_forward": "<alt>Right", |
|
"source_show_completion_comment": "Add completion keybinding to disable interactive autocompletion", |
|
"source_show_completion": "", |
|
"source_find_symbol": "<primary><shift>f", |
|
"source_find_pattern": "<alt><shift>f", |
|
"source_comments_toggle": "<primary>slash", |
|
"source_comments_add_documentation": "<primary><alt>slash", |
|
"source_find_documentation": "<primary><shift>d", |
|
"source_goto_declaration": "<primary>d", |
|
"source_goto_type_declaration": "<alt><shift>d", |
|
"source_goto_implementation": "<primary>i", |
|
"source_goto_usage": "<primary>u", |
|
"source_goto_method": "<primary>m", |
|
"source_rename": "<primary>r", |
|
"source_implement_method": "<primary><shift>m", |
|
"source_goto_next_diagnostic": "<primary>e", |
|
"source_apply_fix_its": "<control>space", |
|
"project_set_run_arguments": "", |
|
"project_compile_and_run": "<primary>Return", |
|
"project_compile": "<primary><shift>Return", |
|
"project_run_command": "<alt>Return", |
|
"project_kill_last_running": "<primary>Escape", |
|
"project_force_kill_last_running": "<primary><shift>Escape", |
|
"debug_set_run_arguments": "", |
|
"debug_start_continue": "<primary>y", |
|
"debug_stop": "<primary><shift>y", |
|
"debug_kill": "<primary><shift>k", |
|
"debug_step_over": "<primary>j", |
|
"debug_step_into": "<primary>t", |
|
"debug_step_out": "<primary><shift>t", |
|
"debug_backtrace": "<primary><shift>j", |
|
"debug_show_variables": "<primary><shift>b", |
|
"debug_run_command": "<alt><shift>Return", |
|
"debug_toggle_breakpoint": "<primary>b", |
|
"debug_show_breakpoints": "<primary><shift><alt>b", |
|
"debug_goto_stop": "<primary><shift>l",)RAW" |
|
#ifdef __linux |
|
R"RAW( |
|
"window_next_tab": "<primary>Tab", |
|
"window_previous_tab": "<primary><shift>Tab",)RAW" |
|
#else |
|
R"RAW( |
|
"window_next_tab": "<primary><alt>Right", |
|
"window_previous_tab": "<primary><alt>Left",)RAW" |
|
#endif |
|
R"RAW( |
|
"window_goto_tab": "", |
|
"window_toggle_split": "", |
|
"window_split_source_buffer": "",)RAW" |
|
#ifdef __APPLE__ |
|
R"RAW( |
|
"window_toggle_full_screen": "<primary><control>f",)RAW" |
|
#else |
|
R"RAW( |
|
"window_toggle_full_screen": "F11",)RAW" |
|
#endif |
|
R"RAW( |
|
"window_toggle_directories": "", |
|
"window_toggle_terminal": "", |
|
"window_toggle_status": "", |
|
"window_toggle_menu": "", |
|
"window_toggle_tabs": "", |
|
"window_toggle_zen_mode": "", |
|
"window_clear_terminal": "" |
|
}, |
|
"documentation_searches": { |
|
"clang": { |
|
"separator": "::", |
|
"queries": { |
|
"@empty": "https://www.google.com/search?q=c%2B%2B+", |
|
"std": "https://www.google.com/search?q=site:http://www.cplusplus.com/reference/+", |
|
"boost": "https://www.google.com/search?q=site:http://www.boost.org/doc/libs/1_59_0/+", |
|
"Gtk": "https://www.google.com/search?q=site:https://developer.gnome.org/gtkmm/stable/+", |
|
"@any": "https://www.google.com/search?q=" |
|
} |
|
} |
|
}, |
|
"log": { |
|
"libclang_comment": "Outputs diagnostics for new C/C++ buffers", |
|
"libclang": false, |
|
"language_server": false |
|
} |
|
} |
|
)RAW"); |
|
}; |
|
static auto config = get_config(); |
|
return config; |
|
} |
|
|
|
const char *Config::juci_light_style() { |
|
return R"RAW(<?xml version="1.0" encoding="UTF-8"?> |
|
|
|
<style-scheme id="juci-light" _name="juci" version="1.0"> |
|
<author>juCi++ team</author> |
|
<_description>Default juCi++ style</_description> |
|
|
|
<!-- Palette --> |
|
<color name="white" value="#FFFFFF"/> |
|
<color name="black" value="#000000"/> |
|
<color name="gray" value="#888888"/> |
|
<color name="red" value="#CC0000"/> |
|
<color name="green" value="#008800"/> |
|
<color name="blue" value="#0000FF"/> |
|
<color name="dark-blue" value="#002299"/> |
|
<color name="yellow" value="#FFFF00"/> |
|
<color name="light-yellow" value="#FFFF88"/> |
|
<color name="orange" value="#FF8800"/> |
|
<color name="purple" value="#990099"/> |
|
|
|
<style name="text" foreground="#000000" background="#FFFFFF"/> |
|
<style name="background-pattern" background="#rgba(0,0,0,.03)"/> |
|
<style name="selection" background="#4A90D9"/> |
|
|
|
<!-- Current Line Highlighting --> |
|
<style name="current-line" background="#rgba(0,0,0,.07)"/> |
|
|
|
<!-- Bracket Matching --> |
|
<style name="bracket-match" foreground="white" background="gray" bold="true"/> |
|
<style name="bracket-mismatch" foreground="white" background="#FF0000" bold="true"/> |
|
|
|
<!-- Search Matching --> |
|
<style name="search-match" foreground="#000000" background="#FFFF00"/> |
|
|
|
<!-- Language specifics --> |
|
<style name="def:builtin" foreground="blue"/> |
|
<style name="def:constant" foreground="blue"/> |
|
<style name="def:boolean" foreground="red"/> |
|
<style name="def:decimal" foreground="red"/> |
|
<style name="def:base-n-integer" foreground="red"/> |
|
<style name="def:floating-point" foreground="red"/> |
|
<style name="def:complex" foreground="red"/> |
|
<style name="def:character" foreground="red"/> |
|
<style name="def:special-char" foreground="red"/> |
|
|
|
<!-- Language specifics used by clang-parser in default config --> |
|
<style name="def:string" foreground="red"/> |
|
<style name="def:comment" foreground="gray"/> |
|
<style name="def:statement" foreground="blue"/> |
|
<style name="def:type" foreground="blue"/> |
|
<style name="def:function" foreground="dark-blue"/> |
|
<style name="def:identifier" foreground="purple"/> |
|
<style name="def:preprocessor" foreground="green"/> |
|
<style name="def:error" foreground="red"/> |
|
<style name="def:warning" foreground="orange"/> |
|
<style name="def:note" foreground="black" background="light-yellow"/> |
|
|
|
<style name="diff:added-line" foreground="green"/> |
|
<style name="diff:removed-line" foreground="red"/> |
|
<style name="diff:changed-line" foreground="orange"/> |
|
<style name="diff:diff-file" use-style="def:type"/> |
|
<style name="diff:location" use-style="def:statement"/> |
|
<style name="diff:special-case" use-style="def:constant"/> |
|
|
|
</style-scheme> |
|
)RAW"; |
|
} |
|
|
|
const char *Config::juci_dark_style() { |
|
return R"RAW(<?xml version="1.0" encoding="UTF-8"?> |
|
|
|
<style-scheme id="juci-dark" _name="juci" version="1.0"> |
|
<author>juCi++ team</author> |
|
<_description>Dark juCi++ style</_description> |
|
|
|
<!-- Palette --> |
|
<color name="white" value="#D6D6D6"/> |
|
<color name="black" value="#202428"/> |
|
<color name="gray" value="#919191"/> |
|
<color name="red" value="#FF9999"/> |
|
<color name="yellow" value="#EEEE66"/> |
|
<color name="green" value="#AACC99"/> |
|
<color name="blue" value="#88AAFF"/> |
|
<color name="light-blue" value="#AABBEE"/> |
|
<color name="purple" value="#DD99DD"/> |
|
|
|
<style name="text" foreground="white" background="black"/> |
|
<style name="background-pattern" background="#rgba(255,255,255,.04)"/> |
|
<style name="selection" background="#215D9C"/> |
|
|
|
<!-- Current Line Highlighting --> |
|
<style name="current-line" background="#rgba(255,255,255,.05)"/> |
|
|
|
<!-- Bracket Matching --> |
|
<style name="bracket-match" foreground="black" background="gray" bold="true"/> |
|
<style name="bracket-mismatch" foreground="black" background="#FF0000" bold="true"/> |
|
|
|
<!-- Search Matching --> |
|
<style name="search-match" foreground="#000000" background="#FFFF00"/> |
|
|
|
<!-- Language specifics --> |
|
<style name="def:builtin" foreground="blue"/> |
|
<style name="def:constant" foreground="blue"/> |
|
<style name="def:boolean" foreground="red"/> |
|
<style name="def:decimal" foreground="red"/> |
|
<style name="def:base-n-integer" foreground="red"/> |
|
<style name="def:floating-point" foreground="red"/> |
|
<style name="def:complex" foreground="red"/> |
|
<style name="def:character" foreground="red"/> |
|
<style name="def:special-char" foreground="red"/> |
|
|
|
<!-- Language specifics used by clang-parser in default config --> |
|
<style name="def:string" foreground="red"/> |
|
<style name="def:comment" foreground="gray"/> |
|
<style name="def:statement" foreground="blue"/> |
|
<style name="def:type" foreground="blue"/> |
|
<style name="def:function" foreground="light-blue"/> |
|
<style name="def:identifier" foreground="purple"/> |
|
<style name="def:preprocessor" foreground="green"/> |
|
<style name="def:error" foreground="red"/> |
|
<style name="def:warning" foreground="yellow"/> |
|
<style name="def:note" foreground="#E6E6E6" background="#383F46"/> |
|
|
|
<style name="diff:added-line" foreground="green"/> |
|
<style name="diff:removed-line" foreground="red"/> |
|
<style name="diff:changed-line" foreground="yellow"/> |
|
<style name="diff:diff-file" use-style="def:type"/> |
|
<style name="diff:location" use-style="def:statement"/> |
|
<style name="diff:special-case" use-style="def:constant"/> |
|
|
|
</style-scheme> |
|
)RAW"; |
|
} |
|
|
|
const char *Config::juci_dark_blue_style() { |
|
return R"RAW(<?xml version="1.0" encoding="UTF-8"?> |
|
|
|
<style-scheme id="juci-dark-blue" _name="juci" version="1.0"> |
|
<author>juCi++ team</author> |
|
<_description>Dark blue juCi++ style based on the Emacs deeper blue theme</_description> |
|
|
|
<!-- Palette --> |
|
<color name="white" value="#D6D6D6"/> |
|
<color name="dark-blue" value="#202233"/> |
|
<color name="gray" value="#919191"/> |
|
<color name="red" value="#FF7777"/> |
|
<color name="yellow" value="#FFE100"/> |
|
<color name="light-yellow" value="#EAC595"/> |
|
<color name="blue" value="#00CCFF"/> |
|
<color name="green" value="#14ECA8"/> |
|
<color name="light-blue" value="#8BFAFF"/> |
|
<color name="light-green" value="#A0DB6B"/> |
|
|
|
<style name="text" foreground="white" background="dark-blue"/> |
|
<style name="background-pattern" background="#rgba(255,255,255,.04)"/> |
|
<style name="selection" background="#215D9C"/> |
|
|
|
<!-- Current Line Highlighting --> |
|
<style name="current-line" background="#rgba(255,255,255,.05)"/> |
|
|
|
<!-- Bracket Matching --> |
|
<style name="bracket-match" foreground="dark-blue" background="gray" bold="true"/> |
|
<style name="bracket-mismatch" foreground="dark-blue" background="#FF0000" bold="true"/> |
|
|
|
<!-- Search Matching --> |
|
<style name="search-match" foreground="#000000" background="#FFFF00"/> |
|
|
|
<!-- Language specifics --> |
|
<style name="def:builtin" foreground="blue"/> |
|
<style name="def:constant" foreground="blue"/> |
|
<style name="def:boolean" foreground="light-yellow"/> |
|
<style name="def:decimal" foreground="light-yellow"/> |
|
<style name="def:base-n-integer" foreground="light-yellow"/> |
|
<style name="def:floating-point" foreground="light-yellow"/> |
|
<style name="def:complex" foreground="light-yellow"/> |
|
<style name="def:character" foreground="light-yellow"/> |
|
<style name="def:special-char" foreground="light-yellow"/> |
|
|
|
<!-- Language specifics used by clang-parser in default config --> |
|
<style name="def:string" foreground="light-yellow"/> |
|
<style name="def:comment" foreground="gray"/> |
|
<style name="def:statement" foreground="blue"/> |
|
<style name="def:type" foreground="blue"/> |
|
<style name="def:function" foreground="light-blue"/> |
|
<style name="def:identifier" foreground="light-green"/> |
|
<style name="def:preprocessor" foreground="yellow"/> |
|
<style name="def:error" foreground="red"/> |
|
<style name="def:warning" foreground="yellow"/> |
|
<style name="def:note" foreground="#E6E6E6" background="#383C59"/> |
|
|
|
<style name="diff:added-line" foreground="green"/> |
|
<style name="diff:removed-line" foreground="red"/> |
|
<style name="diff:changed-line" foreground="yellow"/> |
|
<style name="diff:diff-file" use-style="def:type"/> |
|
<style name="diff:location" use-style="def:statement"/> |
|
<style name="diff:special-case" use-style="def:constant"/> |
|
|
|
</style-scheme> |
|
)RAW"; |
|
}
|
|
|