summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorLars Kotthoff <larsko@uwyo.edu>2018-10-29 21:10:09 -0600
committerGaute Hope <eg@gaute.vetsj.com>2018-11-06 18:55:53 +0100
commite62715e4af2c94b6129f50138b63e46a751465ac (patch)
tree601103a500ab132ca2d57092747aeea3c6029c0d /src
parent27b188786a60e5e388645408a2e1cb1d83e42e6c (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.cc87
-rw-r--r--src/command_bar.hh7
-rw-r--r--src/config.cc2
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);