[gnome-builder/wip/vim] editor: be more like VIM when moving up in line selections.
- From: Christian Hergert <chergert src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-builder/wip/vim] editor: be more like VIM when moving up in line selections.
- Date: Tue, 30 Sep 2014 21:52:38 +0000 (UTC)
commit 07a338939b99ecb095c1543f9116001bd0404f15
Author: Christian Hergert <christian hergert me>
Date: Tue Sep 30 14:52:18 2014 -0700
editor: be more like VIM when moving up in line selections.
src/editor/gb-editor-vim.c | 26 ++++++++++++++++++++++----
1 files changed, 22 insertions(+), 4 deletions(-)
---
diff --git a/src/editor/gb-editor-vim.c b/src/editor/gb-editor-vim.c
index acc3a6c..a55c318 100644
--- a/src/editor/gb-editor-vim.c
+++ b/src/editor/gb-editor-vim.c
@@ -457,9 +457,16 @@ static gboolean
is_single_line_selection (const GtkTextIter *begin,
const GtkTextIter *end)
{
- return ((gtk_text_iter_get_line_offset (begin) == 0) &&
- (gtk_text_iter_get_line_offset (end) == 0) &&
- (gtk_text_iter_get_line (begin) + 1 == gtk_text_iter_get_line (end)));
+ if (gtk_text_iter_compare (begin, end) < 0)
+ return ((gtk_text_iter_get_line_offset (begin) == 0) &&
+ (gtk_text_iter_get_line_offset (end) == 0) &&
+ ((gtk_text_iter_get_line (begin) + 1) ==
+ gtk_text_iter_get_line (end)));
+ else
+ return ((gtk_text_iter_get_line_offset (begin) == 0) &&
+ (gtk_text_iter_get_line_offset (end) == 0) &&
+ ((gtk_text_iter_get_line (end) + 1) ==
+ gtk_text_iter_get_line (begin)));
}
static void
@@ -502,7 +509,8 @@ gb_editor_vim_move_down (GbEditorVim *vim)
*/
if (is_single_line_selection (&iter, &selection))
{
- text_iter_swap (&iter, &selection);
+ if (gtk_text_iter_compare (&iter, &selection) < 0)
+ text_iter_swap (&iter, &selection);
gtk_text_iter_set_line (&iter, gtk_text_iter_get_line (&iter) + 1);
gb_editor_vim_select_range (vim, &iter, &selection);
GOTO (move_mark);
@@ -554,6 +562,15 @@ gb_editor_vim_move_up (GbEditorVim *vim)
if (line == 0)
return;
+ if (is_single_line_selection (&iter, &selection))
+ {
+ if (gtk_text_iter_compare (&iter, &selection) > 0)
+ text_iter_swap (&iter, &selection);
+ gtk_text_iter_set_line (&iter, gtk_text_iter_get_line (&iter) - 1);
+ gb_editor_vim_select_range (vim, &iter, &selection);
+ GOTO (move_mark);
+ }
+
gtk_text_buffer_get_iter_at_line (buffer, &iter, line - 1);
if ((line - 1) == gtk_text_iter_get_line (&iter))
{
@@ -572,6 +589,7 @@ gb_editor_vim_move_up (GbEditorVim *vim)
gtk_text_buffer_select_range (buffer, &iter, &iter);
}
+move_mark:
insert = gtk_text_buffer_get_insert (buffer);
gtk_text_view_scroll_mark_onscreen (vim->priv->text_view, insert);
}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]