[geany/geany-plugins] a0e0ab: Merge pull request #889 from LarsGit223/line-ops-keybindings

Frank Lanitz git-noreply at xxxxx
Sun Jul 28 20:25:01 UTC 2019


Branch:      refs/heads/master
Author:      Frank Lanitz <frank at frank.uvena.de>
Committer:   GitHub <noreply at github.com>
Date:        Sun, 28 Jul 2019 20:25:01 UTC
Commit:      a0e0ab20409d50fdfc214c18aba29cc37720394e
             https://github.com/geany/geany-plugins/commit/a0e0ab20409d50fdfc214c18aba29cc37720394e

Log Message:
-----------
Merge pull request #889 from LarsGit223/line-ops-keybindings

lineoperations: added keybindings. See #832.


Modified Paths:
--------------
    lineoperations/src/lineoperations.c

Modified: lineoperations/src/lineoperations.c
90 lines changed, 62 insertions(+), 28 deletions(-)
===================================================================
@@ -39,6 +39,18 @@ struct lo_lines {
 };
 
 
+/* represents a menu item and key binding */
+struct lo_menu_item{
+	const gchar *label;
+	const gchar *kb_section_name;
+	GCallback cb_activate;
+	gpointer cb_data;
+};
+
+
+typedef void (*CB_USER_FUNCTION)(GtkMenuItem *menuitem, gpointer gdata);
+
+
 /* selects lines in document (based off of lo_lines struct parameter) */
 static void
 select_lines(GeanyEditor *editor, struct lo_lines *sel)
@@ -238,40 +250,49 @@ action_sci_manip_item(GtkMenuItem *menuitem, gpointer gdata)
 }
 
 
+/* List of menu items, also used for keybindings. */
+static struct lo_menu_item menu_items[] = {
+	{ N_("Remove Duplicate Lines, _Sorted"), "remove_duplicate_lines_s",
+	  G_CALLBACK(action_indir_manip_item), (gpointer) rmdupst },
+	{ N_("Remove Duplicate Lines, _Ordered"), "remove_duplicate_lines_o",
+	  G_CALLBACK(action_indir_manip_item), (gpointer) rmdupln },
+	{ N_("Remove _Unique Lines"), "remove_unique_lines",
+	  G_CALLBACK(action_indir_manip_item), (gpointer) rmunqln },
+	{ N_("Keep _Unique Lines"), "keep_unique_lines",
+	  G_CALLBACK(action_indir_manip_item), (gpointer) kpunqln },
+	{ NULL },
+	{ N_("Remove _Empty Lines"), "remove_empty_lines",
+	  G_CALLBACK(action_sci_manip_item), (gpointer) rmemtyln },
+	{ N_("Remove _Whitespace Lines"), "remove_whitespace_lines",
+	  G_CALLBACK(action_sci_manip_item), (gpointer) rmwhspln },
+	{ NULL },
+	{ N_("Remove Every _Nth Line"), "remove_every_nth_line",
+	  G_CALLBACK(action_sci_manip_item), (gpointer) rmnthln },
+	{ NULL },
+	{ N_("Sort Lines _Ascending"), "sort_lines_ascending",
+	  G_CALLBACK(action_indir_manip_item), (gpointer) sortlnsasc },
+	{ N_("Sort Lines _Descending"), "sort_lines_descending",
+	  G_CALLBACK(action_indir_manip_item), (gpointer) sortlndesc }
+};
+
+
+/* Keybinding callback */
+static void lo_keybinding_callback(guint key_id)
+{
+	CB_USER_FUNCTION cb_activate;
+	g_return_if_fail(key_id < G_N_ELEMENTS(menu_items));
+	cb_activate = (CB_USER_FUNCTION)menu_items[key_id].cb_activate;
+	cb_activate(NULL, menu_items[key_id].cb_data);
+}
+
+
 static gboolean
 lo_init(GeanyPlugin *plugin, gpointer gdata)
 {
 	GeanyData *geany_data = plugin->geany_data;
-
+	GeanyKeyGroup *key_group;
 	GtkWidget *submenu;
 	guint i;
-	struct {
-		const gchar *label;
-		GCallback cb_activate;
-		gpointer cb_data;
-	} menu_items[] = {
-		{ N_("Remove Duplicate Lines, _Sorted"),
-		  G_CALLBACK(action_indir_manip_item), (gpointer) rmdupst },
-		{ N_("Remove Duplicate Lines, _Ordered"),
-		  G_CALLBACK(action_indir_manip_item), (gpointer) rmdupln },
-		{ N_("Remove _Unique Lines"),
-		  G_CALLBACK(action_indir_manip_item), (gpointer) rmunqln },
-		{ N_("Keep _Unique Lines"),
-		  G_CALLBACK(action_indir_manip_item), (gpointer) kpunqln },
-		{ NULL },
-		{ N_("Remove _Empty Lines"),
-		  G_CALLBACK(action_sci_manip_item), (gpointer) rmemtyln },
-		{ N_("Remove _Whitespace Lines"),
-		  G_CALLBACK(action_sci_manip_item), (gpointer) rmwhspln },
-		{ NULL },
-		{ N_("Remove Every _Nth Line"),
-		  G_CALLBACK(action_sci_manip_item), (gpointer) rmnthln },
-		{ NULL },
-		{ N_("Sort Lines _Ascending"),
-		  G_CALLBACK(action_indir_manip_item), (gpointer) sortlnsasc },
-		{ N_("Sort Lines _Descending"),
-		  G_CALLBACK(action_indir_manip_item), (gpointer) sortlndesc }
-	};
 
 	main_menu_item = gtk_menu_item_new_with_mnemonic(_("_Line Operations"));
 	gtk_widget_show(main_menu_item);
@@ -303,6 +324,19 @@ lo_init(GeanyPlugin *plugin, gpointer gdata)
 	gtk_container_add(GTK_CONTAINER(geany->main_widgets->tools_menu),
 									main_menu_item);
 
+	/* Setup keybindings. */
+	key_group = plugin_set_key_group
+		(plugin, "Line Operations", G_N_ELEMENTS(menu_items), NULL);
+	for (i = 0; i < G_N_ELEMENTS(menu_items); i++)
+	{
+		if (menu_items[i].label != NULL)
+		{
+			keybindings_set_item(key_group, i,
+				lo_keybinding_callback, 0, 0, menu_items[i].kb_section_name,
+					menu_items[i].label, NULL);
+		}
+	}
+
 	return TRUE;
 }
 



--------------
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