[gtksourceview/wip/chergert/vim] add page movements
- From: Christian Hergert <chergert src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gtksourceview/wip/chergert/vim] add page movements
- Date: Tue, 26 Oct 2021 05:43:36 +0000 (UTC)
commit 9292cf83373b4b300070998c6409a47f13cd4097
Author: Christian Hergert <chergert redhat com>
Date: Mon Oct 25 22:43:30 2021 -0700
add page movements
gtksourceview/vim/gtk-source-vim-normal.c | 12 ++++++++++++
gtksourceview/vim/gtk-source-vim-state.c | 30 +++++++++++++++++++++++-------
gtksourceview/vim/gtk-source-vim-state.h | 2 ++
3 files changed, 37 insertions(+), 7 deletions(-)
---
diff --git a/gtksourceview/vim/gtk-source-vim-normal.c b/gtksourceview/vim/gtk-source-vim-normal.c
index 567e298d..ebdd140a 100644
--- a/gtksourceview/vim/gtk-source-vim-normal.c
+++ b/gtksourceview/vim/gtk-source-vim-normal.c
@@ -185,6 +185,16 @@ key_handler_viewport (GtkSourceVimNormal *self,
gtk_source_vim_normal_clear (self);
return TRUE;
+ case GDK_KEY_f:
+ gtk_source_vim_state_scroll_page (state, MAX (1, self->repeat));
+ gtk_source_vim_normal_clear (self);
+ return TRUE;
+
+ case GDK_KEY_b:
+ gtk_source_vim_state_scroll_page (state, MIN (-1, -self->repeat));
+ gtk_source_vim_normal_clear (self);
+ return TRUE;
+
default:
break;
}
@@ -422,6 +432,8 @@ key_handler_initial (GtkSourceVimNormal *self,
case GDK_KEY_u:
case GDK_KEY_e:
case GDK_KEY_y:
+ case GDK_KEY_f:
+ case GDK_KEY_b:
self->handler = key_handler_viewport;
break;
diff --git a/gtksourceview/vim/gtk-source-vim-state.c b/gtksourceview/vim/gtk-source-vim-state.c
index f7d576f1..190df401 100644
--- a/gtksourceview/vim/gtk-source-vim-state.c
+++ b/gtksourceview/vim/gtk-source-vim-state.c
@@ -551,9 +551,10 @@ gtk_source_vim_state_scroll_line (GtkSourceVimState *self,
gtk_text_view_place_cursor_onscreen (GTK_TEXT_VIEW (view));
}
-void
-gtk_source_vim_state_scroll_half_page (GtkSourceVimState *self,
- int count)
+static void
+_gtk_source_vim_state_scroll_page (GtkSourceVimState *self,
+ int count,
+ int divisor)
{
GtkSourceView *view;
GdkRectangle rect, loc;
@@ -562,6 +563,7 @@ gtk_source_vim_state_scroll_half_page (GtkSourceVimState *self,
int visible_lines;
g_return_if_fail (GTK_SOURCE_IS_VIM_STATE (self));
+ g_return_if_fail (divisor > 0);
if (count == 0)
count = 1;
@@ -574,20 +576,20 @@ gtk_source_vim_state_scroll_half_page (GtkSourceVimState *self,
gtk_text_view_get_iter_at_location (GTK_TEXT_VIEW (view), &bottom, rect.x, rect.y + rect.height);
visible_lines = gtk_text_iter_get_line (&bottom) - gtk_text_iter_get_line (&top);
- if (visible_lines < 2)
- visible_lines = 2;
+ if (visible_lines < divisor)
+ visible_lines = divisor;
gtk_text_view_get_iter_location (GTK_TEXT_VIEW (view), &iter, &loc);
gtk_text_view_buffer_to_window_coords (GTK_TEXT_VIEW (view), GTK_TEXT_WINDOW_TEXT, loc.x, loc.y,
&loc.x, &loc.y);
if (count > 0)
{
- gtk_text_iter_forward_lines (&top, count * visible_lines);
+ gtk_text_iter_forward_lines (&top, count * visible_lines / divisor);
_gtk_source_view_jump_to_iter (GTK_TEXT_VIEW (view), &top, 0.0, TRUE, 1.0, 0.0);
}
else
{
- gtk_text_iter_backward_lines (&bottom, -count * visible_lines);
+ gtk_text_iter_backward_lines (&bottom, -count * visible_lines / divisor);
_gtk_source_view_jump_to_iter (GTK_TEXT_VIEW (view), &bottom, 0.0, TRUE, 1.0, 1.0);
}
@@ -595,3 +597,17 @@ gtk_source_vim_state_scroll_half_page (GtkSourceVimState *self,
gtk_text_view_get_iter_at_location (GTK_TEXT_VIEW (view), &iter, loc.x, loc.y);
gtk_source_vim_state_select (self, &iter, &iter);
}
+
+void
+gtk_source_vim_state_scroll_half_page (GtkSourceVimState *self,
+ int count)
+{
+ return _gtk_source_vim_state_scroll_page (self, count, 2);
+}
+
+void
+gtk_source_vim_state_scroll_page (GtkSourceVimState *self,
+ int count)
+{
+ return _gtk_source_vim_state_scroll_page (self, count, 1);
+}
diff --git a/gtksourceview/vim/gtk-source-vim-state.h b/gtksourceview/vim/gtk-source-vim-state.h
index 24b07e30..2a0578d4 100644
--- a/gtksourceview/vim/gtk-source-vim-state.h
+++ b/gtksourceview/vim/gtk-source-vim-state.h
@@ -77,6 +77,8 @@ gboolean gtk_source_vim_state_synthesize (GtkSourceVimState *se
void gtk_source_vim_state_repeat (GtkSourceVimState *self,
int repeat);
int gtk_source_vim_state_get_visible_lines (GtkSourceVimState *self);
+void gtk_source_vim_state_scroll_page (GtkSourceVimState *self,
+ int count);
void gtk_source_vim_state_scroll_half_page (GtkSourceVimState *self,
int count);
void gtk_source_vim_state_scroll_line (GtkSourceVimState *self,
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]