Revision: 3155 http://geany.svn.sourceforge.net/geany/?rev=3155&view=rev Author: eht16 Date: 2008-10-25 18:57:00 +0000 (Sat, 25 Oct 2008)
Log Message: ----------- Add *_full variants of editor indicator functions to the plugin API for more control over indicators. Add/Update some API docs. Make the 'Mark' button for Find highlight the results with rounded boxes instead of marking the whole line.
Modified Paths: -------------- trunk/ChangeLog trunk/doc/geany.html trunk/doc/geany.txt trunk/src/callbacks.c trunk/src/editor.c trunk/src/editor.h trunk/src/highlighting.c trunk/src/plugindata.h trunk/src/plugins.c trunk/src/sciwrappers.c trunk/src/search.c
Modified: trunk/ChangeLog =================================================================== --- trunk/ChangeLog 2008-10-25 18:56:38 UTC (rev 3154) +++ trunk/ChangeLog 2008-10-25 18:57:00 UTC (rev 3155) @@ -7,6 +7,14 @@ Add main_locale_init() to the plugin API. * src/callbacks.c: Fix updating of the value of the toolbar Goto line spinbutton. + * doc/geany.html, doc/geany.txt, src/callbacks.c, src/editor.c, + src/editor.h, src/highlighting.c, src/plugindata.h, src/plugins.c, + src/sciwrappers.c, src/search.c: + Add *_full variants of editor indicator functions to the plugin API + for more control over indicators. + Add/Update some API docs. + Make the 'Mark' button for Find highlight the results with rounded + boxes instead of marking the whole line.
2008-10-24 Frank Lanitz <frank(at)frank(dot)uvena(dot)de>
Modified: trunk/doc/geany.html =================================================================== --- trunk/doc/geany.html 2008-10-25 18:56:38 UTC (rev 3154) +++ trunk/doc/geany.html 2008-10-25 18:57:00 UTC (rev 3155) @@ -1223,10 +1223,9 @@ <p>Find All In Document will show a list of matching lines in the current document in the Messages tab of the Message Window. <em>Find All In Session</em> does the same for all open documents.</p> -<p>Mark will set markers for all matching lines in the current document, -if the Markers margin is visible. If not, the background colour of -matching lines will be highlighted. Markers and highlighting can be -removed by selecting the Remove Markers command from the Document menu.</p> +<p>Mark will highlight all matches in the current document with a +coloured box. These markers can be removed by selecting the +Remove Markers command from the Document menu.</p> </div> <div class="section" id="change-font-in-search-dialog-text-fields"> <h4><a class="toc-backref" href="#id52">Change font in search dialog text fields</a></h4> @@ -4403,7 +4402,7 @@ <div class="footer"> <hr class="footer" /> <a class="reference external" href="geany.txt">View document source</a>. -Generated on: 2008-10-23 20:49 UTC. +Generated on: 2008-10-25 18:46 UTC. Generated by <a class="reference external" href="http://docutils.sourceforge.net/">Docutils</a> from <a class="reference external" href="http://docutils.sourceforge.net/rst.html">reStructuredText</a> source.
</div>
Modified: trunk/doc/geany.txt =================================================================== --- trunk/doc/geany.txt 2008-10-25 18:56:38 UTC (rev 3154) +++ trunk/doc/geany.txt 2008-10-25 18:57:00 UTC (rev 3155) @@ -917,10 +917,9 @@ current document in the Messages tab of the Message Window. *Find All In Session* does the same for all open documents.
-Mark will set markers for all matching lines in the current document, -if the Markers margin is visible. If not, the background colour of -matching lines will be highlighted. Markers and highlighting can be -removed by selecting the Remove Markers command from the Document menu. +Mark will highlight all matches in the current document with a +coloured box. These markers can be removed by selecting the +Remove Markers command from the Document menu.
Change font in search dialog text fields
Modified: trunk/src/callbacks.c =================================================================== --- trunk/src/callbacks.c 2008-10-25 18:56:38 UTC (rev 3154) +++ trunk/src/callbacks.c 2008-10-25 18:57:00 UTC (rev 3155) @@ -1557,7 +1557,7 @@ GeanyDocument *doc = document_get_current();
if (doc != NULL) - editor_clear_indicators(doc->editor); + editor_clear_indicators_full(doc->editor, GEANY_INDICATOR_ERROR); }
@@ -1917,6 +1917,7 @@
sci_marker_delete_all(doc->editor->sci, 0); /* delete the yellow tag marker */ sci_marker_delete_all(doc->editor->sci, 1); /* delete user markers */ + editor_clear_indicators_full(doc->editor, GEANY_INDICATOR_SEARCH); }
Modified: trunk/src/editor.c =================================================================== --- trunk/src/editor.c 2008-10-25 18:56:38 UTC (rev 3154) +++ trunk/src/editor.c 2008-10-25 18:57:00 UTC (rev 3155) @@ -3388,8 +3388,9 @@ * Error indicators (red squiggly underlines) and usual line markers are removed. * * @param editor The editor to operate on. + * @param indic The indicator number to clear, this is a value of @ref GeanyIndicator. **/ -void editor_clear_indicators(GeanyEditor *editor) +void editor_clear_indicators_full(GeanyEditor *editor, gint indic) { glong last_pos;
@@ -3397,21 +3398,36 @@
last_pos = sci_get_length(editor->sci); if (last_pos > 0) + { + sci_set_indicator(editor->sci, indic); sci_indicator_clear(editor->sci, 0, last_pos); + } +}
+ +/** + * Deletes all currently set indicators in the @a editor window. + * Error indicators (red squiggly underlines) and usual line markers are removed. + * + * @param editor The editor to operate on. + **/ +void editor_clear_indicators(GeanyEditor *editor) +{ + editor_clear_indicators_full(editor, GEANY_INDICATOR_ERROR); sci_marker_delete_all(editor->sci, 0); /* remove the yellow error line marker */ }
/** - * This is a convenience function for editor_set_indicator(). It sets an error indicator - * (red squiggly underline) on the whole given line. + * This is a convenience function for editor_set_indicator_full(). It sets an indicator + * on the whole given line. * Whitespace at the start and the end of the line is not marked. * * @param editor The editor to operate on. + * @param indic The indicator number to use, this is a value of @ref GeanyIndicator. * @param line The line number which should be marked. **/ -void editor_set_indicator_on_line(GeanyEditor *editor, gint line) +void editor_set_indicator_on_line_full(GeanyEditor *editor, gint indic, gint line) { gint start, end; guint i = 0, len; @@ -3440,11 +3456,25 @@ } g_free(linebuf);
- editor_set_indicator(editor, start + i, end); + editor_set_indicator_full(editor, indic, start + i, end); }
/** + * This is a convenience function for editor_set_indicator(). It sets an error indicator + * (red squiggly underline) on the whole given line. + * Whitespace at the start and the end of the line is not marked. + * + * @param editor The editor to operate on. + * @param line The line number which should be marked. + **/ +void editor_set_indicator_on_line(GeanyEditor *editor, gint line) +{ + editor_set_indicator_on_line_full(editor, GEANY_INDICATOR_ERROR, line); +} + + +/** * Sets an error indicator (red squiggly underline) on the range specified by @c start and @c end. * No error checking or whitespace removal is performed, this should be done by the calling * function if necessary. @@ -3455,10 +3485,26 @@ **/ void editor_set_indicator(GeanyEditor *editor, gint start, gint end) { + editor_set_indicator_full(editor, GEANY_INDICATOR_ERROR, start, end); +} + + +/** + * Sets an indicator on the range specified by @c start and @c end. + * No error checking or whitespace removal is performed, this should be done by the calling + * function if necessary. + * + * @param editor The editor to operate on. + * @param indic The indicator number to use, this is a value of @ref GeanyIndicator. + * @param start The starting position for the marker. + * @param end The ending position for the marker. + **/ +void editor_set_indicator_full(GeanyEditor *editor, gint indic, gint start, gint end) +{ if (editor == NULL || start >= end) return;
- sci_set_indicator(editor->sci, 0); + sci_set_indicator(editor->sci, indic); sci_indicator_fill(editor->sci, start, end - start); }
Modified: trunk/src/editor.h =================================================================== --- trunk/src/editor.h 2008-10-25 18:56:38 UTC (rev 3154) +++ trunk/src/editor.h 2008-10-25 18:57:00 UTC (rev 3155) @@ -50,6 +50,18 @@ } GeanyAutoIndent;
+/** Geany indicator types, can be used with Editor indicator functions to highlight + * text in the document. */ +typedef enum +{ + /** Indicator to highlight errors in the document text. This is a red squiggly underline. */ + GEANY_INDICATOR_ERROR = 0, + /** Indicator used to highlight search results in the document. This is a + * rounded box around the text. */ + /* start container indicator outside of lexer indicators (0..7), see Scintilla docs */ + GEANY_INDICATOR_SEARCH = 8 +} +GeanyIndicator;
/** Indentation prefs that might be different according to project or filetype. * Use @c editor_get_indent_prefs() to lookup the prefs for a particular document. */ @@ -206,6 +218,12 @@
void editor_set_font(GeanyEditor *editor, const gchar *font);
+void editor_set_indicator_on_line_full(GeanyEditor *editor, gint indic, gint line); + +void editor_set_indicator_full(GeanyEditor *editor, gint indic, gint start, gint end); + +void editor_clear_indicators_full(GeanyEditor *editor, gint indic); + const gchar *editor_get_eol_char_name(GeanyEditor *editor);
gint editor_get_eol_char_len(GeanyEditor *editor);
Modified: trunk/src/highlighting.c =================================================================== --- trunk/src/highlighting.c 2008-10-25 18:56:38 UTC (rev 3154) +++ trunk/src/highlighting.c 2008-10-25 18:57:00 UTC (rev 3155) @@ -461,10 +461,17 @@ common_style_set.styling[GCS_LINE_WRAP_VISUALS].background, 0); SSM(sci, SCI_SETWRAPSTARTINDENT, common_style_set.styling[GCS_LINE_WRAP_INDENT].foreground, 0);
- /* indicator settings */ - SSM(sci, SCI_INDICSETSTYLE, 0, INDIC_SQUIGGLE); - SSM(sci, SCI_INDICSETFORE, 0, invert(0x0000ff)); + /* Error indicator */ + SSM(sci, SCI_INDICSETSTYLE, GEANY_INDICATOR_ERROR, INDIC_SQUIGGLE); + SSM(sci, SCI_INDICSETFORE, GEANY_INDICATOR_ERROR, invert(rotate_rgb(0xff0000)));
+ /* Search indicator, used for 'Mark' matches */ + SSM(sci, SCI_INDICSETSTYLE, GEANY_INDICATOR_SEARCH, INDIC_ROUNDBOX); + /* TODO make this configurable, but we can't really use the foreground nor the background + * colours of GCS_MARKER_LINE since the drawn box is a little translucent and the default + * colours for GCS_MARKER_LINE are too bright. */ + SSM(sci, SCI_INDICSETFORE, GEANY_INDICATOR_SEARCH, invert(rotate_rgb(0x00ff00))); + /* define marker symbols * 0 -> line marker */ SSM(sci, SCI_MARKERDEFINE, 0, SC_MARK_SHORTARROW);
Modified: trunk/src/plugindata.h =================================================================== --- trunk/src/plugindata.h 2008-10-25 18:56:38 UTC (rev 3154) +++ trunk/src/plugindata.h 2008-10-25 18:57:00 UTC (rev 3155) @@ -41,7 +41,7 @@ enum { /** The Application Programming Interface (API) version, incremented * whenever any plugin data types are modified or appended to. */ - GEANY_API_VERSION = 103, + GEANY_API_VERSION = 104,
/** The Application Binary Interface (ABI) version, incremented whenever * existing fields in the plugin data types have to be changed or reordered. */ @@ -289,6 +289,7 @@ gboolean (*has_selection) (struct _ScintillaObject *sci); gint (*get_tab_width) (struct _ScintillaObject *sci); void (*indicator_clear) (struct _ScintillaObject *sci, gint start, gint end); + void (*set_indicator) (struct _ScintillaObject *sci, gint indic); } ScintillaFuncs;
@@ -477,6 +478,10 @@ struct _ScintillaObject* (*create_widget)(struct GeanyEditor *editor); /* Remember to convert any GeanyDocument or ScintillaObject pointers in any * appended functions to GeanyEditor pointers. */ + + void (*set_indicator_full) (struct GeanyEditor *editor, gint indic, gint start, gint end); + void (*set_indicator_on_line_full) (struct GeanyEditor *editor, gint indic, gint line); + void (*clear_indicators_full) (struct GeanyEditor *editor, gint indic); } EditorFuncs;
Modified: trunk/src/plugins.c =================================================================== --- trunk/src/plugins.c 2008-10-25 18:56:38 UTC (rev 3154) +++ trunk/src/plugins.c 2008-10-25 18:57:00 UTC (rev 3155) @@ -134,7 +134,10 @@ &editor_set_indicator_on_line, &editor_clear_indicators, &editor_get_indent_prefs, - &editor_create_widget + &editor_create_widget, + &editor_set_indicator_full, + &editor_set_indicator_on_line_full, + &editor_clear_indicators_full, };
static ScintillaFuncs sci_funcs = { @@ -173,7 +176,8 @@ &sci_get_current_line, &sci_has_selection, &sci_get_tab_width, - &sci_indicator_clear + &sci_indicator_clear, + &sci_set_indicator };
static TemplateFuncs template_funcs = {
Modified: trunk/src/sciwrappers.c =================================================================== --- trunk/src/sciwrappers.c 2008-10-25 18:56:38 UTC (rev 3154) +++ trunk/src/sciwrappers.c 2008-10-25 18:57:00 UTC (rev 3155) @@ -972,6 +972,15 @@ return SSM(sci, SCI_GETINDICATORCURRENT, 0, 0); }
+/** + * Set the current indicator. This is necessary to define an indicator for a range of text or + * clearing indicators for a range of text. + * + * @param sci Scintilla widget. + * @param indic The indicator number to set. + * + * @see sci_indicator_clear + **/ void sci_set_indicator(ScintillaObject *sci, gint indic) { SSM(sci, SCI_SETINDICATORCURRENT, indic, 0); @@ -982,10 +991,16 @@ SSM(sci, SCI_INDICATORFILLRANGE, pos, len); }
-/** Clear a range of text from any set indicators. Starting at @a pos, @a len characters long. - * @param sci Scintilla widget. - * @param pos Starting position. - * @param len Length. */ +/** + * Clear a range of text from the currently set indicator. + * Starting at @a pos, @a len characters long. + * In order to make this function properly, you need to set the current indicator before with + * @ref sci_set_indicator(). + * + * @param sci Scintilla widget. + * @param pos Starting position. + * @param len Length. + **/ void sci_indicator_clear(ScintillaObject *sci, gint pos, gint len) { SSM(sci, SCI_INDICATORCLEARRANGE, pos, len);
Modified: trunk/src/search.c =================================================================== --- trunk/src/search.c 2008-10-25 18:56:38 UTC (rev 3154) +++ trunk/src/search.c 2008-10-25 18:57:00 UTC (rev 3155) @@ -801,7 +801,7 @@
static gint search_mark(GeanyDocument *doc, const gchar *search_text, gint flags) { - gint pos, line, count = 0; + gint pos, end_pos, count = 0; struct TextToFind ttf;
g_return_val_if_fail(doc != NULL, 0); @@ -809,13 +809,13 @@ ttf.chrg.cpMin = 0; ttf.chrg.cpMax = sci_get_length(doc->editor->sci); ttf.lpstrText = (gchar *)search_text; - while (1) + while (TRUE) { pos = sci_find_text(doc->editor->sci, flags, &ttf); if (pos == -1) break;
- line = sci_get_line_from_position(doc->editor->sci, pos); - sci_set_marker_at_line(doc->editor->sci, line, TRUE, 1); + end_pos = scintilla_send_message(doc->editor->sci, SCI_WORDENDPOSITION, pos, TRUE); + editor_set_indicator_full(doc->editor, GEANY_INDICATOR_SEARCH, pos, end_pos);
ttf.chrg.cpMin = ttf.chrgText.cpMax + 1; count++;
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.