[gnome-builder] movements: add whole line page movements
- From: Christian Hergert <chergert src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-builder] movements: add whole line page movements
- Date: Sat, 7 May 2016 09:06:41 +0000 (UTC)
commit 65d0f845d9e16e0048a041593a9c1ec386a53897
Author: Christian Hergert <chergert redhat com>
Date: Sat May 7 12:04:27 2016 +0300
movements: add whole line page movements
When moving by ctrl+f/b or page-up/down with linewise mode, we would drift
from whole lines pretty quickly. This tries a bit harder to keep the line
selection as whole lines.
It could still use some work at the file edge boundaries, but this is
clearly better than where we were.
https://bugzilla.gnome.org/show_bug.cgi?id=766087
data/keybindings/vim.css | 8 +++---
libide/ide-source-view-movements.c | 42 ++++++++++++++++++++++++++++++++++++
libide/ide-source-view.h | 4 +++
3 files changed, 50 insertions(+), 4 deletions(-)
---
diff --git a/data/keybindings/vim.css b/data/keybindings/vim.css
index 7f711fb..2f48c13 100644
--- a/data/keybindings/vim.css
+++ b/data/keybindings/vim.css
@@ -2318,13 +2318,13 @@ bind "KP_Multiply" { "save-insert-mark" ()
bind "<ctrl>y" { "movement" (screen-down, 1, 0, 1) };
/* page movements */
- bind "<ctrl>b" { "movement" (page-up, 1, 0, 1)
+ bind "<ctrl>b" { "movement" (page-up-lines, 1, 0, 1)
"clear-count" () };
- bind "Page_Up" { "movement" (page-up, 1, 0, 1)
+ bind "Page_Up" { "movement" (page-up-lines, 1, 0, 1)
"clear-count" () };
- bind "<ctrl>f" { "movement" (page-down, 1, 0, 1)
+ bind "<ctrl>f" { "movement" (page-down-lines, 1, 0, 1)
"clear-count" () };
- bind "Page_Down" { "movement" (page-down, 1, 0, 1)
+ bind "Page_Down" { "movement" (page-down-lines, 1, 0, 1)
"clear-count" () };
bind "<ctrl>u" { "movement" (half-page-up, 1, 0, 1)
"clear-count" () };
diff --git a/libide/ide-source-view-movements.c b/libide/ide-source-view-movements.c
index 48cf6ca..96b37bb 100644
--- a/libide/ide-source-view-movements.c
+++ b/libide/ide-source-view-movements.c
@@ -859,6 +859,46 @@ ide_source_view_movements_move_page (Movement *mv)
mv->ignore_scroll_to_insert = TRUE;
break;
+ case IDE_SOURCE_VIEW_MOVEMENT_PAGE_UP_LINES:
+ gtk_text_buffer_get_iter_at_line (buffer, &mv->insert, MAX (0, line_top - scrolloff));
+ if (!gtk_text_iter_ends_line (&mv->insert))
+ {
+ if (gtk_text_iter_compare (&mv->insert, &mv->selection) < 0)
+ gtk_text_iter_forward_line (&mv->insert);
+ else
+ gtk_text_iter_set_line_offset (&mv->insert, 0);
+ }
+ ide_source_view_movements_select_range (mv);
+
+ mark = _ide_source_view_get_scroll_mark (mv->self);
+ gtk_text_buffer_get_iter_at_line (buffer, &scroll_iter, line_top);
+ gtk_text_buffer_move_mark (buffer, mark, &scroll_iter);
+ gtk_text_view_scroll_to_mark (text_view, mark, 0.0, TRUE, 1.0, 1.0);
+
+ mv->ignore_select = TRUE;
+ mv->ignore_scroll_to_insert = TRUE;
+ break;
+
+ case IDE_SOURCE_VIEW_MOVEMENT_PAGE_DOWN_LINES:
+ gtk_text_buffer_get_iter_at_line (buffer, &mv->insert, line_bottom + scrolloff);
+ if (!gtk_text_iter_ends_line (&mv->insert))
+ {
+ if (gtk_text_iter_compare (&mv->insert, &mv->selection) < 0)
+ gtk_text_iter_set_line_offset (&mv->insert, 0);
+ else
+ gtk_text_iter_forward_line (&mv->insert);
+ }
+ ide_source_view_movements_select_range (mv);
+
+ mark = _ide_source_view_get_scroll_mark (mv->self);
+ gtk_text_buffer_get_iter_at_line (buffer, &scroll_iter, line_bottom);
+ gtk_text_buffer_move_mark (buffer, mark, &scroll_iter);
+ gtk_text_view_scroll_to_mark (text_view, mark, 0.0, TRUE, 1.0, 0.0);
+
+ mv->ignore_select = TRUE;
+ mv->ignore_scroll_to_insert = TRUE;
+ break;
+
case IDE_SOURCE_VIEW_MOVEMENT_PAGE_DOWN:
gtk_text_buffer_get_iter_at_line (buffer, &mv->insert, line_bottom + scrolloff);
text_iter_forward_to_nonspace_captive (&mv->insert);
@@ -2134,7 +2174,9 @@ _ide_source_view_apply_movement (IdeSourceView *self,
case IDE_SOURCE_VIEW_MOVEMENT_HALF_PAGE_LEFT:
case IDE_SOURCE_VIEW_MOVEMENT_HALF_PAGE_RIGHT:
case IDE_SOURCE_VIEW_MOVEMENT_PAGE_UP:
+ case IDE_SOURCE_VIEW_MOVEMENT_PAGE_UP_LINES:
case IDE_SOURCE_VIEW_MOVEMENT_PAGE_DOWN:
+ case IDE_SOURCE_VIEW_MOVEMENT_PAGE_DOWN_LINES:
for (i = MAX (1, mv.count); i > 0; i--)
ide_source_view_movements_move_page (&mv);
break;
diff --git a/libide/ide-source-view.h b/libide/ide-source-view.h
index d88cb99..3134b74 100644
--- a/libide/ide-source-view.h
+++ b/libide/ide-source-view.h
@@ -106,7 +106,9 @@ typedef enum
* @IDE_SOURCE_VIEW_MOVEMENT_HALF_PAGE_LEFT: move half a page left.
* @IDE_SOURCE_VIEW_MOVEMENT_HALF_PAGE_RIGHT: move half a page right.
* @IDE_SOURCE_VIEW_MOVEMENT_PAGE_UP: move a full page up.
+ * @IDE_SOURCE_VIEW_MOVEMENT_PAGE_UP_LINES: move a full page up, but extend to whole line.
* @IDE_SOURCE_VIEW_MOVEMENT_PAGE_DOWN: move a full page down.
+ * @IDE_SOURCE_VIEW_MOVEMENT_PAGE_DOWN_LINES: move a full page down, but extend to whole line.
* @IDE_SOURCE_VIEW_MOVEMENT_SCREEN_UP: move to viewport up by visible line, adjusting cursor
* to stay on screen if necessary.
* @IDE_SOURCE_VIEW_MOVEMENT_SCREEN_DOWN: move to viewport down by visible line, adjusting cursor
@@ -180,7 +182,9 @@ typedef enum
IDE_SOURCE_VIEW_MOVEMENT_HALF_PAGE_RIGHT,
IDE_SOURCE_VIEW_MOVEMENT_PAGE_UP,
+ IDE_SOURCE_VIEW_MOVEMENT_PAGE_UP_LINES,
IDE_SOURCE_VIEW_MOVEMENT_PAGE_DOWN,
+ IDE_SOURCE_VIEW_MOVEMENT_PAGE_DOWN_LINES,
IDE_SOURCE_VIEW_MOVEMENT_SCREEN_UP,
IDE_SOURCE_VIEW_MOVEMENT_SCREEN_DOWN,
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]