SF.net SVN: geany-plugins:[1741] trunk/geany-plugins/geanyextrasel

sheckley at users.sourceforge.net sheckley at xxxxx
Thu Nov 11 17:41:04 UTC 2010


Revision: 1741
          http://geany-plugins.svn.sourceforge.net/geany-plugins/?rev=1741&view=rev
Author:   sheckley
Date:     2010-11-11 17:41:03 +0000 (Thu, 11 Nov 2010)

Log Message:
-----------
smart home selection synced with Geany
Camel Cased E_xtra selection, _Column mode
fixed a small compilation warning

Modified Paths:
--------------
    trunk/geany-plugins/geanyextrasel/ChangeLog
    trunk/geany-plugins/geanyextrasel/src/extrasel.c

Modified: trunk/geany-plugins/geanyextrasel/ChangeLog
===================================================================
--- trunk/geany-plugins/geanyextrasel/ChangeLog	2010-11-11 15:48:55 UTC (rev 1740)
+++ trunk/geany-plugins/geanyextrasel/ChangeLog	2010-11-11 17:41:03 UTC (rev 1741)
@@ -1,14 +1,20 @@
+2010-11-11  Dimitar Zhekov  <dimitar.zhekov at gmail.com>
+
+ * src/extrasel.c:
+   Respect 'Smart' home key (Geany does now).
+   Camel Cased "Extra selection" and "Column mode" menu items.
+
 2010-05-31  Dimitar Zhekov  <dimitar.zhekov at gmail.com>
 
  * src/extrasel.c:
-   Fixed "Goto line and select" with the toolbar visible.
- 
+   Fixed "Select to Line" with the toolbar visible.
+
 2010-05-22  Dimitar Zhekov  <hamster at mbox.contact.bg>
 
  * src/extrasel.c:
    Fixed crash in plugin_cleanup() - patch by Colomban Wendling, thanks.
    Use documents_foreach() if foreach_document() is not available.
- 
+
 2010-05-21  Dimitar Zhekov  <hamster at mbox.contact.bg>
 
  * src/extrasel.c:

Modified: trunk/geany-plugins/geanyextrasel/src/extrasel.c
===================================================================
--- trunk/geany-plugins/geanyextrasel/src/extrasel.c	2010-11-11 15:48:55 UTC (rev 1740)
+++ trunk/geany-plugins/geanyextrasel/src/extrasel.c	2010-11-11 17:41:03 UTC (rev 1741)
@@ -28,7 +28,7 @@
 PLUGIN_VERSION_CHECK(150)
 
 PLUGIN_SET_INFO(_("Extra Selection"), _("Column mode, select to line / matching brace."),
-		"0.1", "Dimitar Toshkov Zhekov <dimitar.zhekov at gmail.com>");
+		"0.2", "Dimitar Toshkov Zhekov <dimitar.zhekov at gmail.com>");
 
 /* Keybinding(s) */
 enum
@@ -58,12 +58,12 @@
 
 static const command_key command_keys[] =
 {
+	{ GDK_Up,     GDK_KP_Up,     SCI_PARAUP },
+	{ GDK_Down,   GDK_KP_Down,   SCI_PARADOWN },
 	{ GDK_Left,   GDK_KP_Left,   SCI_WORDLEFT },
 	{ GDK_Right,  GDK_KP_Right,  SCI_WORDRIGHTEND },
 	{ GDK_Home,   GDK_KP_Home,   SCI_DOCUMENTSTART },
 	{ GDK_End,    GDK_KP_End,    SCI_DOCUMENTEND },
-	{ GDK_Up,     GDK_KP_Up,     SCI_PARAUP },
-	{ GDK_Down,   GDK_KP_Down,   SCI_PARADOWN },
 	{ 0, 0, 0 }
 };
 
@@ -104,13 +104,13 @@
 				{
 					ScintillaObject *sci = doc->editor->sci;
 
-					if (gtk_window_get_focus(GTK_WINDOW(widget)) == sci)
+					if (gtk_window_get_focus(GTK_WINDOW(widget)) == GTK_WIDGET(sci))
 					{
 						column_mode_command(sci, ck->command);
 						return TRUE;
 					}
 				}
-				/* no document or not focused */
+
 				break;
 			}
 		}
@@ -126,54 +126,85 @@
 	gint rectangle;
 } select_key;
 
-static const select_key select_keys[] =
+/* not #defined in 0.18 */
+#define sci_clear_cmdkey(sci, key) scintilla_send_message((sci), SCI_CLEARCMDKEY, (key), 0)
+#define sci_assign_cmdkey(sci, key, command) \
+	scintilla_send_message((sci), SCI_ASSIGNCMDKEY, (key), (command))
+
+static void assign_select_key(ScintillaObject *sci, const select_key *sk)
 {
+	if (column_mode)
+	{
+		sci_clear_cmdkey(sci, sk->key | (SCMOD_ALT << 16));
+		sci_assign_cmdkey(sci, sk->key, sk->rectangle);
+	}
+	else
+	{
+		sci_assign_cmdkey(sci, sk->key, sk->stream);
+		sci_assign_cmdkey(sci, sk->key | (SCMOD_ALT << 16), sk->rectangle);
+	}
+}
+
+static select_key select_keys[] =
+{
+	{ SCK_HOME  | (SCMOD_SHIFT << 16),  SCI_NULL,             SCI_NULL },
+	{ SCK_UP    | (SCMOD_SHIFT << 16),  SCI_LINEUPEXTEND,     SCI_LINEUPRECTEXTEND },
 	{ SCK_DOWN  | (SCMOD_SHIFT << 16),  SCI_LINEDOWNEXTEND,   SCI_LINEDOWNRECTEXTEND },
-	{ SCK_UP    | (SCMOD_SHIFT << 16),  SCI_LINEUPEXTEND,     SCI_LINEUPRECTEXTEND },
 	{ SCK_LEFT  | (SCMOD_SHIFT << 16),  SCI_CHARLEFTEXTEND,   SCI_CHARLEFTRECTEXTEND  },
 	{ SCK_RIGHT | (SCMOD_SHIFT << 16),  SCI_CHARRIGHTEXTEND,  SCI_CHARRIGHTRECTEXTEND },
-	{ SCK_HOME  | (SCMOD_SHIFT << 16),  SCI_VCHOMEEXTEND,     SCI_VCHOMERECTEXTEND },
 	{ SCK_END   | (SCMOD_SHIFT << 16),  SCI_LINEENDEXTEND,    SCI_LINEENDRECTEXTEND },
 	{ SCK_PRIOR | (SCMOD_SHIFT << 16),  SCI_PAGEUPEXTEND,     SCI_PAGEUPRECTEXTEND },
 	{ SCK_NEXT  | (SCMOD_SHIFT << 16),  SCI_PAGEDOWNEXTEND,   SCI_PAGEDOWNRECTEXTEND },
 	{ 0, 0, 0 }
 };
 
-/* not #defined in 0.18 */
-#define sci_clear_cmdkey(sci, key) scintilla_send_message((sci), SCI_CLEARCMDKEY, (key), 0)
-#define sci_assign_cmdkey(sci, key, command) \
-	scintilla_send_message((sci), SCI_ASSIGNCMDKEY, (key), (command))
-
-static void assign_column_keys(ScintillaObject *sci)
+static void assign_select_keys(ScintillaObject *sci)
 {
 	const select_key *sk;
 
 	for (sk = select_keys; sk->key; sk++)
-	{
-		if (column_mode)
-		{
-			sci_clear_cmdkey(sci, sk->key | (SCMOD_ALT << 16));
-			sci_assign_cmdkey(sci, sk->key, sk->rectangle);
-		}
-		else
-		{
-			sci_assign_cmdkey(sci, sk->key, sk->stream);
-			sci_assign_cmdkey(sci, sk->key | (SCMOD_ALT << 16), sk->rectangle);
-		}
-	}
+		assign_select_key(sci, sk);
 }
 
 static void on_document_switch(G_GNUC_UNUSED GObject *obj, GeanyDocument *doc,
 	G_GNUC_UNUSED gpointer user_data)
 {
-	assign_column_keys(doc->editor->sci);
+	assign_select_keys(doc->editor->sci);
 }
 
+static void update_home_key(void)
+{
+	if (geany_data->editor_prefs->smart_home_key)
+	{
+		select_keys->stream = SCI_VCHOMEEXTEND;
+		select_keys->rectangle = SCI_VCHOMERECTEXTEND;
+	}
+	else
+	{
+		select_keys->stream = SCI_HOMEEXTEND;
+		select_keys->rectangle = SCI_HOMERECTEXTEND;
+	}
+}
+
+static void on_settings_change(G_GNUC_UNUSED GKeyFile *config)
+{
+	update_home_key();
+
+	if (column_mode)
+	{
+		GeanyDocument *doc = document_get_current();
+
+		if (doc)
+			assign_select_key(doc->editor->sci, select_keys);
+	}
+}
+
 PluginCallback plugin_callbacks[] =
 {
 	{ "document-new", (GCallback) &on_document_switch, FALSE, NULL },
 	{ "document-open", (GCallback) &on_document_switch, FALSE, NULL },
 	{ "document-activate", (GCallback) &on_document_switch, FALSE, NULL },
+	{ "save-settings", (GCallback) &on_settings_change, FALSE, NULL },
 	{ NULL, NULL, FALSE, NULL }
 };
 
@@ -197,7 +228,7 @@
 		int anchor = sci_get_anchor(sci);
 		int cursor = sci_get_current_position(sci);
 
-		assign_column_keys(sci);
+		assign_select_keys(sci);
 		if (column_mode && select_mode == SC_SEL_STREAM)
 		{
 			sci_set_selection_mode(sci, SC_SEL_RECTANGLE);
@@ -273,13 +304,13 @@
 
 	main_locale_init(LOCALEDIR, GETTEXT_PACKAGE);
 
-	main_menu_item = gtk_menu_item_new_with_mnemonic(_("E_xtra selection"));
+	main_menu_item = gtk_menu_item_new_with_mnemonic(_("E_xtra Selection"));
 	gtk_container_add(GTK_CONTAINER(geany->main_widgets->tools_menu), main_menu_item);
 	g_signal_connect(main_menu_item, "activate", G_CALLBACK(on_extra_select_activate), NULL);
 	extra_select_menu = gtk_menu_new();
 	gtk_menu_item_set_submenu(GTK_MENU_ITEM(main_menu_item), extra_select_menu);
 
-	column_mode_item = gtk_check_menu_item_new_with_mnemonic(_("_Column mode"));
+	column_mode_item = gtk_check_menu_item_new_with_mnemonic(_("_Column Mode"));
 	gtk_container_add(GTK_CONTAINER(extra_select_menu), column_mode_item);
 	g_signal_connect(column_mode_item, "toggled", G_CALLBACK(on_column_mode_toggled), NULL);
 	keybindings_set_item(plugin_key_group, COLUMN_MODE_KB, on_column_mode_key, 0, 0,
@@ -303,6 +334,8 @@
 	go_to_line1_item = g_object_get_data((gpointer) geany->main_widgets->window,
 		"go_to_line1");
 
+	update_home_key();
+
 	plugin_signal_connect(geany_plugin, G_OBJECT(geany->main_widgets->window),
 		"key-press-event", FALSE, G_CALLBACK(on_key_press_event), NULL);
 }
@@ -318,6 +351,6 @@
 
 	column_mode = FALSE;
 	foreach_document (i)
-		assign_column_keys(documents[i]->editor->sci);
+		assign_select_keys(documents[i]->editor->sci);
 	gtk_widget_destroy(main_menu_item);
 }


This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.



More information about the Plugins-Commits mailing list