diff options
author | David E. O'Brien <obrien@FreeBSD.org> | 2002-03-25 03:18:52 +0000 |
---|---|---|
committer | David E. O'Brien <obrien@FreeBSD.org> | 2002-03-25 03:18:52 +0000 |
commit | a9b41500db71f988e16c4e23ea95e141fb9c641d (patch) | |
tree | d09201faee26a6bde76dc8ce466d867507c990d5 /shells/bash3 | |
parent | Fix build on 5-CURRENT. (diff) |
Make FINGORE gain a brain. If NO_FORCE_FIGNORE is set, and a file in the
FIGNORE list is the only possible match, expand it.
Diffstat (limited to 'shells/bash3')
-rw-r--r-- | shells/bash3/files/patch-bashline.c | 118 |
1 files changed, 118 insertions, 0 deletions
diff --git a/shells/bash3/files/patch-bashline.c b/shells/bash3/files/patch-bashline.c new file mode 100644 index 000000000000..62f2199612dc --- /dev/null +++ b/shells/bash3/files/patch-bashline.c @@ -0,0 +1,118 @@ +--- bashline.c.orig Mon Nov 5 09:58:59 2001 ++++ bashline.c Sun Mar 24 19:15:04 2002 +@@ -1724,10 +1724,6 @@ + } + } + +-/* Define NO_FORCE_FIGNORE if you want to match filenames that would +- otherwise be ignored if they are the only possible matches. */ +-/* #define NO_FORCE_FIGNORE */ +- + /* If FIGNORE is set, then don't match files with the given suffixes when + completing filenames. If only one of the possibilities has an acceptable + suffix, delete the others, else just return and let the completer +@@ -1752,10 +1748,15 @@ + { + char **newnames; + int idx, nidx; +-#ifdef NO_FORCE_FIGNORE + char **oldnames; + int oidx; +-#endif ++ char *no_force_fignore; ++ ++ ++/* Set NO_FORCE_FIGNORE if you want to match filenames that would ++ otherwise be ignored if they are the only possible matches. */ ++ no_force_fignore = get_string_value ("NO_FORCE_FIGNORE"); ++//fprintf(stderr, ">NO_FORCE_FIGNORE< is [%s]\n", no_force_fignore); + + /* If there is only one completion, see if it is acceptable. If it is + not, free it up. In any case, short-circuit and return. This is a +@@ -1763,13 +1764,12 @@ + if there is only one completion; it is the completion itself. */ + if (names[1] == (char *)0) + { +-#ifndef NO_FORCE_FIGNORE +- if ((*name_func) (names[0]) == 0) +- { +- free (names[0]); +- names[0] = (char *)NULL; +- } +-#endif ++ if (!no_force_fignore) ++ if ((*name_func) (names[0]) == 0) ++ { ++ free (names[0]); ++ names[0] = (char *)NULL; ++ } + return; + } + +@@ -1778,10 +1778,11 @@ + for (nidx = 1; names[nidx]; nidx++) + ; + newnames = alloc_array (nidx + 1); +-#ifdef NO_FORCE_FIGNORE +- oldnames = alloc_array (nidx - 1); +- oidx = 0; +-#endif ++ if (no_force_fignore) ++ { ++ oldnames = alloc_array (nidx - 1); ++ oidx = 0; ++ } + + newnames[0] = names[0]; + for (idx = nidx = 1; names[idx]; idx++) +@@ -1789,11 +1790,10 @@ + if ((*name_func) (names[idx])) + newnames[nidx++] = names[idx]; + else +-#ifndef NO_FORCE_FIGNORE +- free (names[idx]); +-#else +- oldnames[oidx++] = names[idx]; +-#endif ++ if (no_force_fignore) ++ oldnames[oidx++] = names[idx]; ++ else ++ free (names[idx]); + } + + newnames[nidx] = (char *)NULL; +@@ -1801,21 +1801,23 @@ + /* If none are acceptable then let the completer handle it. */ + if (nidx == 1) + { +-#ifndef NO_FORCE_FIGNORE +- free (names[0]); +- names[0] = (char *)NULL; +-#else +- free (oldnames); +-#endif ++ if (no_force_fignore) ++ free (oldnames); ++ else ++ { ++ free (names[0]); ++ names[0] = (char *)NULL; ++ } + free (newnames); + return; + } + +-#ifdef NO_FORCE_FIGNORE +- while (oidx) +- free (oldnames[--oidx]); +- free (oldnames); +-#endif ++ if (no_force_fignore) ++ { ++ while (oidx) ++ free (oldnames[--oidx]); ++ free (oldnames); ++ } + + /* If only one is acceptable, copy it to names[0] and return. */ + if (nidx == 2) |