[gnome-builder] vim: ze zs in normal mode



commit c9a9873951fe40dee66a01b4f13aa69a0197d5a8
Author: Sebastien Lafargue <slafargue gnome org>
Date:   Thu Nov 19 21:21:14 2015 +0100

    vim: ze zs in normal mode

 data/keybindings/vim.css           |    3 ++
 libide/ide-source-view-movements.c |   46 ++++++++++++++++++++++++++++++++++++
 libide/ide-source-view.h           |    4 +++
 3 files changed, 53 insertions(+), 0 deletions(-)
---
diff --git a/data/keybindings/vim.css b/data/keybindings/vim.css
index c0b547e..6285575 100644
--- a/data/keybindings/vim.css
+++ b/data/keybindings/vim.css
@@ -1261,6 +1261,9 @@
 
   bind "<shift>h" { "movement" (half-page-right, 0, 0, 1)
                     "clear-count" () };
+
+  bind "s" { "movement" (scroll-screen-left, 0, 0, 1) };
+  bind "e" { "movement" (scroll-screen-right, 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 0d3c0b9..3b3a642 100644
--- a/libide/ide-source-view-movements.c
+++ b/libide/ide-source-view-movements.c
@@ -1551,6 +1551,47 @@ loop:
 }
 
 static void
+ide_source_view_movements_scroll_to_horizontal_bounds (Movement *mv)
+{
+  GtkTextView *text_view = (GtkTextView *)mv->self;
+  GtkTextMark *insert;
+  GtkTextBuffer *buffer;
+  GtkAdjustment *hadj;
+  GtkTextIter insert_iter;
+  GdkRectangle screen_rect;
+  GdkRectangle insert_rect;
+  gdouble value;
+  gdouble offset = 0.0;
+
+  buffer = gtk_text_view_get_buffer (text_view);
+  insert = gtk_text_buffer_get_insert (buffer);
+  hadj = gtk_scrollable_get_hadjustment (GTK_SCROLLABLE (mv->self));
+
+  ide_source_view_get_visible_rect (mv->self, &screen_rect);
+  gtk_text_buffer_get_iter_at_mark (buffer, &insert_iter, insert);
+  gtk_text_view_get_iter_location (text_view, &insert_iter, &insert_rect);
+  value = gtk_adjustment_get_value (hadj);
+
+  switch ((int)mv->type)
+    {
+    case IDE_SOURCE_VIEW_MOVEMENT_SCROLL_SCREEN_LEFT:
+      offset = screen_rect.x - insert_rect.x;
+      break;
+
+    case IDE_SOURCE_VIEW_MOVEMENT_SCROLL_SCREEN_RIGHT:
+      offset = _ide_cairo_rectangle_x2 (&screen_rect) - _ide_cairo_rectangle_x2 (&insert_rect);
+      break;
+
+    default:
+      break;
+    }
+
+  gtk_adjustment_set_value (hadj, value - offset);
+
+  mv->ignore_scroll_to_insert = TRUE;
+}
+
+static void
 ide_source_view_movements_scroll_center (Movement *mv)
 {
   GtkTextView *text_view = (GtkTextView *)mv->self;
@@ -2317,6 +2358,11 @@ _ide_source_view_apply_movement (IdeSourceView         *self,
       ide_source_view_movements_scroll_center (&mv);
       break;
 
+    case IDE_SOURCE_VIEW_MOVEMENT_SCROLL_SCREEN_LEFT:
+    case IDE_SOURCE_VIEW_MOVEMENT_SCROLL_SCREEN_RIGHT:
+      ide_source_view_movements_scroll_to_horizontal_bounds (&mv);
+      break;
+
     case IDE_SOURCE_VIEW_MOVEMENT_PREVIOUS_UNMATCHED_BRACE:
       for (i = MAX (1, mv.count); i > 0; i--)
         ide_source_view_movements_previous_unmatched (&mv, '{', '}');
diff --git a/libide/ide-source-view.h b/libide/ide-source-view.h
index a60bb8e..2a9e900 100644
--- a/libide/ide-source-view.h
+++ b/libide/ide-source-view.h
@@ -122,6 +122,8 @@ typedef enum
  * @IDE_SOURCE_VIEW_MOVEMENT_SCROLL_SCREEN_TOP: scroll until insert cursor or [count]th line is at screen 
top.
  * @IDE_SOURCE_VIEW_MOVEMENT_SCROLL_SCREEN_CENTER: scroll until insert cursor or [count]th line is at screen 
center.
  * @IDE_SOURCE_VIEW_MOVEMENT_SCROLL_SCREEN_BOTTOM: scroll until insert cursor or [count]th line is at screen 
bottom.
+ * @IDE_SOURCE_VIEW_MOVEMENT_SCROLL_SCREEN_LEFT: scroll until insert cursor or [count]th char is at screen 
left.
+ * @IDE_SOURCE_VIEW_MOVEMENT_SCROLL_SCREEN_RIGHT: scroll until insert cursor or [count]th char is at screen 
right.
  * @IDE_SOURCE_VIEW_MOVEMENT_NEXT_MATCH_SEARCH_CHAR: move to the next matching char according to f and t in 
vim.
  * @IDE_SOURCE_VIEW_MOVEMENT_PREVIOUS_MATCH_SEARCH_CHAR: move to the previous matching char according to F 
and T in vim.
  *
@@ -193,6 +195,8 @@ typedef enum
   IDE_SOURCE_VIEW_MOVEMENT_SCROLL_SCREEN_TOP,
   IDE_SOURCE_VIEW_MOVEMENT_SCROLL_SCREEN_CENTER,
   IDE_SOURCE_VIEW_MOVEMENT_SCROLL_SCREEN_BOTTOM,
+  IDE_SOURCE_VIEW_MOVEMENT_SCROLL_SCREEN_LEFT,
+  IDE_SOURCE_VIEW_MOVEMENT_SCROLL_SCREEN_RIGHT,
 
   IDE_SOURCE_VIEW_MOVEMENT_PREVIOUS_UNMATCHED_BRACE,
   IDE_SOURCE_VIEW_MOVEMENT_NEXT_UNMATCHED_BRACE,


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