1
1

1998-03-16 Federico Mena Quintero <federico@nuclecu.unam.mx>

* gscreen.c (filter_item_activate): Make it convert the glob
	pattern to a regexp if appropriate.

1998-03-16  Federico Mena Quintero  <federico@nuclecu.unam.mx>

	* util.c (convert_pattern): Now the internal buffer is malloc()ed
	instead of being static.  This is required for long patterns.
	(regexp_match): Free the pattern after calling convert_pattern().

	* file.c (file_mask_dialog): Free the source_mask after calling
	convert_pattern().
Этот коммит содержится в:
Miguel de Icaza 1998-03-17 00:24:52 +00:00
родитель 9d4987c84b
Коммит 4a883be09e
5 изменённых файлов: 53 добавлений и 42 удалений

Просмотреть файл

@ -1,3 +1,8 @@
1998-03-16 Federico Mena Quintero <federico@nuclecu.unam.mx>
* gscreen.c (filter_item_activate): Make it convert the glob
pattern to a regexp if appropriate.
Sat Mar 14 17:13:26 1998 Miguel de Icaza <miguel@nuclecu.unam.mx> Sat Mar 14 17:13:26 1998 Miguel de Icaza <miguel@nuclecu.unam.mx>
* gmain.c (gnome_dlg_send_destroy): New signal handler for * gmain.c (gnome_dlg_send_destroy): New signal handler for

Просмотреть файл

@ -935,65 +935,45 @@ panel_change_filter (GtkWidget *entry, WPanel *panel)
/* FIXME: for now, this list is hardcoded. We want a way to let the user configure it. */ /* FIXME: for now, this list is hardcoded. We want a way to let the user configure it. */
/* FIXME!!! fill in regexps */
static struct filter_item { static struct filter_item {
char *text; char *text;
char *glob; char *glob;
char *regexp;
} filter_items [] = { } filter_items [] = {
{ "All files", { "All files",
"*", "*" },
"." },
{ "Archives and compressed files", { "Archives and compressed files",
"*.(tar|gz|tgz|taz|zip|lha|zoo|pak|sit|arc|arj|rar|huf|lzh)", "*.(tar|gz|tgz|taz|zip|lha|zoo|pak|sit|arc|arj|rar|huf|lzh)" },
"." },
{ "RPM/DEB files", { "RPM/DEB files",
"*.(rpm|deb)", "*.(rpm|deb)" },
"." },
{ "Text/Document files", { "Text/Document files",
"*.(txt|tex|doc|rtf)", "*.(txt|tex|doc|rtf)" },
"." },
{ "HTML and SGML files", { "HTML and SGML files",
"*.{html|htm|sgml|sgm", "*.(html|htm|sgml|sgm)" },
"." },
{ "Postscript and PDF files", { "Postscript and PDF files",
"*.(ps|pdf)", "*.(ps|pdf)" },
"." },
{ "Spreadsheet files", { "Spreadsheet files",
"*.(xls|wks|wk1)", "*.(xls|wks|wk1)" },
"." },
{ "Image files", { "Image files",
"*.(png|jpg|jpeg|xcf|gif|tif|tiff|xbm|xpm|pbm|pgm|ppm|tga|rgb|iff|lbm|ilbm|" "*.(png|jpg|jpeg|xcf|gif|tif|tiff|xbm|xpm|pbm|pgm|ppm|tga|rgb|iff|lbm|ilbm|"
"bmp|pcx|pic|pict|psd|gbr|pat|ico|fig|cgm|rle|fits)", "bmp|pcx|pic|pict|psd|gbr|pat|ico|fig|cgm|rle|fits)" },
"." },
{ "Video/animation files", { "Video/animation files",
"*.(mpg|mpeg|mov|avi|fli|flc|flh|flx|dl)", "*.(mpg|mpeg|mov|avi|fli|flc|flh|flx|dl)" },
"." },
{ "Audio files", { "Audio files",
"*.(au|wav|mp3|snd|mod|s3m|ra)", "*.(au|wav|mp3|snd|mod|s3m|ra)" },
"." },
{ "C program files", { "C program files",
"*.[ch]", "*.[ch]" },
"." },
{ "C++ program files", { "C++ program files",
"*.(cc|C|cpp|cxx|h|H)", "*.(cc|C|cpp|cxx|h|H)" },
"." },
{ "Objective-C program files", { "Objective-C program files",
"*.[mh]", "*.[mh]" },
"." },
{ "Scheme program files", { "Scheme program files",
"*.scm", "*.scm" },
"." },
{ "Assembler program files", { "Assembler program files",
"*.(s|S|asm)", "*.(s|S|asm)" },
"." },
{ "Misc. program files", { "Misc. program files",
"*.(awk|sed|lex|l|y|sh|idl|pl|py|am|in|f|el|bas|pas|java|sl|p|m4|tcl|pov)", "*.(awk|sed|lex|l|y|sh|idl|pl|py|am|in|f|el|bas|pas|java|sl|p|m4|tcl|pov)" },
"." },
{ "Font files", { "Font files",
"*.(pfa|pfb|afm|ttf|fon|pcf|pcf.gz|spd)", "*.(pfa|pfb|afm|ttf|fon|pcf|pcf.gz|spd)" }
"." }
}; };
static GtkWidget *filter_menu; static GtkWidget *filter_menu;
@ -1003,6 +983,7 @@ filter_item_select (GtkWidget *widget, gpointer data)
{ {
struct filter_item *fi = gtk_object_get_user_data (GTK_OBJECT (widget)); struct filter_item *fi = gtk_object_get_user_data (GTK_OBJECT (widget));
/* FIXME: the hintbar resizes horribly and screws the panel */
/* set_hintbar (easy_patterns ? fi->glob : fi->regexp); */ /* set_hintbar (easy_patterns ? fi->glob : fi->regexp); */
} }
@ -1017,8 +998,20 @@ filter_item_activate (GtkWidget *widget, gpointer data)
{ {
struct filter_item *fi = gtk_object_get_user_data (GTK_OBJECT (widget)); struct filter_item *fi = gtk_object_get_user_data (GTK_OBJECT (widget));
WPanel *panel = data; WPanel *panel = data;
int tmp;
char *pattern;
set_panel_filter_to (panel, g_strdup (easy_patterns ? fi->glob : fi->regexp)); if (easy_patterns)
pattern = g_strdup (fi->glob);
else {
/* This is sort of a hack to force convert_pattern() to actually convert the thing */
easy_patterns = 1;
pattern = convert_pattern (fi->glob, match_file, 0);
easy_patterns = 0;
}
set_panel_filter_to (panel, pattern);
} }
static void static void

Просмотреть файл

@ -1,3 +1,12 @@
1998-03-16 Federico Mena Quintero <federico@nuclecu.unam.mx>
* util.c (convert_pattern): Now the internal buffer is malloc()ed
instead of being static. This is required for long patterns.
(regexp_match): Free the pattern after calling convert_pattern().
* file.c (file_mask_dialog): Free the source_mask after calling
convert_pattern().
Mon Mar 16 13:03:45 1998 Pavel Roskin <pavel@absolute.spb.su> Mon Mar 16 13:03:45 1998 Pavel Roskin <pavel@absolute.spb.su>
* cmd.c: Internal edit is used by default. vi may be * cmd.c: Internal edit is used by default. vi may be

Просмотреть файл

@ -2025,6 +2025,7 @@ ask_file_mask:
} }
error = re_compile_pattern (source_mask, strlen (source_mask), &rx); error = re_compile_pattern (source_mask, strlen (source_mask), &rx);
free (source_mask);
if (error) { if (error) {
message_3s (1, " Error ", "Invalid source pattern `%s' \n %s ", message_3s (1, " Error ", "Invalid source pattern `%s' \n %s ",
orig_mask, error); orig_mask, error);

Просмотреть файл

@ -436,10 +436,11 @@ static char *maybe_end_group (char *d, int do_group, int *was_wildcard)
char *convert_pattern (char *pattern, int match_type, int do_group) char *convert_pattern (char *pattern, int match_type, int do_group)
{ {
char *s, *d; char *s, *d;
static char new_pattern [100]; char *new_pattern;
int was_wildcard = 0; int was_wildcard = 0;
if (easy_patterns){ if (easy_patterns){
new_pattern = malloc (sizeof (char) * strlen (pattern) * 4); /* times 4 to be safe */
d = new_pattern; d = new_pattern;
if (match_type == match_file) if (match_type == match_file)
*d++ = '^'; *d++ = '^';
@ -474,7 +475,7 @@ char *convert_pattern (char *pattern, int match_type, int do_group)
*d = 0; *d = 0;
return new_pattern; return new_pattern;
} else } else
return pattern; return strdup (pattern);
} }
int regexp_match (char *pattern, char *string, int match_type) int regexp_match (char *pattern, char *string, int match_type)
@ -490,9 +491,11 @@ int regexp_match (char *pattern, char *string, int match_type)
free (old_pattern); free (old_pattern);
} }
pattern = convert_pattern (pattern, match_type, 0); pattern = convert_pattern (pattern, match_type, 0);
if (regcomp (&r, pattern, REG_EXTENDED|REG_NOSUB|MC_ARCH_FLAGS)) if (regcomp (&r, pattern, REG_EXTENDED|REG_NOSUB|MC_ARCH_FLAGS)) {
free (pattern);
return -1; return -1;
old_pattern = strdup (pattern); }
old_pattern = pattern;
old_type = match_type; old_type = match_type;
} }
rval = !regexec (&r, string, 0, NULL, 0); rval = !regexec (&r, string, 0, NULL, 0);