SF.net SVN: geany: [1434] trunk
ntrel at users.sourceforge.net
ntrel at xxxxx
Tue Apr 3 11:04:45 UTC 2007
Revision: 1434
http://svn.sourceforge.net/geany/?rev=1434&view=rev
Author: ntrel
Date: 2007-04-03 04:04:44 -0700 (Tue, 03 Apr 2007)
Log Message:
-----------
Add recursive option to Find in Files dialog.
Modified Paths:
--------------
trunk/ChangeLog
trunk/src/search.c
Modified: trunk/ChangeLog
===================================================================
--- trunk/ChangeLog 2007-03-31 11:39:56 UTC (rev 1433)
+++ trunk/ChangeLog 2007-04-03 11:04:44 UTC (rev 1434)
@@ -1,3 +1,9 @@
+2007-04-03 Nick Treleaven <nick.treleaven at btinternet.com>
+
+ * src/search.c:
+ Add recursive option to Find in Files dialog.
+
+
2007-03-31 Nick Treleaven <nick.treleaven at btinternet.com>
* src/templates.c, doc/geany.docbook:
Modified: trunk/src/search.c
===================================================================
--- trunk/src/search.c 2007-03-31 11:39:56 UTC (rev 1433)
+++ trunk/src/search.c 2007-04-03 11:04:44 UTC (rev 1434)
@@ -65,7 +65,8 @@
{
FIF_CASE_SENSITIVE = 1 << 0,
FIF_WHOLE_WORD = 1 << 1,
- FIF_INVERT_MATCH = 1 << 2
+ FIF_INVERT_MATCH = 1 << 2,
+ FIF_RECURSIVE = 1 << 3
} fif_options;
typedef enum
@@ -558,7 +559,8 @@
if (widgets.find_in_files_dialog == NULL)
{
- GtkWidget *label, *label1, *checkbox1, *checkbox2, *check_wholeword;
+ GtkWidget *label, *label1, *checkbox1, *checkbox2, *check_wholeword,
+ *check_recursive;
GtkWidget *dbox, *sbox, *cbox, *rbox, *rbtn, *hbox, *vbox, *box;
GtkSizeGroup *size_group;
GtkTooltips *tooltips = GTK_TOOLTIPS(lookup_widget(app->window, "tooltips"));
@@ -641,6 +643,11 @@
gtk_button_set_focus_on_click(GTK_BUTTON(rbtn), FALSE);
gtk_container_add(GTK_CONTAINER(rbox), rbtn);
+ check_recursive = gtk_check_button_new_with_mnemonic(_("_Recurse in subfolders"));
+ g_object_set_data_full(G_OBJECT(widgets.find_in_files_dialog), "check_recursive",
+ gtk_widget_ref(check_recursive), (GDestroyNotify)gtk_widget_unref);
+ gtk_button_set_focus_on_click(GTK_BUTTON(check_recursive), FALSE);
+
checkbox1 = gtk_check_button_new_with_mnemonic(_("_Case sensitive"));
g_object_set_data_full(G_OBJECT(widgets.find_in_files_dialog), "check_case",
gtk_widget_ref(checkbox1), (GDestroyNotify)gtk_widget_unref);
@@ -660,6 +667,7 @@
_("Invert the sense of matching, to select non-matching lines."), NULL);
cbox = gtk_vbox_new(FALSE, 0);
+ gtk_container_add(GTK_CONTAINER(cbox), check_recursive);
gtk_container_add(GTK_CONTAINER(cbox), checkbox1);
gtk_container_add(GTK_CONTAINER(cbox), check_wholeword);
gtk_container_add(GTK_CONTAINER(cbox), checkbox2);
@@ -1052,9 +1060,12 @@
lookup_widget(widgets.find_in_files_dialog, "check_case")));
gboolean whole_word = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(
lookup_widget(widgets.find_in_files_dialog, "check_wholeword")));
+ gboolean recursive = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(
+ lookup_widget(widgets.find_in_files_dialog, "check_recursive")));
gint opts = (invert ? FIF_INVERT_MATCH : 0) |
(case_sens ? FIF_CASE_SENSITIVE : 0) |
- (whole_word ? FIF_WHOLE_WORD : 0);
+ (whole_word ? FIF_WHOLE_WORD : 0) |
+ (recursive ? FIF_RECURSIVE: 0);
gboolean fgrep = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(
lookup_widget(widgets.find_in_files_dialog, "radio_fgrep")));
gboolean grep = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(
@@ -1086,7 +1097,7 @@
gchar **argv_prefix;
gchar **grep_cmd_argv;
gchar **argv;
- gchar grep_opts[] = "-nHI ";
+ gchar grep_opts[] = "-nHI ";
GPid child_pid;
gint stdout_fd, stdin_fd, grep_cmd_argv_len, i, grep_opts_len = 4;
GError *error = NULL;
@@ -1122,23 +1133,36 @@
grep_opts[grep_opts_len++] = 'w';
if (opts & FIF_INVERT_MATCH)
grep_opts[grep_opts_len++] = 'v';
+ if (opts & FIF_RECURSIVE)
+ grep_opts[grep_opts_len++] = 'r';
grep_opts[grep_opts_len] = '\0';
// set grep command and options
- argv_prefix = g_new0(gchar*, grep_cmd_argv_len + 4);
+ argv_prefix = g_new0(gchar*, grep_cmd_argv_len + 4 + 1); // +1 for recursive arg
+
for (i = 0; i < grep_cmd_argv_len; i++)
{
argv_prefix[i] = g_strdup(grep_cmd_argv[i]);
}
- argv_prefix[grep_cmd_argv_len] = g_strdup(grep_opts);
- argv_prefix[grep_cmd_argv_len + 1] = g_strdup("--");
- argv_prefix[grep_cmd_argv_len + 2] = g_strdup(search_text);
- argv_prefix[grep_cmd_argv_len + 3] = NULL;
g_strfreev(grep_cmd_argv);
+ argv_prefix[i++] = g_strdup(grep_opts);
+ argv_prefix[i++] = g_strdup("--");
+ argv_prefix[i++] = g_strdup(search_text);
+
// finally add the arguments(files to be searched)
- argv = search_get_argv((const gchar**)argv_prefix, dir);
- g_strfreev(argv_prefix);
+ if (opts & FIF_RECURSIVE)
+ {
+ argv_prefix[i++] = g_strdup(".");
+ argv_prefix[i++] = NULL;
+ argv = argv_prefix;
+ }
+ else
+ {
+ argv_prefix[i++] = NULL;
+ argv = search_get_argv((const gchar**)argv_prefix, dir);
+ g_strfreev(argv_prefix);
+ }
if (argv == NULL) return FALSE;
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