[geany/geany-plugins] 48342c: Merge pull request #926 from sagarchalise/pt-utils

Frank Lanitz git-noreply at xxxxx
Sun Jan 19 09:00:07 UTC 2020


Branch:      refs/heads/master
Author:      Frank Lanitz <frank at frank.uvena.de>
Committer:   GitHub <noreply at github.com>
Date:        Sun, 19 Jan 2020 09:00:07 UTC
Commit:      48342cf02875ceb6670d530f54bdd7cf2e96df0d
             https://github.com/geany/geany-plugins/commit/48342cf02875ceb6670d530f54bdd7cf2e96df0d

Log Message:
-----------
Merge pull request #926 from sagarchalise/pt-utils

Utilities for Pair Tag Highlighter


Modified Paths:
--------------
    pairtaghighlighter/src/pair_tag_highlighter.c

Modified: pairtaghighlighter/src/pair_tag_highlighter.c
90 lines changed, 77 insertions(+), 13 deletions(-)
===================================================================
@@ -24,6 +24,7 @@
 /* Keyboard Shortcut */
 enum {
   KB_MATCH_TAG,
+  KB_SELECT_TAG,
   KB_COUNT
 };
 
@@ -34,6 +35,8 @@ GeanyData       *geany_data;
 /* Is needed for clearing highlighting after moving cursor out
  * from the tag */
 static gint highlightedBrackets[] = {0, 0, 0, 0};
+static GtkWidget *goto_matching_tag = NULL;
+static GtkWidget *select_matching_tag = NULL;
 
 PLUGIN_VERSION_CHECK(224)
 
@@ -404,40 +407,101 @@ static gboolean on_editor_notify(GObject *obj, GeanyEditor *editor,
     /* returning FALSE to allow Geany processing the event */
     return FALSE;
 }
-
 static void
-on_kb_goto_matching_tag (guint key_id)
+select_or_match_tag (gboolean select)
 {
     gint cur_line;
-    gint jump_line = 0;
-    if(highlightedBrackets[0] != highlightedBrackets[2] && highlightedBrackets[0] != 0){
-        GeanyDocument *doc = document_get_current();
+    gint jump_line=-5, select_start=0, select_end=0;
+    GeanyDocument *doc = document_get_current();
+    if(highlightedBrackets[0] != highlightedBrackets[2]){
         cur_line = sci_get_current_position(doc->editor->sci);
         if(cur_line >= highlightedBrackets[0] && cur_line <= highlightedBrackets[1]){
-            jump_line = highlightedBrackets[2];
+            if (!select){
+                jump_line = highlightedBrackets[2];
+            }
         }
         else if(cur_line >= highlightedBrackets[2] && cur_line <= highlightedBrackets[3]){
-            jump_line = highlightedBrackets[0];
+            if(!select){
+                jump_line = highlightedBrackets[0];
+            }
         }
-        if(jump_line != 0){
-            sci_set_current_position(doc->editor->sci, jump_line, TRUE);
+        if(select){
+            select_end = (highlightedBrackets[0] < highlightedBrackets[2])?highlightedBrackets[3]+1:highlightedBrackets[1]+1;
+            select_start = (highlightedBrackets[0] < highlightedBrackets[2])?highlightedBrackets[0]:highlightedBrackets[2];
         }
     }
+    if (select){
+        sci_set_selection_start(doc->editor->sci, select_start);
+        sci_set_selection_end(doc->editor->sci, select_end);
+    }
+    else if (jump_line >= 0){
+        sci_set_current_position(doc->editor->sci, jump_line, TRUE);
+    }
+}
+
+
+static void
+on_goto_matching_tag(GtkWidget *widget, gpointer user_data)
+{
+  select_or_match_tag(FALSE);
+  return;
 }
+static void
+on_select_matching_tag(GtkWidget *widget, gpointer user_data)
+{
+  select_or_match_tag(TRUE);
+  return;
+}
+static void
+on_editor_menu_popup (GObject       *object,
+                       const gchar   *word,
+                       gint           pos,
+                       GeanyDocument *doc,
+                       gpointer       user_data)
+{
+    
+   if(DOC_VALID(doc) && (doc->file_type->id == GEANY_FILETYPES_HTML || doc->file_type->id == GEANY_FILETYPES_PHP || doc->file_type->id == GEANY_FILETYPES_XML))
+    {
+        gtk_widget_set_sensitive (goto_matching_tag, TRUE);
+        gtk_widget_set_sensitive (select_matching_tag, TRUE);
+        gtk_widget_show(select_matching_tag);
+        gtk_widget_show(goto_matching_tag);
+    }
+    else{
+        gtk_widget_set_sensitive (goto_matching_tag, FALSE);
+        gtk_widget_set_sensitive (select_matching_tag, FALSE);
+        gtk_widget_hide(select_matching_tag);
+        gtk_widget_hide(goto_matching_tag);
+    }
+}
+
 
 PluginCallback plugin_callbacks[] =
 {
     { "editor-notify", (GCallback) &on_editor_notify, FALSE, NULL },
+    { "update-editor-menu", (GCallback) &on_editor_menu_popup, FALSE, NULL },
     { NULL, NULL, FALSE, NULL }
 };
 
 
 void plugin_init(GeanyData *data)
 {
-    GeanyKeyGroup *group;
-    group = plugin_set_key_group (geany_plugin, "Pair Tag Highlighter", KB_COUNT, NULL);
-    keybindings_set_item (group, KB_MATCH_TAG, on_kb_goto_matching_tag,
-                        0, 0, "goto_matching_tag", _("Go To Matching Tag"), NULL);
+    GeanyKeyGroup *kb_group;
+    goto_matching_tag = gtk_menu_item_new_with_label (_("Goto Matching XML Tag"));
+    select_matching_tag = gtk_menu_item_new_with_label (_("Select Matching XML Tag"));
+    g_signal_connect (goto_matching_tag, "activate",
+                    G_CALLBACK (on_goto_matching_tag), NULL);
+    g_signal_connect (select_matching_tag, "activate",
+                    G_CALLBACK (on_select_matching_tag), NULL);
+    gtk_container_add (GTK_CONTAINER (data->main_widgets->editor_menu),
+                     goto_matching_tag);
+    gtk_container_add (GTK_CONTAINER (data->main_widgets->editor_menu),
+                     select_matching_tag);
+    kb_group = plugin_set_key_group (geany_plugin, PLUGIN, KB_COUNT, NULL);
+    keybindings_set_item (kb_group, KB_MATCH_TAG, NULL,
+                        0, 0, "goto_matching_tag", _("Go To Matching Tag"), goto_matching_tag);
+    keybindings_set_item (kb_group, KB_SELECT_TAG, NULL,
+                        0, 0, "select_matching_tag", _("Select To Matching Tag"), select_matching_tag);
 }
 
 



--------------
This E-Mail was brought to you by github_commit_mail.py (Source: https://github.com/geany/infrastructure).


More information about the Plugins-Commits mailing list