SF.net SVN: geany: [1397] trunk

ntrel at users.sourceforge.net ntrel at xxxxx
Thu Mar 15 12:52:16 UTC 2007


Revision: 1397
          http://svn.sourceforge.net/geany/?rev=1397&view=rev
Author:   ntrel
Date:     2007-03-15 05:52:16 -0700 (Thu, 15 Mar 2007)

Log Message:
-----------
Add Goto Previous/Next Marker keybindings (Ctrl-, and Ctrl-.).
Make sci_marker_next() and sci_marker_previous() return marker line
number.

Modified Paths:
--------------
    trunk/ChangeLog
    trunk/src/keybindings.c
    trunk/src/keybindings.h
    trunk/src/sciwrappers.c
    trunk/src/sciwrappers.h

Modified: trunk/ChangeLog
===================================================================
--- trunk/ChangeLog	2007-03-14 12:47:32 UTC (rev 1396)
+++ trunk/ChangeLog	2007-03-15 12:52:16 UTC (rev 1397)
@@ -1,3 +1,12 @@
+2007-03-15  Nick Treleaven  <nick.treleaven at btinternet.com>
+
+ * src/keybindings.c, src/keybindings.h, src/sciwrappers.c,
+   src/sciwrappers.h:
+   Add Goto Previous/Next Marker keybindings (Ctrl-, and Ctrl-.).
+   Make sci_marker_next() and sci_marker_previous() return marker line
+   number.
+
+
 2007-03-14  Nick Treleaven  <nick.treleaven at btinternet.com>
 
  * src/callbacks.c:

Modified: trunk/src/keybindings.c
===================================================================
--- trunk/src/keybindings.c	2007-03-14 12:47:32 UTC (rev 1396)
+++ trunk/src/keybindings.c	2007-03-15 12:52:16 UTC (rev 1397)
@@ -239,6 +239,12 @@
 	keys[GEANY_KEYS_EDIT_GOTOMATCHINGBRACE] = fill(cb_func_edit,
 		GDK_less, GDK_SHIFT_MASK | GDK_CONTROL_MASK, "edit_gotomatchingbrace",
 		_("Goto matching brace"));
+	keys[GEANY_KEYS_EDIT_GOTONEXTMARKER] = fill(cb_func_edit,
+		GDK_period, GDK_CONTROL_MASK, "edit_gotonextmarker",
+		_("Goto next marker"));
+	keys[GEANY_KEYS_EDIT_GOTOPREVIOUSMARKER] = fill(cb_func_edit,
+		GDK_comma, GDK_CONTROL_MASK, "edit_gotopreviousmarker",
+		_("Goto previous marker"));
 	keys[GEANY_KEYS_EDIT_AUTOCOMPLETE] = fill(cb_func_edit,
 		GDK_space, GDK_CONTROL_MASK, "edit_autocomplete", _("Complete word"));
 #ifdef G_OS_WIN32
@@ -819,11 +825,14 @@
 static void cb_func_edit(guint key_id)
 {
 	gint idx = document_get_cur_idx();
+	gint cur_line;
 	GtkWidget *focusw = gtk_window_get_focus(GTK_WINDOW(app->window));
 
 	// edit keybindings only valid when scintilla widget has focus
 	if (! DOC_IDX_VALID(idx) || focusw != GTK_WIDGET(doc_list[idx].sci)) return;
 
+	cur_line = sci_get_current_line(doc_list[idx].sci, -1);
+
 	switch (key_id)
 	{
 		case GEANY_KEYS_EDIT_DUPLICATELINE:
@@ -859,6 +868,28 @@
 		case GEANY_KEYS_EDIT_GOTOMATCHINGBRACE:
 			goto_matching_brace(idx);
 			break;
+		case GEANY_KEYS_EDIT_GOTONEXTMARKER:
+		{
+			gint mline = sci_marker_next(doc_list[idx].sci, cur_line + 1, 1 << 1, TRUE);
+
+			if (mline != -1)
+			{
+				sci_goto_line(doc_list[idx].sci, mline, TRUE);
+				doc_list[idx].scroll_percent = 0.5F;
+			}
+			break;
+		}
+		case GEANY_KEYS_EDIT_GOTOPREVIOUSMARKER:
+		{
+			gint mline = sci_marker_previous(doc_list[idx].sci, cur_line - 1, 1 << 1, TRUE);
+
+			if (mline != -1)
+			{
+				sci_goto_line(doc_list[idx].sci, mline, TRUE);
+				doc_list[idx].scroll_percent = 0.5F;
+			}
+			break;
+		}
 		case GEANY_KEYS_EDIT_TOLOWERCASE:
 			on_to_lower_case1_activate(NULL, NULL);
 			break;

Modified: trunk/src/keybindings.h
===================================================================
--- trunk/src/keybindings.h	2007-03-14 12:47:32 UTC (rev 1396)
+++ trunk/src/keybindings.h	2007-03-15 12:52:16 UTC (rev 1397)
@@ -105,6 +105,8 @@
 	GEANY_KEYS_EDIT_SENDTOCMD2,
 	GEANY_KEYS_EDIT_SENDTOCMD3,
 	GEANY_KEYS_EDIT_GOTOMATCHINGBRACE,
+	GEANY_KEYS_EDIT_GOTONEXTMARKER,
+	GEANY_KEYS_EDIT_GOTOPREVIOUSMARKER,
 	GEANY_KEYS_EDIT_AUTOCOMPLETE,
 	GEANY_KEYS_EDIT_CALLTIP,
 	GEANY_KEYS_EDIT_MACROLIST,

Modified: trunk/src/sciwrappers.c
===================================================================
--- trunk/src/sciwrappers.c	2007-03-14 12:47:32 UTC (rev 1396)
+++ trunk/src/sciwrappers.c	2007-03-15 12:52:16 UTC (rev 1397)
@@ -331,33 +331,36 @@
 }
 
 
-gboolean sci_marker_next(ScintillaObject* sci, gint line, gint marker_mask)
+/* Returns the line number of the next marker that matches marker_mask, or -1.
+ * marker_mask is a bitor of 1 << marker_index. (See MarkerHandleSet::MarkValue()).
+ * Note: If there is a marker on the line, it returns the same line. */
+gint sci_marker_next(ScintillaObject* sci, gint line, gint marker_mask, gboolean wrap)
 {
 	gint marker_line;
 
 	marker_line = SSM(sci, SCI_MARKERNEXT, line, marker_mask);
-
-	if( marker_line != -1 ){
-		SSM(sci,SCI_GOTOLINE,marker_line,0);
-		return TRUE;
-	}else{
-		return FALSE;
-	}
+	if (wrap && marker_line == -1)
+		marker_line = SSM(sci, SCI_MARKERNEXT, 0, marker_mask);
+	return marker_line;
 }
 
 
-gboolean sci_marker_prev(ScintillaObject* sci, gint line, gint marker_mask)
+/* Returns the line number of the previous marker that matches marker_mask, or -1.
+ * marker_mask is a bitor of 1 << marker_index. (See MarkerHandleSet::MarkValue()).
+ * Note: If there is a marker on the line, it returns the same line. */
+gint sci_marker_previous(ScintillaObject* sci, gint line, gint marker_mask, gboolean wrap)
 {
 	gint marker_line;
 
 	marker_line = SSM(sci, SCI_MARKERPREVIOUS, line, marker_mask);
+	if (wrap && marker_line == -1)
+	{
+		gint len = sci_get_length(sci);
+		gint last_line = sci_get_line_from_position(sci, len - 1);
 
-	if( marker_line != -1 ){
-		SSM(sci,SCI_GOTOLINE,marker_line,0);
-		return TRUE;
-	}else{
-		return FALSE;
+		marker_line = SSM(sci, SCI_MARKERPREVIOUS, last_line, marker_mask);
 	}
+	return marker_line;
 }
 
 

Modified: trunk/src/sciwrappers.h
===================================================================
--- trunk/src/sciwrappers.h	2007-03-14 12:47:32 UTC (rev 1396)
+++ trunk/src/sciwrappers.h	2007-03-15 12:52:16 UTC (rev 1397)
@@ -62,8 +62,8 @@
 void 				sci_zoom_off				(ScintillaObject* sci);
 void				sci_set_marker_at_line		(ScintillaObject* sci, gint line_number, gboolean set, gint marker );
 gboolean 			sci_is_marker_set_at_line	(ScintillaObject* sci, gint line, gint marker);
-gboolean 			sci_marker_next				(ScintillaObject* sci, gint line, gint marker_mask);
-gboolean 			sci_marker_prev				(ScintillaObject* sci, gint line, gint marker_mask);
+gint				sci_marker_next				(ScintillaObject* sci, gint line, gint marker_mask, gboolean wrap);
+gint				sci_marker_previous			(ScintillaObject* sci, gint line, gint marker_mask, gboolean wrap);
 
 gint 				sci_get_col_from_position	(ScintillaObject* sci, gint position);
 gint 				sci_get_line_from_position	(ScintillaObject* sci, gint position);


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



More information about the Commits mailing list