[gtksourceview] vim: implement o in visual mode



commit 436376958342bb3d8fbb7a882c63a4c0c96e458a
Author: Christian Hergert <chergert redhat com>
Date:   Sat Nov 27 17:05:15 2021 -0600

    vim: implement o in visual mode

 gtksourceview/vim/gtksourcevimvisual.c | 22 ++++++++++++++++++++++
 testsuite/test-vim-input.c             |  7 +++++++
 2 files changed, 29 insertions(+)
---
diff --git a/gtksourceview/vim/gtksourcevimvisual.c b/gtksourceview/vim/gtksourcevimvisual.c
index f0595562..e27fea4a 100644
--- a/gtksourceview/vim/gtksourcevimvisual.c
+++ b/gtksourceview/vim/gtksourcevimvisual.c
@@ -460,6 +460,23 @@ gtk_source_vim_visual_replace (GtkSourceVimVisual *self)
        return TRUE;
 }
 
+static void
+gtk_source_vim_visual_swap_cursor (GtkSourceVimVisual *self)
+{
+       GtkTextBuffer *buffer;
+       GtkTextIter cursor, started_at;
+
+       g_assert (GTK_SOURCE_IS_VIM_VISUAL (self));
+
+       gtk_source_vim_visual_get_bounds (self, &cursor, &started_at);
+
+       buffer = gtk_text_iter_get_buffer (&cursor);
+       gtk_text_buffer_move_mark (buffer, self->cursor, &started_at);
+       gtk_text_buffer_move_mark (buffer, self->started_at, &cursor);
+
+       gtk_source_vim_visual_track_motion (self);
+}
+
 static gboolean
 key_handler_g (GtkSourceVimVisual *self,
               guint               keyval,
@@ -618,6 +635,11 @@ key_handler_initial (GtkSourceVimVisual *self,
                        return TRUE;
                }
 
+               case GDK_KEY_o:
+                       gtk_source_vim_visual_swap_cursor (self);
+                       gtk_source_vim_visual_clear (self);
+                       return TRUE;
+
                default:
                        break;
        }
diff --git a/testsuite/test-vim-input.c b/testsuite/test-vim-input.c
index ceaddfa1..0bae218c 100644
--- a/testsuite/test-vim-input.c
+++ b/testsuite/test-vim-input.c
@@ -220,6 +220,12 @@ test_command_bar (void)
        run_test ("", ":set ts=33\n", "");
 }
 
+static void
+test_visual (void)
+{
+       run_test ("0123456789", "3lvllohhx", "06789");
+}
+
 int
 main (int argc,
       char *argv[])
@@ -235,6 +241,7 @@ main (int argc,
        g_test_add_func ("/GtkSourceView/vim-input/delete", test_delete);
        g_test_add_func ("/GtkSourceView/vim-input/search-and-replace", test_search_and_replace);
        g_test_add_func ("/GtkSourceView/vim-input/command-bar", test_command_bar);
+       g_test_add_func ("/GtkSourceView/vim-input/visual", test_visual);
        ret = g_test_run ();
        gtk_source_finalize ();
        return ret;


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