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().
Этот коммит содержится в:
родитель
9d4987c84b
Коммит
4a883be09e
@ -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);
|
||||||
|
11
src/util.c
11
src/util.c
@ -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);
|
||||||
|
Загрузка…
x
Ссылка в новой задаче
Block a user