[gtksourceview/wip/chergert/vim] make 2cip work by propagating count to text-object



commit 85ca58a858439e16e93a540591ed35022a24d3f9
Author: Christian Hergert <chergert redhat com>
Date:   Sat Nov 6 10:12:25 2021 -0700

    make 2cip work by propagating count to text-object
    
    extend text objects but only for forward_end()

 gtksourceview/vim/gtk-source-vim-normal.c      |  5 +++++
 gtksourceview/vim/gtk-source-vim-text-object.c | 10 ++++++++++
 testsuite/test-vim-text-object.c               |  9 ++++++++-
 3 files changed, 23 insertions(+), 1 deletion(-)
---
diff --git a/gtksourceview/vim/gtk-source-vim-normal.c b/gtksourceview/vim/gtk-source-vim-normal.c
index 9a9fc121..7a70dddb 100644
--- a/gtksourceview/vim/gtk-source-vim-normal.c
+++ b/gtksourceview/vim/gtk-source-vim-normal.c
@@ -765,9 +765,14 @@ key_handler_c_with_modifier (GtkSourceVimNormal *self,
 
        if (text_object != NULL)
        {
+               int count;
+
+               count = self->count, self->count = 0;
+               gtk_source_vim_state_set_count (text_object, count);
                gtk_source_vim_normal_begin_insert_text_object (self, text_object);
                gtk_source_vim_normal_clear (self);
                g_object_unref (text_object);
+
                return TRUE;
        }
 
diff --git a/gtksourceview/vim/gtk-source-vim-text-object.c b/gtksourceview/vim/gtk-source-vim-text-object.c
index 1f1aaf39..590dd138 100644
--- a/gtksourceview/vim/gtk-source-vim-text-object.c
+++ b/gtksourceview/vim/gtk-source-vim-text-object.c
@@ -199,6 +199,8 @@ gtk_source_vim_iter__backward_paragraph_start (GtkTextIter *iter)
 static gboolean
 gtk_source_vim_iter__forward_paragraph_end (GtkTextIter *iter)
 {
+       gtk_text_iter_forward_char (iter);
+
        while (!is_empty_line (iter))
        {
                if (gtk_text_iter_is_end (iter))
@@ -493,6 +495,7 @@ gtk_source_vim_text_object_select (GtkSourceVimTextObject *self,
        GtkTextIter inner_end;
        GtkTextIter a_begin;
        GtkTextIter a_end;
+       int count;
 
        g_return_val_if_fail (GTK_SOURCE_IS_VIM_TEXT_OBJECT (self), FALSE);
        g_return_val_if_fail (begin != NULL, FALSE);
@@ -510,6 +513,13 @@ gtk_source_vim_text_object_select (GtkSourceVimTextObject *self,
        if (!self->starts (&inner_begin) && !self->backward_start (&inner_begin))
                return FALSE;
 
+       count = gtk_source_vim_state_get_count (GTK_SOURCE_VIM_STATE (self));
+       for (int i = 1; i < count; i++)
+       {
+               if (!self->forward_end (&inner_end))
+                       return FALSE;
+       }
+
        a_begin = inner_begin;
        a_end = inner_end;
 
diff --git a/testsuite/test-vim-text-object.c b/testsuite/test-vim-text-object.c
index 7dc0329f..bb54c626 100644
--- a/testsuite/test-vim-text-object.c
+++ b/testsuite/test-vim-text-object.c
@@ -77,7 +77,8 @@ run_test (GtkSourceVimState *text_object,
 
 cleanup:
        g_clear_object (&buffer);
-       g_clear_object (&text_object);
+
+       g_assert_finalize_object (text_object);
 }
 
 static void
@@ -195,6 +196,8 @@ test_sentence (void)
 static void
 test_paragraph (void)
 {
+       GtkSourceVimState *temp;
+
        run_test (gtk_source_vim_text_object_new_inner_paragraph (), "testing this.\n\n\n", 0, "testing 
this.");
        run_test (gtk_source_vim_text_object_new_inner_paragraph (), "testing this.\n", 5, "testing this.");
        run_test (gtk_source_vim_text_object_new_inner_paragraph (), "\n\n", 0, "\n\n");
@@ -218,6 +221,10 @@ test_paragraph (void)
        run_test (gtk_source_vim_text_object_new_a_paragraph (), "\tword;\n\n\tanother;\n", 7, 
"\n\tanother;");
        run_test (gtk_source_vim_text_object_new_a_paragraph (), "\t1\n\n\t2\n\n\t3\n", 7, "\n\t3");
        run_test (gtk_source_vim_text_object_new_a_paragraph (), "\t1\n\n\t2\n\n\t3\n", 8, "\t3\n");
+
+       temp = gtk_source_vim_text_object_new_inner_paragraph ();
+       gtk_source_vim_state_set_count (temp, 2);
+       run_test (temp, "t\n\nt", 0, "t\n");
 }
 
 int


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