diff options
author | Lars Kotthoff <larsko@uwyo.edu> | 2018-10-29 21:10:09 -0600 |
---|---|---|
committer | Gaute Hope <eg@gaute.vetsj.com> | 2018-11-06 18:55:53 +0100 |
commit | e62715e4af2c94b6129f50138b63e46a751465ac (patch) | |
tree | 601103a500ab132ca2d57092747aeea3c6029c0d /src | |
parent | 27b188786a60e5e388645408a2e1cb1d83e42e6c (diff) |
tagbar editing modes (by tag, by char), switch with Ctrl, config option for default
Diffstat (limited to 'src')
-rw-r--r-- | src/command_bar.cc | 87 | ||||
-rw-r--r-- | src/command_bar.hh | 7 | ||||
-rw-r--r-- | src/config.cc | 2 |
3 files changed, 78 insertions, 18 deletions
diff --git a/src/command_bar.cc b/src/command_bar.cc index eb39474..8f494ec 100644 --- a/src/command_bar.cc +++ b/src/command_bar.cc @@ -126,22 +126,27 @@ namespace Astroid { std::function<void(ustring)> f) { mode = m; + ustring edit_mode_str = astroid->config ().get<string> ("general.tagbar_move"); + if (edit_mode_str == "tag") { + edit_mode = EditMode::Tags; + } else { + edit_mode = EditMode::Chars; + } + reset_bar (); + setup_bar_labels (); + switch (mode) { case CommandMode::AttachMids: { - entry.set_icon_from_icon_name ("mail-attachment-symbolic"); start_generic (cmd); } break; case CommandMode::Search: { - mode_label.set_text (""); - entry.set_icon_from_icon_name ("edit-find-symbolic"); - start_searching (cmd); } break; @@ -149,37 +154,75 @@ namespace Astroid { case CommandMode::Filter: case CommandMode::SearchText: { - mode_label.set_text ("Find text"); - entry.set_icon_from_icon_name ("edit-find-symbolic"); - start_text_searching (cmd); } break; case CommandMode::Tag: { - mode_label.set_text ("Change tags"); - entry.set_icon_from_icon_name ("system-run-symbolic"); - start_tagging (cmd); } break; case CommandMode::DiffTag: { - mode_label.set_text ("Change tags (+/-)"); - entry.set_icon_from_icon_name ("system-run-symbolic"); - start_difftagging (cmd); } break; } - callback = f; entry.set_position (-1); set_search_mode (true); } + void CommandBar::setup_bar_labels () { + switch (mode) { + + case CommandMode::AttachMids: + { + entry.set_icon_from_icon_name ("mail-attachment-symbolic"); + } + break; + + case CommandMode::Search: + { + mode_label.set_text (""); + entry.set_icon_from_icon_name ("edit-find-symbolic"); + } + break; + + case CommandMode::Filter: + case CommandMode::SearchText: + { + mode_label.set_text ("Find text"); + entry.set_icon_from_icon_name ("edit-find-symbolic"); + } + break; + + case CommandMode::Tag: + { + if (edit_mode == EditMode::Tags) { + mode_label.set_text ("Change tags [move by tag]"); + } else { + mode_label.set_text ("Change tags"); + } + entry.set_icon_from_icon_name ("system-run-symbolic"); + } + break; + + case CommandMode::DiffTag: + { + if (edit_mode == EditMode::Tags) { + mode_label.set_text ("Change tags (+/-) [move by tag]"); + } else { + mode_label.set_text ("Change tags (+/-)"); + } + entry.set_icon_from_icon_name ("system-run-symbolic"); + } + break; + } + } + void CommandBar::reset_bar () { entry.set_completion (refptr<Gtk::EntryCompletion>()); } @@ -241,6 +284,14 @@ namespace Astroid { LOG (debug) << "cb: got key: " << event->keyval; switch (event->keyval) { + case GDK_KEY_Control_L: + case GDK_KEY_Control_R: + { + edit_mode = edit_mode == EditMode::Tags ? EditMode::Chars : EditMode::Tags; + setup_bar_labels (); + return true; + } + case GDK_KEY_Tab: { /* grab the next completion */ @@ -255,7 +306,7 @@ namespace Astroid { case GDK_KEY_Left: { - if (mode == CommandMode::Tag || mode == CommandMode::DiffTag) { + if (edit_mode == EditMode::Tags && (mode == CommandMode::Tag || mode == CommandMode::DiffTag)) { ustring txt = entry.get_text (); ustring_sz pos = entry.get_position (); // normal behavior if we're not in between tags @@ -272,7 +323,7 @@ namespace Astroid { case GDK_KEY_BackSpace: { - if (mode == CommandMode::Tag || mode == CommandMode::DiffTag) { + if (edit_mode == EditMode::Tags && (mode == CommandMode::Tag || mode == CommandMode::DiffTag)) { ustring txt = entry.get_text (); ustring_sz end = entry.get_position (); // normal behavior if we're not in between tags @@ -294,7 +345,7 @@ namespace Astroid { case GDK_KEY_Right: { - if (mode == CommandMode::Tag || mode == CommandMode::DiffTag) { + if (edit_mode == EditMode::Tags && (mode == CommandMode::Tag || mode == CommandMode::DiffTag)) { ustring txt = entry.get_text (); ustring_sz pos = entry.get_position (); // normal behavior if we're not in between tags @@ -309,7 +360,7 @@ namespace Astroid { case GDK_KEY_Delete: { - if (mode == CommandMode::Tag || mode == CommandMode::DiffTag) { + if (edit_mode == EditMode::Tags && (mode == CommandMode::Tag || mode == CommandMode::DiffTag)) { ustring txt = entry.get_text (); ustring_sz start = entry.get_position (); // normal behavior if we're not in between tags diff --git a/src/command_bar.hh b/src/command_bar.hh index a49ecdc..dc249e2 100644 --- a/src/command_bar.hh +++ b/src/command_bar.hh @@ -37,6 +37,12 @@ namespace Astroid { Gtk::Label mode_label; Gtk::SearchEntry entry; + enum EditMode { + Tags, + Chars + }; + EditMode edit_mode; + void set_main_window (MainWindow *); void on_entry_activated (); @@ -57,6 +63,7 @@ namespace Astroid { private: void reset_bar (); + void setup_bar_labels (); class GenericCompletion : public Gtk::EntryCompletion { public: diff --git a/src/config.cc b/src/config.cc index 63a7073..f448ce9 100644 --- a/src/config.cc +++ b/src/config.cc @@ -189,6 +189,8 @@ namespace Astroid { default_config.put ("general.time.same_year", "%b %-e"); default_config.put ("general.time.diff_year", "%x"); + default_config.put ("general.tagbar_move", "tag"); + /* thread index cell theme */ default_config.put ("thread_index.cell.font_description", "default"); default_config.put ("thread_index.cell.line_spacing", 2); |