[gtksourceview/wip/chergert/vim] improve some odd paragraph text-object cases



commit 83bb5915f165fac5eba5b5f053f82783144b0fa6
Author: Christian Hergert <chergert redhat com>
Date:   Fri Nov 5 15:18:12 2021 -0700

    improve some odd paragraph text-object cases

 gtksourceview/vim/gtk-source-vim-text-object.c | 11 +++++++++++
 testsuite/test-vim-text-object.c               |  8 +++++---
 2 files changed, 16 insertions(+), 3 deletions(-)
---
diff --git a/gtksourceview/vim/gtk-source-vim-text-object.c b/gtksourceview/vim/gtk-source-vim-text-object.c
index 1ccb6093..1f1aaf39 100644
--- a/gtksourceview/vim/gtk-source-vim-text-object.c
+++ b/gtksourceview/vim/gtk-source-vim-text-object.c
@@ -360,6 +360,17 @@ text_object_extend_paragraph (const GtkTextIter *origin,
                *a_end = next;
        }
 
+       /* If we didn't actually advance, then we failed to find
+        * a paragraph and we should fail the extension to match
+        * what VIM does. (Test with `cap` at position 0 w/ "\n\n").
+        */
+       if (mode == TEXT_OBJECT_A &&
+           started_on_empty &&
+           gtk_text_iter_equal (a_end, inner_end))
+       {
+               return FALSE;
+       }
+
        return TRUE;
 }
 
diff --git a/testsuite/test-vim-text-object.c b/testsuite/test-vim-text-object.c
index 17d55539..0196434d 100644
--- a/testsuite/test-vim-text-object.c
+++ b/testsuite/test-vim-text-object.c
@@ -204,12 +204,14 @@ test_paragraph (void)
        run_test (gtk_source_vim_text_object_new_inner_paragraph (), "\tword;\n\n\tanother;\n\n\tthird;\n", 
9, "\tanother;");
        run_test (gtk_source_vim_text_object_new_inner_paragraph (), "\tword;\n\n\tanother;\n", 7, "");
        run_test (gtk_source_vim_text_object_new_inner_paragraph (), "\t1\n\n\t2\n\n\t3", 8, "");
+       run_test (gtk_source_vim_text_object_new_inner_paragraph (), "\n", 0, "\n");
 
        run_test (gtk_source_vim_text_object_new_a_paragraph (), "testing this.\n\n\n", 0, "testing 
this.\n\n\n");
        run_test (gtk_source_vim_text_object_new_a_paragraph (), "testing this.\n", 5, "testing this.\n");
-       run_test (gtk_source_vim_text_object_new_a_paragraph (), "\n\n", 0, "\n\n");
-       run_test (gtk_source_vim_text_object_new_a_paragraph (), "\n\n", 1, "\n\n");
-       run_test (gtk_source_vim_text_object_new_a_paragraph (), "\n\n\n", 1, "\n\n\n");
+       run_test (gtk_source_vim_text_object_new_a_paragraph (), "\n", 0, NULL);
+       run_test (gtk_source_vim_text_object_new_a_paragraph (), "\n\n", 0, NULL);
+       run_test (gtk_source_vim_text_object_new_a_paragraph (), "\n\n", 1, NULL);
+       run_test (gtk_source_vim_text_object_new_a_paragraph (), "\n\n\n", 1, NULL);
        run_test (gtk_source_vim_text_object_new_a_paragraph (), "what\nwill\n we\n\nfind\nhere.", 1, 
"what\nwill\n we\n");
        run_test (gtk_source_vim_text_object_new_a_paragraph (), "\tword;\n\n\tanother;\n\n\tthird;\n", 9, 
"\tanother;\n");
        run_test (gtk_source_vim_text_object_new_a_paragraph (), "\tword;\n\n\tanother;\n", 7, 
"\n\tanother;");


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