Compare commits

...

4 Commits

Author SHA1 Message Date
Joakim Skogø Langvand 0a51b36e40 Merge branch 'more-editor-actions' into 'master' 8 months ago
eidheim 14b3317eee Select all now works in terminal as well 8 months ago
eidheim 1f94ae9a80 Added comment char for prolog 9 months ago
Joakim Skogø Langvand a6fadcb171 Added some Emacs-style actions 4 years ago
  1. 5
      src/config.cpp
  2. 2
      src/source.cpp
  3. 13
      src/source_base.cpp
  4. 6
      src/source_base.hpp
  5. 3
      src/terminal.cpp
  6. 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_show_or_hide": "",
"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_clear": "",
"source_spellcheck_next_error": "<primary><shift>e",

2
src/source.cpp

@ -223,7 +223,7 @@ Source::View::View(const boost::filesystem::path &file_path, const Glib::RefPtr<
else {
if(is_language({"cmake", "makefile", "python", "python3", "sh", "perl", "ruby", "r", "asm", "automake", "yaml", "docker", "julia"}))
comment_characters = "#";
else if(is_language({"latex", "matlab", "octave", "bibtex"}))
else if(is_language({"latex", "matlab", "octave", "bibtex", "prolog"}))
comment_characters = "%";
else if(language_id == "fortran")
comment_characters = "!";

13
src/source_base.cpp

@ -10,6 +10,12 @@
#include <gtksourceview/gtksource.h>
#include <regex>
#ifdef __APPLE__
GdkModifierType Source::CommonView::primary_modifier_mask = GDK_MOD2_MASK;
#else
GdkModifierType Source::CommonView::primary_modifier_mask = GDK_CONTROL_MASK;
#endif
Source::CommonView::CommonView(const Glib::RefPtr<Gsv::Language> &language) : Gsv::View() {
set_tab_width(4); // Visual size of a \t hardcoded to be equal to visual size of 4 spaces
@ -369,13 +375,6 @@ Source::BaseView::BaseView(const boost::filesystem::path &file_path, const Glib:
}
set_tab_char_and_size(tab_char, tab_size);
#ifdef __APPLE__
primary_modifier_mask = GDK_MOD2_MASK;
#else
primary_modifier_mask = GDK_CONTROL_MASK;
#endif
set_snippets();
snippet_parameter_tag = get_buffer()->create_tag();

6
src/source_base.hpp

@ -50,6 +50,9 @@ namespace Source {
bool keep_clipboard = false;
/// Apple key for MacOS, and control key otherwise
static GdkModifierType primary_modifier_mask;
bool on_key_press_event(GdkEventKey *event) override;
bool on_motion_notify_event(GdkEventMotion *motion_event) override;
@ -146,9 +149,6 @@ namespace Source {
std::string tab;
std::pair<char, unsigned> find_tab_char_and_size();
/// Apple key for MacOS, and control key otherwise
GdkModifierType primary_modifier_mask;
/// Move iter to line start. Depending on iter position, before or after indentation.
/// Works with wrapped lines.
Gtk::TextIter get_smart_home_iter(const Gtk::TextIter &iter);

3
src/terminal.cpp

@ -624,7 +624,8 @@ bool Terminal::on_key_press_event(GdkEventKey *event) {
if(event->keyval == GDK_KEY_Home || event->keyval == GDK_KEY_End ||
event->keyval == GDK_KEY_Page_Up || event->keyval == GDK_KEY_Page_Down ||
event->keyval == GDK_KEY_Up || event->keyval == GDK_KEY_Down ||
event->keyval == GDK_KEY_Left || event->keyval == GDK_KEY_Right)
event->keyval == GDK_KEY_Left || event->keyval == GDK_KEY_Right ||
((event->state & primary_modifier_mask) && event->keyval == GDK_KEY_a))
return Source::CommonView::on_key_press_event(event);
LockGuard lock(processes_mutex);

58
src/window.cpp

@ -754,6 +754,64 @@ void Window::set_menu_actions() {
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", []() {
if(auto view = Notebook::get().get_current_view()) {
view->remove_spellcheck_errors();

Loading…
Cancel
Save