[gnome-builder] editor: move forward/back word at a time with <Alt>w and <Alt>b
- From: Christian Hergert <chergert src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-builder] editor: move forward/back word at a time with <Alt>w and <Alt>b
- Date: Fri, 26 Sep 2014 00:00:17 +0000 (UTC)
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]