Compare commits

...

7 Commits

Author SHA1 Message Date
Joakim Skogø Langvand aae5dbe9f2 Merge branch 'more-editor-actions' into 'master' 3 months ago
eidheim 18c119f651 Slight improvement to last commit 3 months ago
eidheim a8d8188bf2 Merge branch 'objective_c' of https://gitlab.com/doe300/jucipp 3 months ago
eidheim 6ae1680438 Made variable sized array constant size 3 months ago
doe300 598fdee582 Try to detect .m files as Objective-C 4 months ago
doe300 30cdbbf170 Add detection of .mm files as Objective-C 4 months ago
Joakim Skogø Langvand a6fadcb171 Added some Emacs-style actions 4 years ago
  1. 5
      src/config.cpp
  2. 10
      src/source.cpp
  3. 58
      src/window.cpp

5
src/config.cpp

@ -391,6 +391,11 @@ std::string Config::default_config() {
"edit_shrink_selection": "<primary><shift><alt>a", "edit_shrink_selection": "<primary><shift><alt>a",
"edit_show_or_hide": "", "edit_show_or_hide": "",
"edit_find": "<primary>f", "edit_find": "<primary>f",
"edit_go_to_beginning_of_line": "",
"edit_go_to_end_of_line": "",
"edit_go_to_previous_line": "",
"edit_go_to_next_line": "",
"edit_insert_line": "",
"source_spellcheck": "", "source_spellcheck": "",
"source_spellcheck_clear": "", "source_spellcheck_clear": "",
"source_spellcheck_next_error": "<primary><shift>e", "source_spellcheck_next_error": "<primary><shift>e",

10
src/source.cpp

@ -83,6 +83,8 @@ Glib::RefPtr<Gsv::Language> Source::guess_language(const boost::filesystem::path
language = language_manager->get_language("glsl"); language = language_manager->get_language("glsl");
else if(extension == ".in" || extension == ".bak") else if(extension == ".in" || extension == ".bak")
return guess_language(boost::filesystem::path(file_path).replace_extension()); return guess_language(boost::filesystem::path(file_path).replace_extension());
else if(extension == ".mm")
language = language_manager->get_language("objc");
else if(!file_path.has_extension() && std::any_of(file_path.begin(), file_path.end(), else if(!file_path.has_extension() && std::any_of(file_path.begin(), file_path.end(),
[](const boost::filesystem::path &path) { return path == "include"; })) [](const boost::filesystem::path &path) { return path == "include"; }))
language = language_manager->get_language("cpphdr"); language = language_manager->get_language("cpphdr");
@ -101,6 +103,14 @@ Glib::RefPtr<Gsv::Language> Source::guess_language(const boost::filesystem::path
} }
else if(language->get_id() == "opencl") else if(language->get_id() == "opencl")
language = language_manager->get_language("cpp"); language = language_manager->get_language("cpp");
else if(language->get_id() == "octave" && extension == ".m") {
// .m is used for both Octave and Objective-C, so try to differentiate
std::ifstream input(file_path.string(), std::ios::binary);
std::string line;
if(input && std::getline(input, line) &&
(starts_with(line, "#import ") || starts_with(line, "@interface ") || starts_with(line, "/*") || starts_with(line, "//")))
language = language_manager->get_language("objc");
}
return language; return language;
} }

58
src/window.cpp

@ -754,6 +754,64 @@ void Window::set_menu_actions() {
search_and_replace_entry(); search_and_replace_entry();
}); });
menu.add_action("edit_go_to_beginning_of_line", []() {
if(auto view = Notebook::get().get_current_view()) {
auto buffer = view->get_buffer();
auto iter = buffer->get_insert()->get_iter();
// If we're already at the beginning of the line, move to
// first character excluding spaces.
if(iter.starts_line())
while(iter.get_char() == 0x20)
iter.forward_char();
else if(iter.backward_line())
iter.forward_line();
buffer->place_cursor(iter);
}
});
menu.add_action("edit_go_to_end_of_line", []() {
if(auto view = Notebook::get().get_current_view()) {
auto buffer = view->get_buffer();
auto iter = buffer->get_insert()->get_iter();
if(!iter.ends_line()) {
iter.forward_to_line_end();
buffer->place_cursor(iter);
}
}
});
menu.add_action("edit_go_to_previous_line", []() {
if(auto view = Notebook::get().get_current_view()) {
auto buffer = view->get_buffer();
auto iter = buffer->get_insert()->get_iter();
int offset = iter.get_visible_line_offset();
if(iter.backward_line()) {
int length = iter.get_chars_in_line();
iter.set_visible_line_offset(length < offset ? length : offset);
}
buffer->place_cursor(iter);
}
});
menu.add_action("edit_go_to_next_line", []() {
if(auto view = Notebook::get().get_current_view()) {
auto buffer = view->get_buffer();
auto iter = buffer->get_insert()->get_iter();
int offset = iter.get_visible_line_offset();
if(iter.forward_line()) {
int length = iter.get_chars_in_line();
iter.set_visible_line_offset(length < offset ? length : offset);
}
buffer->place_cursor(iter);
}
});
menu.add_action("edit_insert_line", []() {
if(auto view = Notebook::get().get_current_view()) {
auto buffer = view->get_buffer();
auto iter = buffer->get_insert()->get_iter();
if(iter.forward_line())
buffer->insert(iter, "\n");
}
});
menu.add_action("source_spellcheck", []() { menu.add_action("source_spellcheck", []() {
if(auto view = Notebook::get().get_current_view()) { if(auto view = Notebook::get().get_current_view()) {
view->remove_spellcheck_errors(); view->remove_spellcheck_errors();

Loading…
Cancel
Save