[gnome-builder] vim: ze zs in normal mode
- From: Sébastien Lafargue <slafargue src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-builder] vim: ze zs in normal mode
- Date: Thu, 19 Nov 2015 21:57:47 +0000 (UTC)
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]