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