[gnome-builder/wip/vim] vim: make move to start handle whitespace lines closer to VIM
- From: Christian Hergert <chergert src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-builder/wip/vim] vim: make move to start handle whitespace lines closer to VIM
- Date: Wed, 1 Oct 2014 22:50:28 +0000 (UTC)
commit cdba80cba8b0513eacb6d5d994228a7945c8ab1c
Author: Christian Hergert <christian hergert me>
Date: Wed Oct 1 15:50:18 2014 -0700
vim: make move to start handle whitespace lines closer to VIM
In pariticular, fallback to using the line0 position. Also, don't allow
us to move past the current cursor position.
src/editor/gb-editor-vim.c | 34 ++++++++++++++++++++++++----------
1 files changed, 24 insertions(+), 10 deletions(-)
---
diff --git a/src/editor/gb-editor-vim.c b/src/editor/gb-editor-vim.c
index 249812f..1c42ca8 100644
--- a/src/editor/gb-editor-vim.c
+++ b/src/editor/gb-editor-vim.c
@@ -292,7 +292,7 @@ gb_editor_vim_select_range (GbEditorVim *vim,
}
static void
-gb_editor_vim_move_line_start (GbEditorVim *vim)
+gb_editor_vim_move_line0 (GbEditorVim *vim)
{
GtkTextBuffer *buffer;
GtkTextIter iter;
@@ -304,13 +304,7 @@ gb_editor_vim_move_line_start (GbEditorVim *vim)
buffer = gtk_text_view_get_buffer (GTK_TEXT_VIEW (vim->priv->text_view));
has_selection = gb_editor_vim_get_selection_bounds (vim, &iter, &selection);
- gtk_text_buffer_get_iter_at_line (buffer, &iter,
- gtk_text_iter_get_line (&iter));
-
- while (!gtk_text_iter_ends_line (&iter) &&
- g_unichar_isspace (gtk_text_iter_get_char (&iter)))
- if (!gtk_text_iter_forward_char (&iter))
- break;
+ gtk_text_iter_set_line_offset (&iter, 0);
if (has_selection)
gb_editor_vim_select_range (vim, &iter, &selection);
@@ -321,19 +315,39 @@ gb_editor_vim_move_line_start (GbEditorVim *vim)
}
static void
-gb_editor_vim_move_line0 (GbEditorVim *vim)
+gb_editor_vim_move_line_start (GbEditorVim *vim)
{
GtkTextBuffer *buffer;
GtkTextIter iter;
+ GtkTextIter original;
GtkTextIter selection;
gboolean has_selection;
+ guint line;
g_assert (GB_IS_EDITOR_VIM (vim));
buffer = gtk_text_view_get_buffer (GTK_TEXT_VIEW (vim->priv->text_view));
has_selection = gb_editor_vim_get_selection_bounds (vim, &iter, &selection);
+ line = gtk_text_iter_get_line (&iter);
+ gtk_text_iter_assign (&original, &iter);
- gtk_text_iter_set_line_offset (&iter, 0);
+ gtk_text_buffer_get_iter_at_line (buffer, &iter, line);
+
+ while (!gtk_text_iter_ends_line (&iter) &&
+ g_unichar_isspace (gtk_text_iter_get_char (&iter)))
+ if (!gtk_text_iter_forward_char (&iter))
+ break;
+
+ /*
+ * If we failed to find a non-whitespace character or ended up at the
+ * same place we already were, just use the 0 index position.
+ */
+ if (g_unichar_isspace (gtk_text_iter_get_char (&iter)) ||
+ gtk_text_iter_equal (&iter, &original))
+ {
+ gb_editor_vim_move_line0 (vim);
+ return;
+ }
if (has_selection)
gb_editor_vim_select_range (vim, &iter, &selection);
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]