[gnome-builder] vim: allow [count] version for z motions



commit 0f378722e7fa353133232fe0d61b489d232a07d4
Author: Sebastien Lafargue <slafargue gnome org>
Date:   Tue Nov 17 22:51:52 2015 +0100

    vim: allow [count] version for z motions

 data/keybindings/vim.css           |   14 +++++++-------
 libide/ide-source-view-movements.c |   21 +++++++++++++++++++++
 2 files changed, 28 insertions(+), 7 deletions(-)
---
diff --git a/data/keybindings/vim.css b/data/keybindings/vim.css
index a5675b9..d8733d5 100644
--- a/data/keybindings/vim.css
+++ b/data/keybindings/vim.css
@@ -1240,15 +1240,15 @@
 
 @binding-set builder-vim-source-view-normal-z
 {
-  bind "z" { "movement" (scroll-screen-center, 0, 0, 0) };
-  bind "period" { "movement" (scroll-screen-center, 0, 0, 0) };
+  bind "z" { "movement" (scroll-screen-center, 0, 0, 1) };
+  bind "period" { "movement" (scroll-screen-center, 0, 0, 1) };
 
-  bind "t" { "movement" (scroll-screen-top,    0, 0, 0) };
-  bind "Return" { "movement" (scroll-screen-top, 0, 0, 0) };
-  bind "KP_Enter" { "movement" (scroll-screen-top, 0, 0, 0) };
+  bind "t" { "movement" (scroll-screen-top,    0, 0, 1) };
+  bind "Return" { "movement" (scroll-screen-top, 0, 0, 1) };
+  bind "KP_Enter" { "movement" (scroll-screen-top, 0, 0, 1) };
 
-  bind "b" { "movement" (scroll-screen-bottom, 0, 0, 0) };
-  bind "minus" { "movement" (scroll-screen-bottom, 0, 0, 0) };
+  bind "b" { "movement" (scroll-screen-bottom, 0, 0, 1) };
+  bind "minus" { "movement" (scroll-screen-bottom, 0, 0, 1) };
 }
 
 @binding-set builder-vim-source-view-normal-Z
diff --git a/libide/ide-source-view-movements.c b/libide/ide-source-view-movements.c
index d080c7f..1f81e8e 100644
--- a/libide/ide-source-view-movements.c
+++ b/libide/ide-source-view-movements.c
@@ -1489,10 +1489,29 @@ ide_source_view_movements_scroll_center (Movement *mv)
   GtkTextView *text_view = (GtkTextView *)mv->self;
   GtkTextMark *insert;
   GtkTextBuffer *buffer;
+  gint line_count;
+  gint x_offset;
+  gint line_len;
 
   buffer = gtk_text_view_get_buffer (text_view);
   insert = gtk_text_buffer_get_insert (buffer);
 
+  if (mv->count > 0)
+    {
+      line_count = gtk_text_buffer_get_line_count (buffer);
+      if (mv->count > line_count)
+        return;
+
+      x_offset = gtk_text_iter_get_line_offset (&mv->insert);
+
+      gtk_text_iter_set_line (&mv->insert, mv->count - 1);
+      line_len = gtk_text_iter_get_chars_in_line (&mv->insert);
+      x_offset = MIN (x_offset, line_len -1);
+      gtk_text_iter_set_line_offset (&mv->insert, x_offset);
+
+      gtk_text_buffer_move_mark (buffer, insert, &mv->insert);
+    }
+
   switch ((int)mv->type)
     {
     case IDE_SOURCE_VIEW_MOVEMENT_SCROLL_SCREEN_BOTTOM:
@@ -1510,6 +1529,8 @@ ide_source_view_movements_scroll_center (Movement *mv)
     default:
       break;
     }
+
+  mv->ignore_scroll_to_insert = TRUE;
 }
 
 static void


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