SF.net SVN: geany: [1823] trunk
ntrel at users.sourceforge.net
ntrel at xxxxx
Fri Aug 24 16:20:33 UTC 2007
Revision: 1823
http://geany.svn.sourceforge.net/geany/?rev=1823&view=rev
Author: ntrel
Date: 2007-08-24 09:20:33 -0700 (Fri, 24 Aug 2007)
Log Message:
-----------
Move file-related fields from EditorPrefs -> GeanyPrefs.
Rename line_breaking -> line_wrapping for EditorPrefs and document.
Modified Paths:
--------------
trunk/ChangeLog
trunk/src/callbacks.c
trunk/src/document.c
trunk/src/document.h
trunk/src/editor.h
trunk/src/keyfile.c
trunk/src/main.c
trunk/src/plugindata.h
trunk/src/prefs.c
trunk/src/prefs.h
trunk/src/ui_utils.c
Modified: trunk/ChangeLog
===================================================================
--- trunk/ChangeLog 2007-08-24 15:44:07 UTC (rev 1822)
+++ trunk/ChangeLog 2007-08-24 16:20:33 UTC (rev 1823)
@@ -11,6 +11,11 @@
* src/keyfile.c:
Refactor configuration_save() to group new struct settings together.
Move 'Enable plugin support' keyfile pref to the 'geany' group.
+ * src/prefs.c, src/prefs.h, src/plugindata.h, src/callbacks.c,
+ src/keyfile.c, src/document.c, src/document.h, src/main.c,
+ src/editor.h, src/ui_utils.c:
+ Move file-related fields from EditorPrefs -> GeanyPrefs.
+ Rename line_breaking -> line_wrapping for EditorPrefs and document.
2007-08-23 Enrico Tröger <enrico(dot)troeger(at)uvena(dot)de>
Modified: trunk/src/callbacks.c
===================================================================
--- trunk/src/callbacks.c 2007-08-24 15:44:07 UTC (rev 1822)
+++ trunk/src/callbacks.c 2007-08-24 16:20:33 UTC (rev 1823)
@@ -978,8 +978,8 @@
{
gint idx = document_get_cur_idx();
if (idx == -1 || ! doc_list[idx].is_valid) return;
- doc_list[idx].line_breaking = ! doc_list[idx].line_breaking;
- sci_set_lines_wrapped(doc_list[idx].sci, doc_list[idx].line_breaking);
+ doc_list[idx].line_wrapping = ! doc_list[idx].line_wrapping;
+ sci_set_lines_wrapped(doc_list[idx].sci, doc_list[idx].line_wrapping);
}
}
Modified: trunk/src/document.c
===================================================================
--- trunk/src/document.c 2007-08-24 15:44:07 UTC (rev 1822)
+++ trunk/src/document.c 2007-08-24 16:20:33 UTC (rev 1823)
@@ -233,7 +233,7 @@
new_doc->is_valid = FALSE;
new_doc->has_tags = FALSE;
new_doc->auto_indent = (editor_prefs.indent_mode != INDENT_NONE);
- new_doc->line_breaking = editor_prefs.line_breaking;
+ new_doc->line_wrapping = editor_prefs.line_wrapping;
new_doc->readonly = FALSE;
new_doc->tag_store = NULL;
new_doc->tag_tree = NULL;
@@ -331,7 +331,7 @@
sci_set_tab_indents(sci, editor_prefs.use_tab_to_indent);
sci_set_symbol_margin(sci, editor_prefs.show_markers_margin);
sci_set_line_numbers(sci, editor_prefs.show_linenumber_margin, 0);
- sci_set_lines_wrapped(sci, editor_prefs.line_breaking);
+ sci_set_lines_wrapped(sci, editor_prefs.line_wrapping);
sci_set_scrollbar_mode(sci, editor_prefs.show_scrollbars);
sci_set_caret_policy_x(sci, CARET_JUMPS | CARET_EVEN, 0);
//sci_set_caret_policy_y(sci, CARET_JUMPS | CARET_EVEN, 0);
@@ -364,7 +364,7 @@
this->changed = FALSE;
this->last_check = time(NULL);
this->readonly = FALSE;
- this->line_breaking = editor_prefs.line_breaking;
+ this->line_wrapping = editor_prefs.line_wrapping;
this->auto_indent = (editor_prefs.indent_mode != INDENT_NONE);
this->has_tags = FALSE;
@@ -466,7 +466,7 @@
sci_set_undo_collection(doc_list[idx].sci, TRUE);
sci_empty_undo_buffer(doc_list[idx].sci);
- doc_list[idx].encoding = g_strdup(encodings[editor_prefs.default_new_encoding].charset);
+ doc_list[idx].encoding = g_strdup(encodings[prefs.default_new_encoding].charset);
// store the opened encoding for undo/redo
store_saved_encoding(idx);
@@ -821,8 +821,8 @@
}
// if default encoding for opening files is set, use it if no forced encoding is set
- if (editor_prefs.default_open_encoding >= 0 && forced_enc == NULL)
- forced_enc = encodings[editor_prefs.default_open_encoding].charset;
+ if (prefs.default_open_encoding >= 0 && forced_enc == NULL)
+ forced_enc = encodings[prefs.default_open_encoding].charset;
if (! load_text_file(locale_filename, utf8_filename, &filedata, forced_enc))
{
@@ -1025,11 +1025,11 @@
}
// replaces tabs by spaces
- if (editor_prefs.replace_tabs) document_replace_tabs(idx);
+ if (prefs.replace_tabs) document_replace_tabs(idx);
// strip trailing spaces
- if (editor_prefs.trail_space) document_strip_trailing_spaces(idx);
+ if (prefs.strip_trailing_spaces) document_strip_trailing_spaces(idx);
// ensure the file has a newline at the end
- if (editor_prefs.new_line) document_ensure_final_newline(idx);
+ if (prefs.final_new_line) document_ensure_final_newline(idx);
// ensure there are really the same EOL chars
sci_convert_eols(doc_list[idx].sci, sci_get_eol_mode(doc_list[idx].sci));
@@ -2384,11 +2384,11 @@
sci_set_text(doc_list[idx].sci, data);
// copy file properties
- doc_list[idx].line_breaking = doc_list[old_idx].line_breaking;
+ doc_list[idx].line_wrapping = doc_list[old_idx].line_wrapping;
doc_list[idx].readonly = doc_list[old_idx].readonly;
doc_list[idx].has_bom = doc_list[old_idx].has_bom;
document_set_encoding(idx, doc_list[old_idx].encoding);
- sci_set_lines_wrapped(doc_list[idx].sci, doc_list[idx].line_breaking);
+ sci_set_lines_wrapped(doc_list[idx].sci, doc_list[idx].line_wrapping);
sci_set_readonly(doc_list[idx].sci, doc_list[idx].readonly);
sci_set_undo_collection(doc_list[idx].sci, TRUE);
Modified: trunk/src/document.h
===================================================================
--- trunk/src/document.h 2007-08-24 15:44:07 UTC (rev 1822)
+++ trunk/src/document.h 2007-08-24 16:20:33 UTC (rev 1823)
@@ -55,7 +55,7 @@
GtkTreeIter iter;
gboolean readonly;
gboolean changed;
- gboolean line_breaking;
+ gboolean line_wrapping;
gboolean auto_indent;
gfloat scroll_percent; // % to scroll view by on paint, if positive.
time_t last_check; // to remember the last disk check
Modified: trunk/src/editor.h
===================================================================
--- trunk/src/editor.h 2007-08-24 15:44:07 UTC (rev 1822)
+++ trunk/src/editor.h 2007-08-24 16:20:33 UTC (rev 1823)
@@ -39,40 +39,38 @@
} IndentMode;
/* These are the default prefs when creating a new editor window.
- * Some of these can be overridden per document. */
+ * Some of these can be overridden per document.
+ * Remember to increment abi_version in plugindata.h when changing items. */
typedef struct EditorPrefs
{
- gboolean line_breaking;
- IndentMode indent_mode;
- gboolean use_indicators;
+ // display
gboolean show_white_space;
gboolean show_indent_guide;
gboolean show_line_endings;
- gboolean auto_complete_symbols;
- gboolean auto_close_xml_tags;
- gboolean auto_complete_constructs;
+ gint long_line_type;
+ gint long_line_column;
+ gchar *long_line_color;
+ gboolean show_markers_margin; // view menu
+ gboolean show_linenumber_margin; // view menu
+ gboolean show_scrollbars; // hidden pref
+
+ // behaviour
+ gboolean line_wrapping;
+ gboolean use_indicators;
gboolean folding;
gboolean unfold_all_children;
- gboolean show_scrollbars;
gint tab_width;
- gint caret_blink_time;
gboolean use_tabs;
- gint default_new_encoding;
- gint default_open_encoding;
- gboolean new_line;
- gboolean replace_tabs;
- gboolean trail_space;
+ gboolean use_tab_to_indent; // hidden pref
+ IndentMode indent_mode;
gboolean disable_dnd;
gboolean smart_home_key;
- GHashTable *auto_completions;
- gboolean brace_match_ltgt; // whether to highlight < and > chars
- gboolean use_tab_to_indent;
+ gboolean auto_complete_symbols;
+ gboolean auto_close_xml_tags;
+ gboolean auto_complete_constructs;
gint autocompletion_max_height;
- gint long_line_type;
- gint long_line_column;
- gchar *long_line_color;
- gboolean show_markers_margin;
- gboolean show_linenumber_margin;
+ GHashTable *auto_completions;
+ gboolean brace_match_ltgt; // whether to highlight < and > chars (hidden pref)
} EditorPrefs;
extern EditorPrefs editor_prefs;
Modified: trunk/src/keyfile.c
===================================================================
--- trunk/src/keyfile.c 2007-08-24 15:44:07 UTC (rev 1822)
+++ trunk/src/keyfile.c 2007-08-24 16:20:33 UTC (rev 1823)
@@ -179,7 +179,7 @@
g_key_file_set_boolean(config, PACKAGE, "show_white_space", editor_prefs.show_white_space);
g_key_file_set_boolean(config, PACKAGE, "show_markers_margin", editor_prefs.show_markers_margin);
g_key_file_set_boolean(config, PACKAGE, "show_linenumber_margin", editor_prefs.show_linenumber_margin);
- g_key_file_set_boolean(config, PACKAGE, "line_breaking", editor_prefs.line_breaking);
+ g_key_file_set_boolean(config, PACKAGE, "line_breaking", editor_prefs.line_wrapping);
g_key_file_set_boolean(config, PACKAGE, "show_line_endings", editor_prefs.show_line_endings);
g_key_file_set_boolean(config, PACKAGE, "brace_match_ltgt", editor_prefs.brace_match_ltgt);
g_key_file_set_boolean(config, PACKAGE, "auto_close_xml_tags", editor_prefs.auto_close_xml_tags);
@@ -187,16 +187,16 @@
g_key_file_set_boolean(config, PACKAGE, "auto_complete_symbols", editor_prefs.auto_complete_symbols);
g_key_file_set_integer(config, PACKAGE, "pref_editor_tab_width", editor_prefs.tab_width);
g_key_file_set_boolean(config, PACKAGE, "pref_editor_use_tabs", editor_prefs.use_tabs);
- g_key_file_set_boolean(config, PACKAGE, "pref_editor_new_line", editor_prefs.new_line);
- g_key_file_set_boolean(config, PACKAGE, "pref_editor_replace_tabs", editor_prefs.replace_tabs);
- g_key_file_set_boolean(config, PACKAGE, "pref_editor_trail_space", editor_prefs.trail_space);
+ g_key_file_set_boolean(config, PACKAGE, "pref_editor_new_line", prefs.final_new_line);
+ g_key_file_set_boolean(config, PACKAGE, "pref_editor_replace_tabs", prefs.replace_tabs);
+ g_key_file_set_boolean(config, PACKAGE, "pref_editor_trail_space", prefs.strip_trailing_spaces);
g_key_file_set_boolean(config, PACKAGE, "pref_editor_disable_dnd", editor_prefs.disable_dnd);
g_key_file_set_boolean(config, PACKAGE, "pref_editor_smart_home_key", editor_prefs.smart_home_key);
- g_key_file_set_string(config, PACKAGE, "pref_editor_default_new_encoding", encodings[editor_prefs.default_new_encoding].charset);
- if (editor_prefs.default_open_encoding == -1)
+ g_key_file_set_string(config, PACKAGE, "pref_editor_default_new_encoding", encodings[prefs.default_new_encoding].charset);
+ if (prefs.default_open_encoding == -1)
g_key_file_set_string(config, PACKAGE, "pref_editor_default_open_encoding", "none");
else
- g_key_file_set_string(config, PACKAGE, "pref_editor_default_open_encoding", encodings[editor_prefs.default_open_encoding].charset);
+ g_key_file_set_string(config, PACKAGE, "pref_editor_default_open_encoding", encodings[prefs.default_open_encoding].charset);
// files
g_key_file_set_boolean(config, PACKAGE, "tab_order_ltr", prefs.tab_order_ltr);
@@ -426,7 +426,7 @@
ui_prefs.sidebar_visible = utils_get_setting_boolean(config, PACKAGE, "sidebar_visible", TRUE);
prefs.statusbar_visible = utils_get_setting_boolean(config, PACKAGE, "statusbar_visible", TRUE);
ui_prefs.msgwindow_visible = utils_get_setting_boolean(config, PACKAGE, "msgwindow_visible", TRUE);
- editor_prefs.line_breaking = utils_get_setting_boolean(config, PACKAGE, "line_breaking", FALSE); // default is off for better performance
+ editor_prefs.line_wrapping = utils_get_setting_boolean(config, PACKAGE, "line_breaking", FALSE); // default is off for better performance
editor_prefs.indent_mode = utils_get_setting_integer(config, PACKAGE, "indent_mode", INDENT_ADVANCED);
editor_prefs.use_tab_to_indent = utils_get_setting_boolean(config, PACKAGE, "use_tab_to_indent", FALSE);
editor_prefs.use_indicators = utils_get_setting_boolean(config, PACKAGE, "use_indicators", TRUE);
@@ -488,9 +488,9 @@
{
const GeanyEncoding *enc = encodings_get_from_charset(tmp_string);
if (enc != NULL)
- editor_prefs.default_new_encoding = enc->idx;
+ prefs.default_new_encoding = enc->idx;
else
- editor_prefs.default_new_encoding = GEANY_ENCODING_UTF_8;
+ prefs.default_new_encoding = GEANY_ENCODING_UTF_8;
g_free(tmp_string);
}
@@ -499,9 +499,9 @@
{
const GeanyEncoding *enc = encodings_get_from_charset(tmp_string);
if (enc != NULL)
- editor_prefs.default_open_encoding = enc->idx;
+ prefs.default_open_encoding = enc->idx;
else
- editor_prefs.default_open_encoding = -1;
+ prefs.default_open_encoding = -1;
g_free(tmp_string);
}
@@ -569,9 +569,9 @@
g_free(tmp_string);
g_free(tmp_string2);
- editor_prefs.replace_tabs = utils_get_setting_boolean(config, PACKAGE, "pref_editor_replace_tabs", FALSE);
- editor_prefs.new_line = utils_get_setting_boolean(config, PACKAGE, "pref_editor_new_line", TRUE);
- editor_prefs.trail_space = utils_get_setting_boolean(config, PACKAGE, "pref_editor_trail_space", FALSE);
+ prefs.replace_tabs = utils_get_setting_boolean(config, PACKAGE, "pref_editor_replace_tabs", FALSE);
+ prefs.final_new_line = utils_get_setting_boolean(config, PACKAGE, "pref_editor_new_line", TRUE);
+ prefs.strip_trailing_spaces = utils_get_setting_boolean(config, PACKAGE, "pref_editor_trail_space", FALSE);
editor_prefs.disable_dnd = utils_get_setting_boolean(config, PACKAGE, "pref_editor_disable_dnd", FALSE);
editor_prefs.smart_home_key = utils_get_setting_boolean(config, PACKAGE, "pref_editor_smart_home_key", TRUE);
Modified: trunk/src/main.c
===================================================================
--- trunk/src/main.c 2007-08-24 15:44:07 UTC (rev 1822)
+++ trunk/src/main.c 2007-08-24 16:20:33 UTC (rev 1823)
@@ -238,7 +238,7 @@
app->ignore_callback = TRUE;
gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(
- lookup_widget(app->window, "menu_line_breaking1")), editor_prefs.line_breaking);
+ lookup_widget(app->window, "menu_line_breaking1")), editor_prefs.line_wrapping);
gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(
lookup_widget(app->window, "menu_use_auto_indentation1")),
(editor_prefs.indent_mode != INDENT_NONE));
Modified: trunk/src/plugindata.h
===================================================================
--- trunk/src/plugindata.h 2007-08-24 15:44:07 UTC (rev 1822)
+++ trunk/src/plugindata.h 2007-08-24 16:20:33 UTC (rev 1823)
@@ -76,7 +76,7 @@
/* The ABI version should be incremented whenever existing fields in the plugin
* data types below have to be changed or reordered. It should stay the same if fields
* are only appended, as this doesn't affect existing fields. */
-static const gint abi_version = 4;
+static const gint abi_version = 5;
/* This performs runtime checks that try to ensure:
* 1. Geany ABI data types are compatible with this plugin.
Modified: trunk/src/prefs.c
===================================================================
--- trunk/src/prefs.c 2007-08-24 15:44:07 UTC (rev 1822)
+++ trunk/src/prefs.c 2007-08-24 16:20:33 UTC (rev 1823)
@@ -245,29 +245,29 @@
widget = lookup_widget(ui_widgets.prefs_dialog, "combo_new_encoding");
// luckily the index of the combo box items match the index of the encodings array
- gtk_combo_box_set_active(GTK_COMBO_BOX(widget), editor_prefs.default_new_encoding);
+ gtk_combo_box_set_active(GTK_COMBO_BOX(widget), prefs.default_new_encoding);
widget = lookup_widget(ui_widgets.prefs_dialog, "check_open_encoding");
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(widget),
- (editor_prefs.default_open_encoding >= 0) ? TRUE : FALSE);
+ (prefs.default_open_encoding >= 0) ? TRUE : FALSE);
on_open_encoding_toggled(GTK_TOGGLE_BUTTON(widget), NULL);
widget = lookup_widget(ui_widgets.prefs_dialog, "combo_open_encoding");
- if (editor_prefs.default_open_encoding >= 0)
+ if (prefs.default_open_encoding >= 0)
{
- gtk_combo_box_set_active(GTK_COMBO_BOX(widget), editor_prefs.default_open_encoding);
+ gtk_combo_box_set_active(GTK_COMBO_BOX(widget), prefs.default_open_encoding);
}
else
gtk_combo_box_set_active(GTK_COMBO_BOX(widget), GEANY_ENCODING_UTF_8);
widget = lookup_widget(ui_widgets.prefs_dialog, "check_trailing_spaces");
- gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(widget), editor_prefs.trail_space);
+ gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(widget), prefs.strip_trailing_spaces);
widget = lookup_widget(ui_widgets.prefs_dialog, "check_new_line");
- gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(widget), editor_prefs.new_line);
+ gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(widget), prefs.final_new_line);
widget = lookup_widget(ui_widgets.prefs_dialog, "check_replace_tabs");
- gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(widget), editor_prefs.replace_tabs);
+ gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(widget), prefs.replace_tabs);
widget = lookup_widget(ui_widgets.prefs_dialog, "check_indent");
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(widget), editor_prefs.show_indent_guide);
@@ -282,7 +282,7 @@
gtk_combo_box_set_active(GTK_COMBO_BOX(widget), editor_prefs.indent_mode);
widget = lookup_widget(ui_widgets.prefs_dialog, "check_line_wrapping");
- gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(widget), editor_prefs.line_breaking);
+ gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(widget), editor_prefs.line_wrapping);
widget = lookup_widget(ui_widgets.prefs_dialog, "check_auto_complete");
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(widget), editor_prefs.auto_complete_constructs);
@@ -615,25 +615,25 @@
editor_prefs.tab_width = gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(widget));
widget = lookup_widget(ui_widgets.prefs_dialog, "combo_new_encoding");
- editor_prefs.default_new_encoding = gtk_combo_box_get_active(GTK_COMBO_BOX(widget));
+ prefs.default_new_encoding = gtk_combo_box_get_active(GTK_COMBO_BOX(widget));
widget = lookup_widget(ui_widgets.prefs_dialog, "check_open_encoding");
if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widget)))
{
widget = lookup_widget(ui_widgets.prefs_dialog, "combo_open_encoding");
- editor_prefs.default_open_encoding = gtk_combo_box_get_active(GTK_COMBO_BOX(widget));
+ prefs.default_open_encoding = gtk_combo_box_get_active(GTK_COMBO_BOX(widget));
}
else
- editor_prefs.default_open_encoding = -1;
+ prefs.default_open_encoding = -1;
widget = lookup_widget(ui_widgets.prefs_dialog, "check_trailing_spaces");
- editor_prefs.trail_space = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widget));
+ prefs.strip_trailing_spaces = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widget));
widget = lookup_widget(ui_widgets.prefs_dialog, "check_new_line");
- editor_prefs.new_line = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widget));
+ prefs.final_new_line = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widget));
widget = lookup_widget(ui_widgets.prefs_dialog, "check_replace_tabs");
- editor_prefs.replace_tabs = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widget));
+ prefs.replace_tabs = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widget));
widget = lookup_widget(ui_widgets.prefs_dialog, "spin_long_line");
editor_prefs.long_line_column = gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(widget));
@@ -658,7 +658,7 @@
editor_prefs.indent_mode = gtk_combo_box_get_active(GTK_COMBO_BOX(widget));
widget = lookup_widget(ui_widgets.prefs_dialog, "check_line_wrapping");
- editor_prefs.line_breaking = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widget));
+ editor_prefs.line_wrapping = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widget));
widget = lookup_widget(ui_widgets.prefs_dialog, "check_auto_complete");
editor_prefs.auto_complete_constructs = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widget));
Modified: trunk/src/prefs.h
===================================================================
--- trunk/src/prefs.h 2007-08-24 15:44:07 UTC (rev 1822)
+++ trunk/src/prefs.h 2007-08-24 16:20:33 UTC (rev 1823)
@@ -68,6 +68,11 @@
gint toolbar_icon_style;
/* files */
+ gint default_new_encoding;
+ gint default_open_encoding;
+ gboolean final_new_line;
+ gboolean strip_trailing_spaces;
+ gboolean replace_tabs;
gboolean tab_order_ltr;
guint mru_length;
Modified: trunk/src/ui_utils.c
===================================================================
--- trunk/src/ui_utils.c 2007-08-24 15:44:07 UTC (rev 1822)
+++ trunk/src/ui_utils.c 2007-08-24 16:20:33 UTC (rev 1823)
@@ -638,7 +638,7 @@
gtk_check_menu_item_set_active(
GTK_CHECK_MENU_ITEM(lookup_widget(app->window, "menu_line_breaking1")),
- doc_list[idx].line_breaking);
+ doc_list[idx].line_wrapping);
gtk_check_menu_item_set_active(
GTK_CHECK_MENU_ITEM(check_indent),
doc_list[idx].auto_indent);
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