SF.net SVN: geany: [1186] trunk
eht16 at users.sourceforge.net
eht16 at xxxxx
Sun Jan 14 17:09:17 UTC 2007
Revision: 1186
http://svn.sourceforge.net/geany/?rev=1186&view=rev
Author: eht16
Date: 2007-01-14 09:09:17 -0800 (Sun, 14 Jan 2007)
Log Message:
-----------
Added sci_set_use_tabs().
Fixed mem leak in sci_cb_auto_forif().
Moved free_pointers() to utils.c.
Applied patch from Jeff Pohlmeyer to add an option for using spaces or tabulators when inserting some whitespace.
Modified Paths:
--------------
trunk/ChangeLog
trunk/geany.glade
trunk/src/build.c
trunk/src/document.c
trunk/src/geany.h
trunk/src/highlighting.c
trunk/src/interface.c
trunk/src/keyfile.c
trunk/src/prefs.c
trunk/src/sci_cb.c
trunk/src/sciwrappers.c
trunk/src/sciwrappers.h
trunk/src/utils.c
trunk/src/utils.h
Modified: trunk/ChangeLog
===================================================================
--- trunk/ChangeLog 2007-01-14 13:36:30 UTC (rev 1185)
+++ trunk/ChangeLog 2007-01-14 17:09:17 UTC (rev 1186)
@@ -1,3 +1,16 @@
+2007-01-14 Enrico Tröger <enrico.troeger at uvena.de>
+
+ * geany.glade, src/build.c, src/document.c, src/geany.h,
+ src/highlighting.c, src/interface.c, src/keyfile.c, src/prefs.c,
+ src/sci_cb.c, src/sci_wrappers.c, src/sciwrappers.h, src/utils.c,
+ src/utils.h:
+ Added sci_set_use_tabs().
+ Fixed mem leak in sci_cb_auto_forif().
+ Moved free_pointers() to utils.c.
+ Applied patch from Jeff Pohlmeyer to add an option for using spaces
+ or tabulators when inserting some whitespace.
+
+
2007-01-14 Nick Treleaven <nick.treleaven at btinternet.com>
* src/treeviews.c, src/treeviews.h, src/symbols.c, po/POTFILES.in:
Modified: trunk/geany.glade
===================================================================
--- trunk/geany.glade 2007-01-14 13:36:30 UTC (rev 1185)
+++ trunk/geany.glade 2007-01-14 17:09:17 UTC (rev 1186)
@@ -5237,6 +5237,26 @@
<property name="fill">False</property>
</packing>
</child>
+
+ <child>
+ <widget class="GtkCheckButton" id="check_use_tabs">
+ <property name="visible">True</property>
+ <property name="tooltip" translatable="yes">Whenever some whitespace is inserted by Geany it will use tabluators when enabled otherwise Geany will use just spaces.</property>
+ <property name="can_focus">True</property>
+ <property name="label" translatable="yes">Use tabulators when inserting whitespace</property>
+ <property name="use_underline">True</property>
+ <property name="relief">GTK_RELIEF_NORMAL</property>
+ <property name="focus_on_click">False</property>
+ <property name="active">False</property>
+ <property name="inconsistent">False</property>
+ <property name="draw_indicator">True</property>
+ </widget>
+ <packing>
+ <property name="padding">0</property>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ </packing>
+ </child>
</widget>
</child>
</widget>
Modified: trunk/src/build.c
===================================================================
--- trunk/src/build.c 2007-01-14 13:36:30 UTC (rev 1185)
+++ trunk/src/build.c 2007-01-14 17:09:17 UTC (rev 1186)
@@ -1,7 +1,8 @@
/*
* build.c - this file is part of Geany, a fast and lightweight IDE
*
- * Copyright 2006 Enrico Troeger <enrico.troeger at uvena.de>
+ * Copyright 2005-2007 Enrico Troeger <enrico.troeger at uvena.de>
+ * Copyright 2006-2007 Nick Treleaven <nick.treleaven at btinternet.com>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -29,7 +30,6 @@
#include <sys/stat.h>
#include <unistd.h>
#include <errno.h>
-#include <stdarg.h>
#ifdef G_OS_UNIX
# include <sys/types.h>
@@ -78,7 +78,6 @@
static void set_stop_button(gboolean stop);
static void build_exit_cb(GPid child_pid, gint status, gpointer user_data);
static void run_exit_cb(GPid child_pid, gint status, gpointer user_data);
-static void free_pointers(gpointer first, ...);
#ifndef G_OS_WIN32
static void kill_process(GPid *pid);
@@ -154,7 +153,7 @@
if (stat(locale_filename, &st) != 0)
{
msgwin_status_add(_("Failed to view %s (make sure it is already compiled)"), view_file);
- free_pointers(executable, view_file, locale_filename, script_name);
+ utils_free_pointers(executable, view_file, locale_filename, script_name, NULL);
return (GPid) 1;
}
@@ -189,8 +188,8 @@
_("Could not find terminal '%s' "
"(check path for Terminal tool setting in Preferences)"), app->tools_term_cmd);
- free_pointers(executable, view_file, locale_filename, cmd_string, locale_cmd_string,
- script_name, locale_term_cmd);
+ utils_free_pointers(executable, view_file, locale_filename, cmd_string, locale_cmd_string,
+ script_name, locale_term_cmd, NULL);
g_strfreev(term_argv);
return (GPid) 1;
}
@@ -202,8 +201,8 @@
gchar *utf8_check_executable = utils_remove_ext_from_filename(doc_list[idx].file_name);
msgwin_status_add(_("Failed to execute %s (start-script could not be created)"),
utf8_check_executable);
- free_pointers(executable, view_file, locale_filename, cmd_string, locale_cmd_string,
- utf8_check_executable, script_name, locale_term_cmd);
+ utils_free_pointers(executable, view_file, locale_filename, cmd_string, locale_cmd_string,
+ utf8_check_executable, script_name, locale_term_cmd, NULL);
g_strfreev(term_argv);
return (GPid) 1;
}
@@ -230,8 +229,8 @@
geany_debug("g_spawn_async_with_pipes() failed: %s", error->message);
msgwin_status_add(_("Process failed (%s)"), error->message);
- free_pointers(executable, view_file, locale_filename, cmd_string, locale_cmd_string,
- script_name, locale_term_cmd);
+ utils_free_pointers(executable, view_file, locale_filename, cmd_string, locale_cmd_string,
+ script_name, locale_term_cmd, NULL);
g_strfreev(argv);
g_strfreev(term_argv);
g_error_free(error);
@@ -246,8 +245,8 @@
build_menu_update(idx);
}
- free_pointers(executable, view_file, locale_filename, cmd_string, locale_cmd_string,
- script_name, locale_term_cmd);
+ utils_free_pointers(executable, view_file, locale_filename, cmd_string, locale_cmd_string,
+ script_name, locale_term_cmd, NULL);
g_strfreev(argv);
g_strfreev(term_argv);
@@ -1513,25 +1512,6 @@
#endif
-// frees all passed pointers if they are non-NULL, the first argument is nothing special,
-// it will also be freed
-static void free_pointers(gpointer first, ...)
-{
- va_list a;
- gpointer sa;
-
- for (va_start(a, first); (sa = va_arg(a, gpointer), sa!=NULL);)
- {
- if (sa != NULL)
- g_free(sa);
- }
- va_end(a);
-
- if (first != NULL)
- g_free(first);
-}
-
-
void
on_build_next_error (GtkMenuItem *menuitem,
gpointer user_data)
Modified: trunk/src/document.c
===================================================================
--- trunk/src/document.c 2007-01-14 13:36:30 UTC (rev 1185)
+++ trunk/src/document.c 2007-01-14 17:09:17 UTC (rev 1186)
@@ -179,6 +179,8 @@
sci_set_mark_long_lines(sci, app->long_line_type, app->long_line_column, app->long_line_color);
sci_set_tab_width(sci, app->pref_editor_tab_width);
+ sci_set_use_tabs(sci, app->pref_editor_use_tabs);
+
sci_set_autoc_max_height(sci, app->autocompletion_max_height);
sci_set_indentionguides(sci, app->pref_editor_show_indent_guide);
Modified: trunk/src/geany.h
===================================================================
--- trunk/src/geany.h 2007-01-14 13:36:30 UTC (rev 1185)
+++ trunk/src/geany.h 2007-01-14 17:09:17 UTC (rev 1186)
@@ -110,6 +110,7 @@
gboolean pref_editor_folding;
gboolean pref_editor_unfold_all_children;
gint pref_editor_tab_width;
+ gboolean pref_editor_use_tabs;
gint pref_editor_default_encoding;
gboolean pref_editor_new_line;
gboolean pref_editor_replace_tabs;
Modified: trunk/src/highlighting.c
===================================================================
--- trunk/src/highlighting.c 2007-01-14 13:36:30 UTC (rev 1185)
+++ trunk/src/highlighting.c 2007-01-14 17:09:17 UTC (rev 1186)
@@ -426,8 +426,6 @@
SSM(sci, SCI_STYLECLEARALL, 0, 0);
- SSM(sci, SCI_SETUSETABS, TRUE, 0);
-
// caret colour
SSM(sci, SCI_SETCARETFORE, invert(common_style_set.styling[GCS_CARET].foreground), 0);
Modified: trunk/src/interface.c
===================================================================
--- trunk/src/interface.c 2007-01-14 13:36:30 UTC (rev 1185)
+++ trunk/src/interface.c 2007-01-14 17:09:17 UTC (rev 1186)
@@ -2304,6 +2304,7 @@
GtkWidget *check_unfold_children;
GtkWidget *check_indicators;
GtkWidget *check_disable_dnd;
+ GtkWidget *check_use_tabs;
GtkWidget *label172;
GtkWidget *frame18;
GtkWidget *alignment21;
@@ -3202,6 +3203,12 @@
gtk_tooltips_set_tip (tooltips, check_disable_dnd, _("Disable drag and drop completely in the editor window so you can't drag and drop any selections within or outside of the editor window."), NULL);
gtk_button_set_focus_on_click (GTK_BUTTON (check_disable_dnd), FALSE);
+ check_use_tabs = gtk_check_button_new_with_mnemonic (_("Use tabulators when inserting whitespace"));
+ gtk_widget_show (check_use_tabs);
+ gtk_box_pack_start (GTK_BOX (vbox17), check_use_tabs, FALSE, FALSE, 0);
+ gtk_tooltips_set_tip (tooltips, check_use_tabs, _("Whenever some whitespace is inserted by Geany it will use tabluators when enabled otherwise Geany will use just spaces."), NULL);
+ gtk_button_set_focus_on_click (GTK_BUTTON (check_use_tabs), FALSE);
+
label172 = gtk_label_new (_("<b>Features</b>"));
gtk_widget_show (label172);
gtk_frame_set_label_widget (GTK_FRAME (frame14), label172);
@@ -3733,6 +3740,7 @@
GLADE_HOOKUP_OBJECT (prefs_dialog, check_unfold_children, "check_unfold_children");
GLADE_HOOKUP_OBJECT (prefs_dialog, check_indicators, "check_indicators");
GLADE_HOOKUP_OBJECT (prefs_dialog, check_disable_dnd, "check_disable_dnd");
+ GLADE_HOOKUP_OBJECT (prefs_dialog, check_use_tabs, "check_use_tabs");
GLADE_HOOKUP_OBJECT (prefs_dialog, label172, "label172");
GLADE_HOOKUP_OBJECT (prefs_dialog, frame18, "frame18");
GLADE_HOOKUP_OBJECT (prefs_dialog, alignment21, "alignment21");
Modified: trunk/src/keyfile.c
===================================================================
--- trunk/src/keyfile.c 2007-01-14 13:36:30 UTC (rev 1185)
+++ trunk/src/keyfile.c 2007-01-14 17:09:17 UTC (rev 1186)
@@ -1,7 +1,8 @@
/*
* keyfile.c - this file is part of Geany, a fast and lightweight IDE
*
- * Copyright 2006 Enrico Troeger <enrico.troeger at uvena.de>
+ * Copyright 2005-2007 Enrico Troeger <enrico.troeger at uvena.de>
+ * Copyright 2006-2007 Nick Treleaven <nick.treleaven at btinternet.com>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -155,6 +156,7 @@
g_key_file_set_integer_list(config, PACKAGE, "geometry", app->geometry, 4);
}
g_key_file_set_integer(config, PACKAGE, "pref_editor_tab_width", app->pref_editor_tab_width);
+ g_key_file_set_boolean(config, PACKAGE, "pref_editor_use_tabs", app->pref_editor_use_tabs);
g_key_file_set_boolean(config, PACKAGE, "pref_main_confirm_exit", app->pref_main_confirm_exit);
g_key_file_set_boolean(config, PACKAGE, "pref_main_suppress_search_dialogs", app->pref_main_suppress_search_dialogs);
g_key_file_set_boolean(config, PACKAGE, "pref_main_load_session", app->pref_main_load_session);
@@ -354,6 +356,7 @@
app->pref_editor_tab_width = utils_get_setting_integer(config, PACKAGE, "pref_editor_tab_width", 4);
+ app->pref_editor_use_tabs = utils_get_setting_boolean(config, PACKAGE, "pref_editor_use_tabs", TRUE);
tmp_string = utils_get_setting_string(config, PACKAGE, "pref_editor_default_encoding",
encodings[GEANY_ENCODING_UTF_8].charset);
if (tmp_string)
Modified: trunk/src/prefs.c
===================================================================
--- trunk/src/prefs.c 2007-01-14 13:36:30 UTC (rev 1185)
+++ trunk/src/prefs.c 2007-01-14 17:09:17 UTC (rev 1186)
@@ -1,7 +1,8 @@
/*
* prefs.c - this file is part of Geany, a fast and lightweight IDE
*
- * Copyright 2006 Enrico Troeger <enrico.troeger at uvena.de>
+ * Copyright 2005-2007 Enrico Troeger <enrico.troeger at uvena.de>
+ * Copyright 2006-2007 Nick Treleaven <nick.treleaven at btinternet.com>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -250,6 +251,9 @@
widget = lookup_widget(app->prefs_dialog, "check_disable_dnd");
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(widget), app->pref_editor_disable_dnd);
+ widget = lookup_widget(app->prefs_dialog, "check_use_tabs");
+ gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(widget), app->pref_editor_use_tabs);
+
widget = lookup_widget(app->prefs_dialog, "check_indicators");
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(widget), app->pref_editor_use_indicators);
@@ -556,6 +560,9 @@
widget = lookup_widget(app->prefs_dialog, "check_disable_dnd");
app->pref_editor_disable_dnd = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widget));
+ widget = lookup_widget(app->prefs_dialog, "check_use_tabs");
+ app->pref_editor_use_tabs = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widget));
+
widget = lookup_widget(app->prefs_dialog, "spin_autocheight");
app->autocompletion_max_height = gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(widget));
Modified: trunk/src/sci_cb.c
===================================================================
--- trunk/src/sci_cb.c 2007-01-14 13:36:30 UTC (rev 1185)
+++ trunk/src/sci_cb.c 2007-01-14 17:09:17 UTC (rev 1186)
@@ -321,9 +321,10 @@
if (doc_list[idx].file_type->id == GEANY_FILETYPES_PYTHON &&
sci_get_char_at(sci, pos - 2) == ':' &&
sci_get_style_at(sci, pos - 2) == SCE_P_OPERATOR)
- {
- /// TODO add something like insert_tabs() which inserts a tab or tab_width times a space
- sci_add_text(sci, "\t");
+ { // creates and inserts one tabulator sign or whitespace of the amount of the tab width
+ gchar *text = utils_get_whitespace(app->pref_editor_tab_width);
+ sci_add_text(sci, text);
+ g_free(text);
}
}
@@ -353,7 +354,17 @@
// and ignore the case of sci_cb_close_block
else if (linebuf[i] == '{' && ! use_this_line)
{
- indent[j++] = '\t';
+ if (app->pref_editor_use_tabs)
+ {
+ indent[j++] = '\t';
+ }
+ else
+ { // insert as many spaces as a tabulator would take
+ gint i;
+ for (i = 0; i < app->pref_editor_tab_width; i++)
+ indent[j++] = ' ';
+ }
+
break;
}
else
@@ -363,7 +374,19 @@
while (k > 0 && isspace(linebuf[k])) k--;
// if last non-whitespace character is a { increase indention by a tab
// e.g. for (...) {
- if (linebuf[k] == '{') indent[j++] = '\t';
+ if (linebuf[k] == '{')
+ {
+ if (app->pref_editor_use_tabs)
+ {
+ indent[j++] = '\t';
+ }
+ else
+ { // insert as many spaces as a tabulator would take
+ gint i;
+ for (i = 0; i < app->pref_editor_use_tabs; i++)
+ indent[j++] = ' ';
+ }
+ }
break;
}
}
@@ -865,10 +888,12 @@
{
static gchar buf[16];
gchar *eol;
+ gchar *space;
gchar *construct;
gint lexer, style;
gint i;
gint last_pos;
+ gint space_len;
ScintillaObject *sci;
if (idx == -1 || ! doc_list[idx].is_valid || doc_list[idx].file_type == NULL) return;
@@ -895,7 +920,7 @@
if (lexer == SCLEX_HTML && ! (style >= SCE_HPHP_DEFAULT && style <= SCE_HPHP_OPERATOR))
return;
- // get the indention
+ // get the indentation
if (doc_list[idx].use_auto_indention) get_indent(sci, pos, TRUE);
eol = g_strconcat(utils_get_eol_char(idx), indent, NULL);
sci_get_text_range(sci, pos - 16, pos - 1, buf);
@@ -912,16 +937,20 @@
i--;
}
+ // get the whitespace for additional indentation
+ space = utils_get_whitespace(app->pref_editor_tab_width);
+ space_len = strlen(space);
+
// "pattern", buf + x, y -> x + y = 15, because buf is (pos - 16)...(pos - 1) = 15
if (! strncmp("if", buf + 13, 2))
{
if (! isspace(*(buf + 12)))
{
- g_free(eol);
+ utils_free_pointers(eol, space, NULL);
return;
}
- construct = g_strdup_printf("()%s{%s\t%s}%s", eol, eol, eol, eol);
+ construct = g_strdup_printf("()%s{%s%s%s}%s", eol, eol, space, eol, eol);
SSM(sci, SCI_INSERTTEXT, pos, (sptr_t) construct);
sci_goto_pos(sci, pos + 1, TRUE);
@@ -931,14 +960,14 @@
{
if (! isspace(*(buf + 10)))
{
- g_free(eol);
+ utils_free_pointers(eol, space, NULL);
return;
}
- construct = g_strdup_printf("%s{%s\t%s}%s", eol, eol, eol, eol);
+ construct = g_strdup_printf("%s{%s%s%s}%s", eol, eol, space, eol, eol);
SSM(sci, SCI_INSERTTEXT, pos, (sptr_t) construct);
- sci_goto_pos(sci, pos + 4 + (2 * strlen(indent)), TRUE);
+ sci_goto_pos(sci, pos + 3 + space_len + (2 * strlen(indent)), TRUE);
g_free(construct);
}
else if (! strncmp("for", buf + 12, 3))
@@ -948,7 +977,7 @@
if (! isspace(*(buf + 11)))
{
- g_free(eol);
+ utils_free_pointers(eol, space, NULL);
return;
}
@@ -962,9 +991,9 @@
var = g_strdup("i");
contruct_len = 12;
}
- construct = g_strdup_printf("(%s%s = 0; %s < ; %s++)%s{%s\t%s}%s",
+ construct = g_strdup_printf("(%s%s = 0; %s < ; %s++)%s{%s%s%s}%s",
(doc_list[idx].file_type->id == GEANY_FILETYPES_CPP) ? "int " : "",
- var, var, var, eol, eol, eol, eol);
+ var, var, var, eol, eol, space, eol, eol);
// add 4 characters because of "int " in C++ mode
contruct_len += (doc_list[idx].file_type->id == GEANY_FILETYPES_CPP) ? 4 : 0;
@@ -978,11 +1007,11 @@
{
if (! isspace(*(buf + 9)))
{
- g_free(eol);
+ utils_free_pointers(eol, space, NULL);
return;
}
- construct = g_strdup_printf("()%s{%s\t%s}%s", eol, eol, eol, eol);
+ construct = g_strdup_printf("()%s{%s%s%s}%s", eol, eol, space, eol, eol);
SSM(sci, SCI_INSERTTEXT, pos, (sptr_t) construct);
sci_goto_pos(sci, pos + 1, TRUE);
@@ -992,40 +1021,41 @@
{
if (! isspace(*(buf + 12)))
{
- g_free(eol);
+ utils_free_pointers(eol, space, NULL);
return;
}
- construct = g_strdup_printf("%s{%s\t%s}%swhile ();%s", eol, eol, eol, eol, eol);
+ construct = g_strdup_printf("%s{%s%s%s}%swhile ();%s", eol, eol, space, eol, eol, eol);
SSM(sci, SCI_INSERTTEXT, pos, (sptr_t) construct);
- sci_goto_pos(sci, pos + 4 + (2 * strlen(indent)), TRUE);
+ sci_goto_pos(sci, pos + 3 + space_len + (2 * strlen(indent)), TRUE);
g_free(construct);
}
else if (! strncmp("try", buf + 12, 3))
{
if (! isspace(*(buf + 11)))
{
- g_free(eol);
+ utils_free_pointers(eol, space, NULL);
return;
}
- construct = g_strdup_printf("%s{%s\t%s}%scatch ()%s{%s\t%s}%s",
- eol, eol, eol, eol, eol, eol, eol, eol);
+ construct = g_strdup_printf("%s{%s%s%s}%scatch ()%s{%s%s%s}%s",
+ eol, eol, space, eol, eol, eol, eol, space, eol, eol);
SSM(sci, SCI_INSERTTEXT, pos, (sptr_t) construct);
- sci_goto_pos(sci, pos + 4 + (2 * strlen(indent)), TRUE);
+ sci_goto_pos(sci, pos + 3 + space_len + (2 * strlen(indent)), TRUE);
g_free(construct);
}
else if (! strncmp("switch", buf + 9, 6))
{
if (! isspace(*(buf + 8)))
{
- g_free(eol);
+ utils_free_pointers(eol, space, NULL);
return;
}
- construct = g_strdup_printf("()%s{%s\tcase : break;%s\tdefault: %s}%s", eol, eol, eol, eol, eol);
+ construct = g_strdup_printf("()%s{%s%scase : break;%s%sdefault: %s}%s",
+ eol, eol, space, eol, space, eol, eol);
SSM(sci, SCI_INSERTTEXT, pos, (sptr_t) construct);
sci_goto_pos(sci, pos + 1, TRUE);
@@ -1036,30 +1066,34 @@
if (doc_list[idx].file_type->id != GEANY_FILETYPES_FERITE ||
! isspace(*(buf + 9)))
{
- g_free(eol);
+ utils_free_pointers(eol, space, NULL);
return;
}
- construct = g_strdup_printf("%s{%s\t%s}%sfix%s{%s\t%s}%s", eol, eol, eol, eol, eol, eol, eol, eol);
+ construct = g_strdup_printf("%s{%s%s%s}%sfix%s{%s%s%s}%s",
+ eol, eol, space, eol, eol, eol, eol, space, eol, eol);
SSM(sci, SCI_INSERTTEXT, pos, (sptr_t) construct);
- sci_goto_pos(sci, pos + 4 + (2 * strlen(indent)), TRUE);
+ sci_goto_pos(sci, pos + 3 + space_len + (2 * strlen(indent)), TRUE);
g_free(construct);
}
else if (doc_list[idx].file_type->id == GEANY_FILETYPES_FERITE && ! strncmp("monitor", buf + 8, 7))
{
if (! isspace(*(buf + 7)))
{
- g_free(eol);
+ utils_free_pointers(eol, space, NULL);
return;
}
- construct = g_strdup_printf("%s{%s\t%s}%shandle%s{%s\t%s}%s", eol, eol, eol, eol, eol, eol, eol, eol);
+ construct = g_strdup_printf("%s{%s%s%s}%shandle%s{%s%s%s}%s",
+ eol, eol, space, eol, eol, eol, eol, space, eol, eol);
SSM(sci, SCI_INSERTTEXT, pos, (sptr_t) construct);
- sci_goto_pos(sci, pos + 4 + (2 * strlen(indent)), TRUE);
+ sci_goto_pos(sci, pos + 3 + space_len + (2 * strlen(indent)), TRUE);
g_free(construct);
}
+
+ utils_free_pointers(eol, space, NULL);
}
Modified: trunk/src/sciwrappers.c
===================================================================
--- trunk/src/sciwrappers.c 2007-01-14 13:36:30 UTC (rev 1185)
+++ trunk/src/sciwrappers.c 2007-01-14 17:09:17 UTC (rev 1186)
@@ -917,3 +917,7 @@
SSM(sci, SCI_SETTABINDENTS, set, 0);
}
+void sci_set_use_tabs(ScintillaObject *sci, gboolean set)
+{
+ SSM(sci, SCI_SETUSETABS, set, 0);
+}
Modified: trunk/src/sciwrappers.h
===================================================================
--- trunk/src/sciwrappers.h 2007-01-14 13:36:30 UTC (rev 1185)
+++ trunk/src/sciwrappers.h 2007-01-14 17:09:17 UTC (rev 1186)
@@ -1,7 +1,8 @@
/*
* sciwrappers.h - this file is part of Geany, a fast and lightweight IDE
*
- * Copyright 2006 Enrico Troeger <enrico.troeger at uvena.de>
+ * Copyright 2005-2007 Enrico Troeger <enrico.troeger at uvena.de>
+ * Copyright 2006-2007 Nick Treleaven <nick.treleaven at btinternet.com>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -167,5 +168,6 @@
gint sci_get_overtype (ScintillaObject * sci);
void sci_set_tab_indents (ScintillaObject * sci, gboolean set);
+void sci_set_use_tabs (ScintillaObject * sci, gboolean set);
#endif
Modified: trunk/src/utils.c
===================================================================
--- trunk/src/utils.c 2007-01-14 13:36:30 UTC (rev 1185)
+++ trunk/src/utils.c 2007-01-14 17:09:17 UTC (rev 1186)
@@ -31,6 +31,7 @@
#include <unistd.h>
#include <string.h>
#include <errno.h>
+#include <stdarg.h>
#ifdef HAVE_SYS_STAT_H
# include <sys/stat.h>
@@ -1432,3 +1433,51 @@
}
+/* Returns a string containing whitespace of the amount a according to the
+ * setting app->pref_editor_use_tabs filled with simple space characters or with the right amount
+ * of tabulator characters (a is filled with tabulators *and* spaces if a isn't a multiple of
+ * app->pref_editor_tab_width) */
+gchar *utils_get_whitespace(gint a)
+{
+ gchar *str;
+
+ g_return_val_if_fail(a > 0, NULL);
+
+ if (app->pref_editor_use_tabs)
+ { // first fill text with tabluators and fill the rest with spaces
+ gint tabs = a / app->pref_editor_tab_width;
+ gint spaces = a % app->pref_editor_tab_width;
+ gint len = tabs + spaces;
+
+ str = g_malloc(len + 1);
+
+ memset(str, '\t', tabs);
+ memset(str + tabs, ' ', spaces);
+ str[len] = '\0';
+ }
+ else
+ str = g_strnfill(a, ' ');
+
+ return str;
+}
+
+
+/* frees all passed pointers if they are non-NULL, the first argument is nothing special,
+ * it will also be freed, the list should be ended with NULL */
+void utils_free_pointers(gpointer first, ...)
+{
+ va_list a;
+ gpointer sa;
+
+ for (va_start(a, first); (sa = va_arg(a, gpointer), sa!=NULL);)
+ {
+ if (sa != NULL)
+ g_free(sa);
+ }
+ va_end(a);
+
+ if (first != NULL)
+ g_free(first);
+}
+
+
Modified: trunk/src/utils.h
===================================================================
--- trunk/src/utils.h 2007-01-14 13:36:30 UTC (rev 1185)
+++ trunk/src/utils.h 2007-01-14 17:09:17 UTC (rev 1186)
@@ -1,7 +1,8 @@
/*
* utils.h - this file is part of Geany, a fast and lightweight IDE
*
- * Copyright 2006 Enrico Troeger <enrico.troeger at uvena.de>
+ * Copyright 2005-2007 Enrico Troeger <enrico.troeger at uvena.de>
+ * Copyright 2006-2007 Nick Treleaven <nick.treleaven at btinternet.com>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -143,4 +144,14 @@
/* Simple wrapper for g_locale_to_utf8; returns a copy of locale_text on failure. */
gchar *utils_get_utf8_from_locale(const gchar *locale_text);
+/* Returns a string containing whitespace of the amount a according to the
+ * setting app->pref_editor_use_tabs filled with simple space characters or with the right amount
+ * of tabulator characters (a is filled with tabulators *and* spaces if a isn't a multiple of
+ * app->pref_editor_tab_width) */
+gchar *utils_get_whitespace(gint amount);
+
+/* frees all passed pointers if they are non-NULL, the first argument is nothing special,
+ * it will also be freed, the list should be ended with NULL */
+void utils_free_pointers(gpointer first, ...);
+
#endif
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