[gnome-builder] vim: Handle selections in move_to_line_n
- From: Florian Müllner <fmuellner src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-builder] vim: Handle selections in move_to_line_n
- Date: Mon, 6 Oct 2014 07:03:54 +0000 (UTC)
commit 4dcdb3d8b3cdacd984a250342cb5a3ec3da96d20
Author: Florian Müllner <fmuellner gnome org>
Date: Sun Oct 5 03:52:24 2014 +0200
vim: Handle selections in move_to_line_n
Motion commands should modify a selection (if any) rather than clear it;
while stuff like 'd10G' is uncommon, supporting it does not hurt ...
https://bugzilla.gnome.org/show_bug.cgi?id=737973
src/editor/gb-editor-vim.c | 26 +++++++++++++++++++++++---
1 files changed, 23 insertions(+), 3 deletions(-)
---
diff --git a/src/editor/gb-editor-vim.c b/src/editor/gb-editor-vim.c
index d787d40..6b2a4e3 100644
--- a/src/editor/gb-editor-vim.c
+++ b/src/editor/gb-editor-vim.c
@@ -1897,13 +1897,33 @@ gb_editor_vim_move_to_line_n (GbEditorVim *vim,
{
GtkTextBuffer *buffer;
GtkTextMark *insert;
- GtkTextIter iter;
+ GtkTextIter iter, selection;
+ gboolean has_selection;
g_assert (GB_IS_EDITOR_VIM (vim));
buffer = gtk_text_view_get_buffer (vim->priv->text_view);
- gtk_text_buffer_get_iter_at_line (buffer, &iter, line);
- gtk_text_buffer_select_range (buffer, &iter, &iter);
+ has_selection = gb_editor_vim_get_selection_bounds (vim, &iter, &selection);
+
+ if (is_single_line_selection (&iter, &selection))
+ {
+ gtk_text_iter_set_line (&iter, line);
+
+ if (gtk_text_iter_compare (&iter, &selection) > 0)
+ gtk_text_iter_forward_line (&iter);
+ }
+ else
+ gtk_text_iter_set_line (&iter, line);
+
+ if (has_selection)
+ {
+ gb_editor_vim_select_range (vim, &iter, &selection);
+ gb_editor_vim_ensure_anchor_selected (vim);
+ }
+ else
+ {
+ gb_editor_vim_select_range (vim, &iter, &iter);
+ }
vim->priv->target_line_offset = gb_editor_vim_get_line_offset (vim);
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]