[gnome-builder] vim: fix [count] when used with a movement



commit fdf8e8b49a5aac4a59e46ee354616c356fff78bf
Author: Sebastien Lafargue <slafargue gnome org>
Date:   Tue Nov 17 21:45:27 2015 +0100

    vim: fix [count] when used with a movement
    
    As some motions use [count] as a line number, we need
    a better way to differentiate cases:
    
     -1 : [count] don't apply
      0 : [count] apply but we don't set one
    > 0 : [count] value

 libide/ide-internal.h              |    2 +-
 libide/ide-source-view-movements.c |   30 +++++++++++++++++++++++----
 libide/ide-source-view-movements.h |    6 ++--
 libide/ide-source-view.c           |   38 ++++++++++++++++++------------------
 libide/ide-source-view.h           |    4 +-
 5 files changed, 50 insertions(+), 30 deletions(-)
---
diff --git a/libide/ide-internal.h b/libide/ide-internal.h
index 814d8d9..54e9d89 100644
--- a/libide/ide-internal.h
+++ b/libide/ide-internal.h
@@ -93,7 +93,7 @@ IdeSourceViewMode  *_ide_source_view_mode_new               (GtkWidget
                                                              const char            *mode,
                                                              IdeSourceViewModeType  type);
 void                _ide_source_view_set_count              (IdeSourceView         *self,
-                                                             guint                  count);
+                                                             gint                   count);
 void                _ide_source_view_set_modifier           (IdeSourceView         *self,
                                                              gunichar               modifier);
 void                _ide_thread_pool_init                   (void);
diff --git a/libide/ide-source-view-movements.c b/libide/ide-source-view-movements.c
index bce4b96..d080c7f 100644
--- a/libide/ide-source-view-movements.c
+++ b/libide/ide-source-view-movements.c
@@ -1956,7 +1956,7 @@ _ide_source_view_apply_movement (IdeSourceView         *self,
                                  IdeSourceViewMovement  movement,
                                  gboolean               extend_selection,
                                  gboolean               exclusive,
-                                 guint                  count,
+                                 gint                   count,
                                  GString               *command_str,
                                  gunichar               command,
                                  gunichar               modifier,
@@ -1991,10 +1991,13 @@ _ide_source_view_apply_movement (IdeSourceView         *self,
   insert = gtk_text_buffer_get_insert (buffer);
 
   /* specific processing for underscore motion */
-  if (g_str_has_suffix (command_str->str, "_") && count > 0)
+  if (g_str_has_suffix (command_str->str, "_"))
     {
       min_count = 0;
-      --count;
+      if (count > 0)
+        --count;
+      else
+        count = 0;
     }
 
   mv.self = self;
@@ -2021,30 +2024,37 @@ _ide_source_view_apply_movement (IdeSourceView         *self,
       break;
 
     case IDE_SOURCE_VIEW_MOVEMENT_NTH_CHAR:
+      mv.count = MAX (1, mv.count);
       ide_source_view_movements_nth_char (&mv);
       break;
 
     case IDE_SOURCE_VIEW_MOVEMENT_PREVIOUS_CHAR:
+      mv.count = MAX (1, mv.count);
       ide_source_view_movements_previous_char (&mv);
       break;
 
     case IDE_SOURCE_VIEW_MOVEMENT_NEXT_CHAR:
+      mv.count = MAX (1, mv.count);
       ide_source_view_movements_next_char (&mv);
       break;
 
     case IDE_SOURCE_VIEW_MOVEMENT_FIRST_CHAR:
+      mv.count = MAX (1, mv.count);
       ide_source_view_movements_first_char (&mv);
       break;
 
     case IDE_SOURCE_VIEW_MOVEMENT_FIRST_NONSPACE_CHAR:
+      mv.count = MAX (1, mv.count);
       ide_source_view_movements_first_nonspace_char (&mv);
       break;
 
     case IDE_SOURCE_VIEW_MOVEMENT_MIDDLE_CHAR:
+      mv.count = MAX (1, mv.count);
       ide_source_view_movements_middle_char (&mv);
       break;
 
     case IDE_SOURCE_VIEW_MOVEMENT_LAST_CHAR:
+      mv.count = MAX (1, mv.count);
       ide_source_view_movements_last_char (&mv);
       break;
 
@@ -2138,26 +2148,32 @@ _ide_source_view_apply_movement (IdeSourceView         *self,
       break;
 
     case IDE_SOURCE_VIEW_MOVEMENT_FIRST_LINE:
+      mv.count = MAX (1, mv.count);
       ide_source_view_movements_first_line (&mv);
       break;
 
     case IDE_SOURCE_VIEW_MOVEMENT_NTH_LINE:
+      mv.count = MAX (1, mv.count);
       ide_source_view_movements_nth_line (&mv);
       break;
 
     case IDE_SOURCE_VIEW_MOVEMENT_LAST_LINE:
+      mv.count = MAX (1, mv.count);
       ide_source_view_movements_last_line (&mv);
       break;
 
     case IDE_SOURCE_VIEW_MOVEMENT_LINE_PERCENTAGE:
+      mv.count = MAX (1, mv.count);
       ide_source_view_movements_line_percentage (&mv);
       break;
 
     case IDE_SOURCE_VIEW_MOVEMENT_LINE_CHARS:
+      mv.count = MAX (1, mv.count);
       ide_source_view_movements_line_chars (&mv);
       break;
 
     case IDE_SOURCE_VIEW_MOVEMENT_LINE_END:
+      mv.count = MAX (1, mv.count);
       ide_source_view_movements_line_end (&mv);
       break;
 
@@ -2176,18 +2192,22 @@ _ide_source_view_apply_movement (IdeSourceView         *self,
       break;
 
     case IDE_SOURCE_VIEW_MOVEMENT_SCREEN_TOP:
+      mv.count = MAX (1, mv.count);
       ide_source_view_movements_screen_top (&mv);
       break;
 
     case IDE_SOURCE_VIEW_MOVEMENT_SCREEN_MIDDLE:
+      mv.count = MAX (1, mv.count);
       ide_source_view_movements_screen_middle (&mv);
       break;
 
     case IDE_SOURCE_VIEW_MOVEMENT_SCREEN_BOTTOM:
+      mv.count = MAX (1, mv.count);
       ide_source_view_movements_screen_bottom (&mv);
       break;
 
     case IDE_SOURCE_VIEW_MOVEMENT_MATCH_SPECIAL:
+      mv.count = MAX (1, mv.count);
       ide_source_view_movements_match_special (&mv);
       break;
 
@@ -2257,7 +2277,7 @@ void
 _ide_source_view_select_inner (IdeSourceView *self,
                                gunichar       inner_left,
                                gunichar       inner_right,
-                               guint          count,
+                               gint           count,
                                gboolean       exclusive,
                                gboolean       string_mode)
 {
@@ -2683,7 +2703,7 @@ get_html_element_parent (HtmlElement *element)
 
 void
 _ide_source_view_select_tag (IdeSourceView *self,
-                             guint          count,
+                             gint           count,
                              gboolean       exclusive)
 {
   GtkTextBuffer *buffer;
diff --git a/libide/ide-source-view-movements.h b/libide/ide-source-view-movements.h
index 6f9f086..c867e4f 100644
--- a/libide/ide-source-view-movements.h
+++ b/libide/ide-source-view-movements.h
@@ -27,7 +27,7 @@ void _ide_source_view_apply_movement (IdeSourceView         *source_view,
                                       IdeSourceViewMovement  movement,
                                       gboolean               extend_selection,
                                       gboolean               exclusive,
-                                      guint                  count,
+                                      gint                   count,
                                       GString               *command_str,
                                       gunichar               command,
                                       gunichar               modifier,
@@ -37,12 +37,12 @@ void _ide_source_view_apply_movement (IdeSourceView         *source_view,
 void _ide_source_view_select_inner   (IdeSourceView *self,
                                       gunichar       inner_left,
                                       gunichar       inner_right,
-                                      guint          count,
+                                      gint           count,
                                       gboolean       exclusive,
                                       gboolean       string_mode);
 
 void _ide_source_view_select_tag     (IdeSourceView *self,
-                                      guint          count,
+                                      gint           count,
                                       gboolean       exclusive);
 
 G_END_DECLS
diff --git a/libide/ide-source-view.c b/libide/ide-source-view.c
index da8648d..cace971 100644
--- a/libide/ide-source-view.c
+++ b/libide/ide-source-view.c
@@ -122,7 +122,7 @@ typedef struct
   gunichar                     command;
   gunichar                     modifier;
   gunichar                     search_char;
-  guint                        count;
+  gint                         count;
   gunichar                     inner_left;
   gunichar                     inner_right;
 
@@ -168,7 +168,7 @@ typedef struct
 typedef struct
 {
   gint              ref_count;
-  guint             count;
+  gint              count;
   IdeSourceView    *self;
   guint             is_forward : 1;
   guint             extend_selection : 1;
@@ -391,7 +391,7 @@ ide_source_view_sync_rubberband_mark (IdeSourceView *self)
 
 void
 _ide_source_view_set_count (IdeSourceView *self,
-                            guint          count)
+                            gint           count)
 {
   IdeSourceViewPrivate *priv = ide_source_view_get_instance_private (self);
 
@@ -2732,7 +2732,7 @@ ide_source_view_real_insert_modifier (IdeSourceView *self,
   GtkTextBuffer *buffer;
   gchar str[8] = { 0 };
   gsize i;
-  guint count = 1;
+  gint count = 1;
   gint len;
 
   g_assert (IDE_IS_SOURCE_VIEW (self));
@@ -3129,12 +3129,12 @@ ide_source_view_real_movement (IdeSourceView         *self,
                                gboolean               apply_count)
 {
   IdeSourceViewPrivate *priv = ide_source_view_get_instance_private (self);
-  guint count = 0;
+  gint count = -1;
 
   g_assert (IDE_IS_SOURCE_VIEW (self));
 
   if (apply_count)
-    count = MAX(1, priv->count);
+    count = priv->count;
 
   if (priv->scrolling_to_scroll_mark)
     priv->scrolling_to_scroll_mark = FALSE;
@@ -4487,7 +4487,7 @@ ide_source_view_real_begin_macro (IdeSourceView *self)
   GdkEvent *event;
   const gchar *mode_name;
   gunichar modifier;
-  guint count;
+  gint count;
 
   IDE_ENTRY;
 
@@ -4613,7 +4613,7 @@ ide_source_view_real_replay_macro (IdeSourceView *self,
 {
   IdeSourceViewPrivate *priv = ide_source_view_get_instance_private (self);
   IdeSourceViewCapture *capture;
-  guint count = 1;
+  gint count = 1;
   gsize i;
 
   IDE_ENTRY;
@@ -5286,7 +5286,7 @@ ide_source_view_get_property (GObject    *object,
       break;
 
     case PROP_COUNT:
-      g_value_set_uint (value, ide_source_view_get_count (self));
+      g_value_set_int (value, ide_source_view_get_count (self));
       break;
 
     case PROP_ENABLE_WORD_COMPLETION:
@@ -5391,7 +5391,7 @@ ide_source_view_set_property (GObject      *object,
       break;
 
     case PROP_COUNT:
-      ide_source_view_set_count (self, g_value_get_uint (value));
+      ide_source_view_set_count (self, g_value_get_int (value));
       break;
 
     case PROP_ENABLE_WORD_COMPLETION:
@@ -5548,13 +5548,13 @@ ide_source_view_class_init (IdeSourceViewClass *klass)
                          (G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
 
   properties [PROP_COUNT] =
-    g_param_spec_uint ("count",
-                       "Count",
-                       "The count for movements.",
-                       0,
-                       G_MAXINT,
-                       0,
-                       (G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+    g_param_spec_int ("count",
+                      "Count",
+                      "The count for movements.",
+                      -1,
+                      G_MAXINT,
+                      0,
+                      (G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
 
   properties [PROP_FILE_SETTINGS] =
     g_param_spec_object ("file-settings",
@@ -7645,7 +7645,7 @@ ide_source_view_clear_search (IdeSourceView *self)
   gtk_source_search_settings_set_search_text (search_settings, "");
 }
 
-guint
+gint
 ide_source_view_get_count (IdeSourceView *self)
 {
   IdeSourceViewPrivate *priv = ide_source_view_get_instance_private (self);
@@ -7657,7 +7657,7 @@ ide_source_view_get_count (IdeSourceView *self)
 
 void
 ide_source_view_set_count (IdeSourceView *self,
-                           guint          count)
+                           gint           count)
 {
   IdeSourceViewPrivate *priv = ide_source_view_get_instance_private (self);
 
diff --git a/libide/ide-source-view.h b/libide/ide-source-view.h
index b9ccf3b..4eb1e2f 100644
--- a/libide/ide-source-view.h
+++ b/libide/ide-source-view.h
@@ -291,7 +291,7 @@ IdeBackForwardList         *ide_source_view_get_back_forward_list     (IdeSource
 void                        ide_source_view_get_visual_position       (IdeSourceView              *self,
                                                                        guint                      *line,
                                                                        guint                      
*line_offset);
-guint                       ide_source_view_get_count                 (IdeSourceView              *self);
+gint                        ide_source_view_get_count                 (IdeSourceView              *self);
 gboolean                    ide_source_view_get_enable_word_completion(IdeSourceView              *self);
 IdeFileSettings            *ide_source_view_get_file_settings         (IdeSourceView              *self);
 const PangoFontDescription *ide_source_view_get_font_desc             (IdeSourceView              *self);
@@ -321,7 +321,7 @@ void                        ide_source_view_push_snippet              (IdeSource
                                                                        const GtkTextIter          *location);
 void                        ide_source_view_rollback_search           (IdeSourceView              *self);
 void                        ide_source_view_set_count                 (IdeSourceView              *self,
-                                                                       guint                       count);
+                                                                       gint                        count);
 void                        ide_source_view_set_enable_word_completion(IdeSourceView              *self,
                                                                        gboolean                    
enable_word_copletion);
 void                        ide_source_view_set_font_desc             (IdeSourceView              *self,


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]