[gnome-builder] editor: move forward/back word at a time with <Alt>w and <Alt>b



commit 5dc2978bdecb8bb448992854c8e7b4c45ebe9d03
Author: Christian Hergert <christian hergert me>
Date:   Thu Sep 25 17:00:04 2014 -0700

    editor: move forward/back word at a time with <Alt>w and <Alt>b
    
    This relies ultimately on pango for word breaks. We might want something
    more fine grained for C/JS/Python/etc at some point.

 src/editor/gb-editor-commands.c       |   59 +++++++++++++++++++++++++++++++++
 src/resources/keybindings/default.ini |    2 +
 2 files changed, 61 insertions(+), 0 deletions(-)
---
diff --git a/src/editor/gb-editor-commands.c b/src/editor/gb-editor-commands.c
index e71df5d..15df339 100644
--- a/src/editor/gb-editor-commands.c
+++ b/src/editor/gb-editor-commands.c
@@ -917,6 +917,36 @@ gb_editor_commands_scroll_up (GbEditorWorkspace *workspace,
 }
 
 static void
+gb_editor_commands_move_forward_word (GbEditorWorkspace *workspace,
+                                      GbEditorTab       *tab)
+{
+  GtkTextBuffer *buffer;
+  GtkTextIter iter;
+  GtkTextMark *insert;
+
+  g_return_if_fail (GB_IS_EDITOR_WORKSPACE (workspace));
+  g_return_if_fail (GB_IS_EDITOR_TAB (tab));
+
+  buffer = GTK_TEXT_BUFFER (tab->priv->document);
+  insert = gtk_text_buffer_get_insert (buffer);
+  gtk_text_buffer_get_iter_at_mark (buffer, &iter, insert);
+
+  if (!g_unichar_isspace (gtk_text_iter_get_char (&iter)) &&
+      !gtk_text_iter_ends_word (&iter))
+    if (!gtk_text_iter_forward_word_end (&iter))
+      return;
+
+  if (!gtk_text_iter_forward_word_end (&iter) ||
+      !gtk_text_iter_backward_word_start (&iter))
+    gtk_text_buffer_get_end_iter (buffer, &iter);
+
+  gtk_text_buffer_select_range (buffer, &iter, &iter);
+
+  gtk_text_view_scroll_mark_onscreen (GTK_TEXT_VIEW (tab->priv->source_view),
+                                    insert);
+}
+
+static void
 gb_editor_commands_move_forward (GbEditorWorkspace *workspace,
                                  GbEditorTab       *tab)
 {
@@ -933,6 +963,33 @@ gb_editor_commands_move_forward (GbEditorWorkspace *workspace,
 
   if (!gtk_text_iter_ends_line (&iter) && gtk_text_iter_forward_char (&iter))
     gtk_text_buffer_select_range (buffer, &iter, &iter);
+
+  gtk_text_view_scroll_mark_onscreen (GTK_TEXT_VIEW (tab->priv->source_view),
+                                      insert);
+}
+
+static void
+gb_editor_commands_move_backward_word (GbEditorWorkspace *workspace,
+                                       GbEditorTab       *tab)
+{
+  GtkTextBuffer *buffer;
+  GtkTextIter iter;
+  GtkTextMark *insert;
+
+  g_return_if_fail (GB_IS_EDITOR_WORKSPACE (workspace));
+  g_return_if_fail (GB_IS_EDITOR_TAB (tab));
+
+  buffer = GTK_TEXT_BUFFER (tab->priv->document);
+  insert = gtk_text_buffer_get_insert (buffer);
+  gtk_text_buffer_get_iter_at_mark (buffer, &iter, insert);
+
+  if (!gtk_text_iter_backward_word_start (&iter))
+    gtk_text_buffer_get_start_iter (buffer, &iter);
+
+  gtk_text_buffer_select_range (buffer, &iter, &iter);
+
+  gtk_text_view_scroll_mark_onscreen (GTK_TEXT_VIEW (tab->priv->source_view),
+                                      insert);
 }
 
 static void
@@ -1114,6 +1171,8 @@ gb_editor_commands_init (GbEditorWorkspace *workspace)
     { "scroll-up",           gb_editor_commands_scroll_up,           TRUE },
     { "move-forward",        gb_editor_commands_move_forward,        TRUE },
     { "move-backward",       gb_editor_commands_move_backward,       TRUE },
+    { "move-forward-word",   gb_editor_commands_move_forward_word,   TRUE },
+    { "move-backward-word",  gb_editor_commands_move_backward_word,  TRUE },
     { "move-up",             gb_editor_commands_move_up,             TRUE },
     { "move-down",           gb_editor_commands_move_down,           TRUE },
     { NULL }
diff --git a/src/resources/keybindings/default.ini b/src/resources/keybindings/default.ini
index 8e1466b..822f8a8 100644
--- a/src/resources/keybindings/default.ini
+++ b/src/resources/keybindings/default.ini
@@ -29,3 +29,5 @@ move-up = <Alt>K
 move-down = <Alt>J
 move-forward = <Alt>L
 move-backward = <Alt>H
+move-forward-word = <Alt>W
+move-backward-word = <Alt>B


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]