Compare commits

...

6 Commits

  1. 5
      src/config.cpp
  2. 7
      src/directories.cpp
  3. 28
      src/source_base.cpp
  4. 58
      src/window.cpp

5
src/config.cpp

@ -393,6 +393,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",

7
src/directories.cpp

@ -702,11 +702,8 @@ void Directories::add_or_update_path(const boost::filesystem::path &dir_path, co
grandchild->set_value(column_record.markup, Glib::Markup::escape_text("(empty)")); grandchild->set_value(column_record.markup, Glib::Markup::escape_text("(empty)"));
grandchild->set_value(column_record.type, PathType::unknown); grandchild->set_value(column_record.type, PathType::unknown);
} }
else { else
auto language = Source::guess_language(filename.first); child->set_value(column_record.type, Source::guess_language(filename.second) ? PathType::known : PathType::unknown);
if(!language)
child->set_value(column_record.type, PathType::unknown);
}
} }
} }
if(children.empty()) { if(children.empty()) {

28
src/source_base.cpp

@ -78,9 +78,31 @@ Glib::RefPtr<Gsv::Language> Source::guess_language(const boost::filesystem::path
language = language_manager->get_language("cpphdr"); language = language_manager->get_language("cpphdr");
else { else {
std::ifstream input(file_path.string(), std::ios::binary); std::ifstream input(file_path.string(), std::ios::binary);
std::string tag(5, '\0'); std::string first_chars(2, '\0');
if(input && input.read(&tag[0], static_cast<std::streamsize>(tag.size())) && tag == "<?xml") if(input && input.read(&first_chars[0], static_cast<std::streamsize>(first_chars.size()))) {
language = language_manager->get_language("xml"); if(first_chars == "<?") {
std::string next_chars(3, '\0');
if(input.read(&next_chars[0], static_cast<std::streamsize>(next_chars.size())) && next_chars == "xml")
language = language_manager->get_language("xml");
}
else if(first_chars == "#!") {
boost::filesystem::path interpreter;
input >> interpreter;
auto interpreter_filename = interpreter.filename().string();
if(interpreter_filename == "env")
input >> interpreter_filename;
if(interpreter_filename == "perl")
return language_manager->get_language("perl");
else if(interpreter_filename == "python3")
return language_manager->get_language("python3");
else if(interpreter_filename == "python")
return language_manager->get_language("python");
else if(interpreter_filename == "sh" || interpreter_filename == "bash")
return language_manager->get_language("sh");
else if(interpreter_filename == "node")
return language_manager->get_language("js");
}
}
} }
} }
else if(language->get_id() == "cuda") { else if(language->get_id() == "cuda") {

58
src/window.cpp

@ -755,6 +755,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