SF.net SVN: geany: [1672] trunk

ntrel at users.sourceforge.net ntrel at xxxxx
Sat Jul 7 11:33:33 UTC 2007


Revision: 1672
          http://svn.sourceforge.net/geany/?rev=1672&view=rev
Author:   ntrel
Date:     2007-07-07 04:33:32 -0700 (Sat, 07 Jul 2007)

Log Message:
-----------
Make Scintilla's move to word commands use the word end boundaries
when moving to the right (like e.g. GtkEntry).
Treat punctuation chars as whitespace.
Add filetypes.common setting: whitespace_chars.

Modified Paths:
--------------
    trunk/ChangeLog
    trunk/data/filetypes.common
    trunk/doc/geany.docbook
    trunk/scintilla/ScintillaGTK.cxx
    trunk/src/highlighting.c

Modified: trunk/ChangeLog
===================================================================
--- trunk/ChangeLog	2007-07-06 12:37:07 UTC (rev 1671)
+++ trunk/ChangeLog	2007-07-07 11:33:32 UTC (rev 1672)
@@ -1,3 +1,13 @@
+2007-07-07  Nick Treleaven  <nick.treleaven at btinternet.com>
+
+ * scintilla/ScintillaGTK.cxx, src/highlighting.c, doc/geany.docbook,
+   data/filetypes.common:
+   Make Scintilla's move to word commands use the word end boundaries
+   when moving to the right (like e.g. GtkEntry).
+   Treat punctuation chars as whitespace.
+   Add filetypes.common setting: whitespace_chars.
+
+
 2007-07-06  Enrico Tröger  <enrico.troeger at uvena.de>
 
  * doc/geany.docbook, src/editor.c, src/editor.h, src/keybindings.c,

Modified: trunk/data/filetypes.common
===================================================================
--- trunk/data/filetypes.common	2007-07-06 12:37:07 UTC (rev 1671)
+++ trunk/data/filetypes.common	2007-07-07 11:33:32 UTC (rev 1672)
@@ -47,3 +47,9 @@
 
 # only first argument is interpreted, sets whether all defined colours should be inverted
 invert_all=0;0;false;false
+
+
+[settings]
+# which characters should be skipped when moving (or included when deleting) to word boundaries
+# should always include space and tab (\s\t)
+whitespace_chars=\s\t!\"#$%&'()*+,-./:;<=>?@[\\]^`{|}~

Modified: trunk/doc/geany.docbook
===================================================================
--- trunk/doc/geany.docbook	2007-07-06 12:37:07 UTC (rev 1671)
+++ trunk/doc/geany.docbook	2007-07-07 11:33:32 UTC (rev 1672)
@@ -2399,6 +2399,17 @@
 									</entry>
 									<entry>invert_all=0;0;false;false</entry>
 								</row>
+								<row>
+									<entry>whitespace_chars</entry>
+									<entry>Characters to treat as whitespace.
+										These characters are ignored when moving, selecting and deleting
+										across word boundaries (see <xref linkend="scikeybinding"/>).
+										<para>This should include space (\s) and tab (\t).
+										</para>
+									</entry>
+									<entry>whitespace_chars=\s\t!\"#$%&'()*+,-./:;<=>?@[\\]^`{|}~
+									</entry>
+								</row>
 							</tbody>
 						</tgroup>
 					</table>

Modified: trunk/scintilla/ScintillaGTK.cxx
===================================================================
--- trunk/scintilla/ScintillaGTK.cxx	2007-07-06 12:37:07 UTC (rev 1671)
+++ trunk/scintilla/ScintillaGTK.cxx	2007-07-07 11:33:32 UTC (rev 1672)
@@ -285,6 +285,9 @@
 
 	static sptr_t DirectFunction(ScintillaGTK *sciThis,
 	                             unsigned int iMessage, uptr_t wParam, sptr_t lParam);
+
+protected:
+	virtual int KeyCommand(unsigned int iMessage);
 };
 
 enum {
@@ -2720,3 +2723,32 @@
 void scintilla_release_resources(void) {
 	Platform_Finalise();
 }
+
+int ScintillaGTK::KeyCommand(unsigned int iMessage) {
+	switch (iMessage) {
+	/* Try to act more like a GtkWidget, e.g. GtkEntry.
+	 * The container app should also call SCI_SETWHITESPACECHARS to include punctuation
+	 * chars as whitespace. */
+	case SCI_WORDRIGHT:
+		MovePositionTo(MovePositionSoVisible(pdoc->NextWordEnd(currentPos, 1), 1));
+		SetLastXChosen();
+		break;
+	case SCI_WORDRIGHTEXTEND:
+		MovePositionTo(MovePositionSoVisible(pdoc->NextWordEnd(currentPos, 1), 1), selStream);
+		SetLastXChosen();
+		break;
+	case SCI_DELWORDRIGHT: {
+			int endWord = pdoc->NextWordEnd(currentPos, 1);
+			pdoc->DeleteChars(currentPos, endWord - currentPos);
+		}
+		break;
+	default:
+		return ScintillaBase::KeyCommand(iMessage);
+	}
+	/* Mimic what ScintillaBase::KeyCommand would do as we're overriding it. */
+	if (ac.Active())
+		ac.Cancel();
+	if (ct.inCallTipMode)
+		ct.CallTipCancel();
+	return 0;
+}

Modified: trunk/src/highlighting.c
===================================================================
--- trunk/src/highlighting.c	2007-07-06 12:37:07 UTC (rev 1671)
+++ trunk/src/highlighting.c	2007-07-07 11:33:32 UTC (rev 1672)
@@ -36,8 +36,14 @@
 #include "symbols.h"
 
 
+/* Whitespace has to be set after setting wordchars. */
+#define GEANY_WHITESPACE_CHARS " \t" "!\"#$%&'()*+,-./:;<=>?@[\\]^`{|}~"
+
+static gchar *whitespace_chars;
+
 static void styleset_markup(ScintillaObject *sci, gboolean set_keywords);
 
+
 typedef struct
 {
 	gint	foreground;
@@ -355,6 +361,27 @@
 }
 
 
+static gchar*
+get_keyfile_whitespace_chars(GKeyFile *config, GKeyFile *configh)
+{
+	gchar *result;
+
+	if (config == NULL || configh == NULL)
+	{
+		result = NULL;
+	}
+	else
+	{
+		result = g_key_file_get_string(configh, "settings", "whitespace_chars", NULL);
+		if (result == NULL)
+			result = g_key_file_get_string(config, "settings", "whitespace_chars", NULL);
+	}
+	if (result == NULL)
+		result = g_strdup(GEANY_WHITESPACE_CHARS);
+	return result;
+}
+
+
 static void styleset_common_init(void)
 {
 	GKeyFile *config;
@@ -409,6 +436,8 @@
 	}
 
 	get_keyfile_wordchars(config, config_home, &common_style_set.wordchars);
+	whitespace_chars = get_keyfile_whitespace_chars(config, config_home);
+
 	filetypes_get_config(config, config_home, GEANY_FILETYPES_ALL);
 
 	g_key_file_free(config);
@@ -698,6 +727,7 @@
 	if (style_sets[GEANY_FILETYPES_C].styling == NULL) styleset_c_init();
 
 	SSM(sci, SCI_SETWORDCHARS, 0, (sptr_t) style_sets[GEANY_FILETYPES_C].wordchars);
+	SSM(sci, SCI_SETWHITESPACECHARS, 0, (sptr_t) whitespace_chars);
 	SSM(sci, SCI_AUTOCSETMAXHEIGHT, app->autocompletion_max_height, 0);
 
 	SSM(sci, SCI_SETLEXER, SCLEX_CPP, 0);
@@ -757,6 +787,7 @@
 	if (style_sets[GEANY_FILETYPES_CPP].styling == NULL) styleset_cpp_init();
 
 	SSM(sci, SCI_SETWORDCHARS, 0, (sptr_t) style_sets[GEANY_FILETYPES_CPP].wordchars);
+	SSM(sci, SCI_SETWHITESPACECHARS, 0, (sptr_t) whitespace_chars);
 	SSM(sci, SCI_AUTOCSETMAXHEIGHT, app->autocompletion_max_height, 0);
 
 	SSM(sci, SCI_SETLEXER, SCLEX_CPP, 0);
@@ -824,6 +855,7 @@
 	if (style_sets[ft_id].styling == NULL) styleset_cs_init();
 
 	SSM(sci, SCI_SETWORDCHARS, 0, (sptr_t) style_sets[ft_id].wordchars);
+	SSM(sci, SCI_SETWHITESPACECHARS, 0, (sptr_t) whitespace_chars);
 	SSM(sci, SCI_AUTOCSETMAXHEIGHT, app->autocompletion_max_height, 0);
 
 	SSM(sci, SCI_SETLEXER, SCLEX_CPP, 0);
@@ -887,6 +919,7 @@
 	if (style_sets[GEANY_FILETYPES_PASCAL].styling == NULL) styleset_pascal_init();
 
 	SSM (sci, SCI_SETWORDCHARS, 0, (sptr_t) style_sets[GEANY_FILETYPES_PASCAL].wordchars);
+	SSM(sci, SCI_SETWHITESPACECHARS, 0, (sptr_t) whitespace_chars);
 	SSM(sci, SCI_AUTOCSETMAXHEIGHT, app->autocompletion_max_height, 0);
 
 	SSM (sci, SCI_SETLEXER, SCLEX_PASCAL, 0);
@@ -947,6 +980,7 @@
 
 	SSM (sci, SCI_SETLEXER, SCLEX_MAKEFILE, 0);
 	SSM (sci, SCI_SETWORDCHARS, 0, (sptr_t) style_sets[GEANY_FILETYPES_MAKE].wordchars);
+	SSM(sci, SCI_SETWHITESPACECHARS, 0, (sptr_t) whitespace_chars);
 
 	set_sci_style(sci, STYLE_DEFAULT, GEANY_FILETYPES_MAKE, 0);
 	set_sci_style(sci, SCE_MAKE_DEFAULT, GEANY_FILETYPES_MAKE, 0);
@@ -996,6 +1030,7 @@
 	SSM (sci, SCI_SETLEXER, SCLEX_DIFF, 0);
 
 	SSM(sci, SCI_SETWORDCHARS, 0, (sptr_t) style_sets[GEANY_FILETYPES_DIFF].wordchars);
+	SSM(sci, SCI_SETWHITESPACECHARS, 0, (sptr_t) whitespace_chars);
 
 	set_sci_style(sci, STYLE_DEFAULT, GEANY_FILETYPES_DIFF, 0);
 	set_sci_style(sci, SCE_DIFF_DEFAULT, GEANY_FILETYPES_DIFF, 0);
@@ -1046,6 +1081,7 @@
 
 	SSM(sci, SCI_SETKEYWORDS, 0, (sptr_t) style_sets[GEANY_FILETYPES_LATEX].keywords[0]);
 	SSM(sci, SCI_SETWORDCHARS, 0, (sptr_t) style_sets[GEANY_FILETYPES_LATEX].wordchars);
+	SSM(sci, SCI_SETWHITESPACECHARS, 0, (sptr_t) whitespace_chars);
 
 	set_sci_style(sci, STYLE_DEFAULT, GEANY_FILETYPES_LATEX, 0);
 	set_sci_style(sci, SCE_L_DEFAULT, GEANY_FILETYPES_LATEX, 0);
@@ -1092,6 +1128,7 @@
 	styleset_markup(sci, TRUE);
 
 	SSM(sci, SCI_SETWORDCHARS, 0, (sptr_t) style_sets[GEANY_FILETYPES_PHP].wordchars);
+	SSM(sci, SCI_SETWHITESPACECHARS, 0, (sptr_t) whitespace_chars);
 }
 
 
@@ -1130,6 +1167,7 @@
 	styleset_markup(sci, TRUE);
 
 	SSM(sci, SCI_SETWORDCHARS, 0, (sptr_t) style_sets[GEANY_FILETYPES_HTML].wordchars);
+	SSM(sci, SCI_SETWHITESPACECHARS, 0, (sptr_t) whitespace_chars);
 }
 
 
@@ -1483,6 +1521,7 @@
 	SSM (sci, SCI_SETLEXER, SCLEX_CPP, 0);
 
 	SSM (sci, SCI_SETWORDCHARS, 0, (sptr_t) style_sets[GEANY_FILETYPES_JAVA].wordchars);
+	SSM(sci, SCI_SETWHITESPACECHARS, 0, (sptr_t) whitespace_chars);
 	SSM(sci, SCI_AUTOCSETMAXHEIGHT, app->autocompletion_max_height, 0);
 
 	SSM (sci, SCI_SETCONTROLCHARSYMBOL, 32, 0);
@@ -1587,6 +1626,7 @@
 	SSM(sci, SCI_SETPROPERTY, (sptr_t) "styling.within.preprocessor", (sptr_t) "1");
 
 	SSM(sci, SCI_SETWORDCHARS, 0, (sptr_t) style_sets[GEANY_FILETYPES_PERL].wordchars);
+	SSM(sci, SCI_SETWHITESPACECHARS, 0, (sptr_t) whitespace_chars);
 	SSM(sci, SCI_AUTOCSETMAXHEIGHT, app->autocompletion_max_height, 0);
 
 	SSM(sci, SCI_SETKEYWORDS, 0, (sptr_t) style_sets[GEANY_FILETYPES_PERL].keywords[0]);
@@ -1841,6 +1881,7 @@
 	SSM (sci, SCI_SETLEXER, SCLEX_BASH, 0);
 
 	SSM (sci, SCI_SETWORDCHARS, 0, (sptr_t) style_sets[GEANY_FILETYPES_SH].wordchars);
+	SSM(sci, SCI_SETWHITESPACECHARS, 0, (sptr_t) whitespace_chars);
 	SSM(sci, SCI_AUTOCSETMAXHEIGHT, app->autocompletion_max_height, 0);
 
 	SSM (sci, SCI_SETCONTROLCHARSYMBOL, 32, 0);
@@ -1874,6 +1915,7 @@
 	styleset_markup(sci, FALSE);
 
 	SSM(sci, SCI_SETWORDCHARS, 0, (sptr_t) style_sets[GEANY_FILETYPES_XML].wordchars);
+	SSM(sci, SCI_SETWHITESPACECHARS, 0, (sptr_t) whitespace_chars);
 }
 
 
@@ -1997,6 +2039,7 @@
 	SSM(sci, SCI_SETKEYWORDS, 5, (sptr_t) style_sets[GEANY_FILETYPES_DOCBOOK].keywords[1]);
 
 	SSM(sci, SCI_SETWORDCHARS, 0, (sptr_t) style_sets[GEANY_FILETYPES_DOCBOOK].wordchars);
+	SSM(sci, SCI_SETWHITESPACECHARS, 0, (sptr_t) whitespace_chars);
 	SSM(sci, SCI_AUTOCSETMAXHEIGHT, app->autocompletion_max_height, 0);
 
 	// Unknown tags and attributes are highlighed in red.
@@ -2053,6 +2096,7 @@
 	styleset_common(sci, 5, ft_id);
 
 	SSM(sci, SCI_SETWORDCHARS, 0, (sptr_t) common_style_set.wordchars);
+	SSM(sci, SCI_SETWHITESPACECHARS, 0, (sptr_t) whitespace_chars);
 }
 
 
@@ -2127,6 +2171,7 @@
 	if (style_sets[GEANY_FILETYPES_CSS].styling == NULL) styleset_css_init();
 
 	SSM(sci, SCI_SETWORDCHARS, 0, (sptr_t) style_sets[GEANY_FILETYPES_CSS].wordchars);
+	SSM(sci, SCI_SETWHITESPACECHARS, 0, (sptr_t) whitespace_chars);
 	SSM(sci, SCI_AUTOCSETMAXHEIGHT, app->autocompletion_max_height, 0);
 
 	SSM(sci, SCI_SETKEYWORDS, 0, (sptr_t) style_sets[GEANY_FILETYPES_CSS].keywords[0]);
@@ -2191,6 +2236,7 @@
 	SSM (sci, SCI_SETLEXER, SCLEX_PROPERTIES, 0);
 
 	SSM (sci, SCI_SETWORDCHARS, 0, (sptr_t) style_sets[GEANY_FILETYPES_CONF].wordchars);
+	SSM(sci, SCI_SETWHITESPACECHARS, 0, (sptr_t) whitespace_chars);
 	SSM(sci, SCI_AUTOCSETMAXHEIGHT, app->autocompletion_max_height, 0);
 
 	SSM (sci, SCI_SETCONTROLCHARSYMBOL, 32, 0);
@@ -2252,6 +2298,7 @@
 	if (style_sets[GEANY_FILETYPES_ASM].styling == NULL) styleset_asm_init();
 
 	SSM(sci, SCI_SETWORDCHARS, 0, (sptr_t) style_sets[GEANY_FILETYPES_ASM].wordchars);
+	SSM(sci, SCI_SETWHITESPACECHARS, 0, (sptr_t) whitespace_chars);
 	SSM(sci, SCI_AUTOCSETMAXHEIGHT, app->autocompletion_max_height, 0);
 
 	SSM(sci, SCI_SETLEXER, SCLEX_ASM, 0);
@@ -2328,6 +2375,7 @@
 	if (style_sets[GEANY_FILETYPES_FORTRAN].styling == NULL) styleset_fortran_init();
 
 	SSM(sci, SCI_SETWORDCHARS, 0, (sptr_t) style_sets[GEANY_FILETYPES_FORTRAN].wordchars);
+	SSM(sci, SCI_SETWHITESPACECHARS, 0, (sptr_t) whitespace_chars);
 	SSM(sci, SCI_AUTOCSETMAXHEIGHT, app->autocompletion_max_height, 0);
 
 	SSM(sci, SCI_SETLEXER, SCLEX_F77, 0);
@@ -2428,6 +2476,7 @@
 	if (style_sets[GEANY_FILETYPES_SQL].styling == NULL) styleset_sql_init();
 
 	SSM(sci, SCI_SETWORDCHARS, 0, (sptr_t) style_sets[GEANY_FILETYPES_SQL].wordchars);
+	SSM(sci, SCI_SETWHITESPACECHARS, 0, (sptr_t) whitespace_chars);
 	SSM(sci, SCI_AUTOCSETMAXHEIGHT, app->autocompletion_max_height, 0);
 
 	SSM(sci, SCI_SETLEXER, SCLEX_SQL, 0);
@@ -2501,6 +2550,7 @@
 	if (style_sets[GEANY_FILETYPES_HASKELL].styling == NULL) styleset_haskell_init();
 
 	SSM(sci, SCI_SETWORDCHARS, 0, (sptr_t) style_sets[GEANY_FILETYPES_HASKELL].wordchars);
+	SSM(sci, SCI_SETWHITESPACECHARS, 0, (sptr_t) whitespace_chars);
 	SSM(sci, SCI_AUTOCSETMAXHEIGHT, app->autocompletion_max_height, 0);
 
 	SSM(sci, SCI_SETLEXER, SCLEX_HASKELL, 0);
@@ -2578,6 +2628,7 @@
 	if (style_sets[GEANY_FILETYPES_CAML].styling == NULL) styleset_caml_init();
 
 	SSM(sci, SCI_SETWORDCHARS, 0, (sptr_t) style_sets[GEANY_FILETYPES_CAML].wordchars);
+	SSM(sci, SCI_SETWHITESPACECHARS, 0, (sptr_t) whitespace_chars);
 	SSM(sci, SCI_AUTOCSETMAXHEIGHT, app->autocompletion_max_height, 0);
 
 	SSM(sci, SCI_SETLEXER, SCLEX_CAML, 0);
@@ -2652,6 +2703,7 @@
 	SSM (sci, SCI_SETLEXER, SCLEX_OMS, 0);
 
 	SSM (sci, SCI_SETWORDCHARS, 0, (sptr_t) style_sets[GEANY_FILETYPES_OMS].wordchars);
+	SSM(sci, SCI_SETWHITESPACECHARS, 0, (sptr_t) whitespace_chars);
 	SSM(sci, SCI_AUTOCSETMAXHEIGHT, app->autocompletion_max_height, 0);
 
 	SSM (sci, SCI_SETCONTROLCHARSYMBOL, 32, 0);
@@ -2723,6 +2775,7 @@
 	if (style_sets[GEANY_FILETYPES_TCL].styling == NULL) styleset_tcl_init();
 
 	SSM(sci, SCI_SETWORDCHARS, 0, (sptr_t) style_sets[GEANY_FILETYPES_TCL].wordchars);
+	SSM(sci, SCI_SETWHITESPACECHARS, 0, (sptr_t) whitespace_chars);
 	SSM(sci, SCI_AUTOCSETMAXHEIGHT, app->autocompletion_max_height, 0);
 
 	SSM(sci, SCI_SETLEXER, SCLEX_TCL, 0);
@@ -2815,6 +2868,7 @@
 	if (style_sets[GEANY_FILETYPES_D].styling == NULL) styleset_d_init();
 
 	SSM(sci, SCI_SETWORDCHARS, 0, (sptr_t) style_sets[GEANY_FILETYPES_D].wordchars);
+	SSM(sci, SCI_SETWHITESPACECHARS, 0, (sptr_t) whitespace_chars);
 	SSM(sci, SCI_AUTOCSETMAXHEIGHT, app->autocompletion_max_height, 0);
 
 	SSM(sci, SCI_SETLEXER, SCLEX_D, 0);
@@ -2879,6 +2933,7 @@
 	if (style_sets[GEANY_FILETYPES_FERITE].styling == NULL) styleset_ferite_init();
 
 	SSM(sci, SCI_SETWORDCHARS, 0, (sptr_t) style_sets[GEANY_FILETYPES_FERITE].wordchars);
+	SSM(sci, SCI_SETWHITESPACECHARS, 0, (sptr_t) whitespace_chars);
 	SSM(sci, SCI_AUTOCSETMAXHEIGHT, app->autocompletion_max_height, 0);
 
 	SSM(sci, SCI_SETLEXER, SCLEX_CPP, 0);
@@ -2966,6 +3021,7 @@
 	if (style_sets[GEANY_FILETYPES_VHDL].styling == NULL) styleset_vhdl_init();
 
 	SSM(sci, SCI_SETWORDCHARS, 0, (sptr_t) style_sets[GEANY_FILETYPES_VHDL].wordchars);
+	SSM(sci, SCI_SETWHITESPACECHARS, 0, (sptr_t) whitespace_chars);
 	SSM(sci, SCI_AUTOCSETMAXHEIGHT, app->autocompletion_max_height, 0);
 
 	SSM(sci, SCI_SETLEXER, SCLEX_VHDL, 0);
@@ -3033,6 +3089,7 @@
 	if (style_sets[GEANY_FILETYPES_JS].styling == NULL) styleset_js_init();
 
 	SSM(sci, SCI_SETWORDCHARS, 0, (sptr_t) style_sets[GEANY_FILETYPES_JS].wordchars);
+	SSM(sci, SCI_SETWHITESPACECHARS, 0, (sptr_t) whitespace_chars);
 	SSM(sci, SCI_AUTOCSETMAXHEIGHT, app->autocompletion_max_height, 0);
 
 	SSM(sci, SCI_SETLEXER, SCLEX_CPP, 0);
@@ -3130,6 +3187,7 @@
 	if (style_sets[GEANY_FILETYPES_LUA].styling == NULL) styleset_lua_init();
 
 	SSM(sci, SCI_SETWORDCHARS, 0, (sptr_t) style_sets[GEANY_FILETYPES_LUA].wordchars);
+	SSM(sci, SCI_SETWHITESPACECHARS, 0, (sptr_t) whitespace_chars);
 	SSM(sci, SCI_AUTOCSETMAXHEIGHT, app->autocompletion_max_height, 0);
 
 	SSM(sci, SCI_SETLEXER, SCLEX_LUA, 0);
@@ -3232,6 +3290,7 @@
 	if (style_sets[GEANY_FILETYPES_BASIC].styling == NULL) styleset_basic_init();
 
 	SSM(sci, SCI_SETWORDCHARS, 0, (sptr_t) style_sets[GEANY_FILETYPES_BASIC].wordchars);
+	SSM(sci, SCI_SETWHITESPACECHARS, 0, (sptr_t) whitespace_chars);
 	SSM(sci, SCI_AUTOCSETMAXHEIGHT, app->autocompletion_max_height, 0);
 
 	SSM(sci, SCI_SETLEXER, SCLEX_FREEBASIC, 0);


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