[gtksourceview/wip/chergert/vim] make 2cip work by propagating count to text-object
- From: Christian Hergert <chergert src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gtksourceview/wip/chergert/vim] make 2cip work by propagating count to text-object
- Date: Sat, 6 Nov 2021 17:12:48 +0000 (UTC)
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]