Thread: [A-A-P-develop] Wildcards in file names
Brought to you by:
vimboss
From: Bram M. <Br...@mo...> - 2003-05-12 21:00:38
|
Until now wildcard expansion had to be done explicitly with the Python glob() function. Thus a list of files would look like: FILES = abc `glob("*.py")` efg `glob("images/*.png")` xyz This is fine for people who know Python and have some idea what backticks do. But it is rather verbose and obscure for others. The alternative is to use the wildcards directly: FILES = abc *.py efg images/*.png xyz The main reason I did not do this was that it becomes more difficult to use a literal "*". Same for other wildcards: "?" and "[]". However, "$" and "#" already need to be escaped. And in a command like ":copy" wildcards are already expanded, thus it is a bit inconsistant. For escaping I would continue using what is currently done for "$" and "#": use to get $$ $ $# # $* * conflicts with current use of $* $? ? conflicts with current use of $? $[ [ more obvious to use for $[something] Thus we need something else for escaping, perhaps $star, $question and $bracket, but these are quite long... Ideas? Using backslashes is not a very nice solution, you always end up doubling them an unknown number of times and on MS-Windows the backslash is used as a path separator. The main disadvantage I still see is that it's not that easy to spot the wildcard. But perhaps that is not very important. What do you think, should we keep the glob() call or use wildcards directly? -- The software said it requires Windows 95 or better, so I installed Linux. /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\ /// Creator of Vim - Vi IMproved -- http://www.Vim.org \\\ \\\ Project leader for A-A-P -- http://www.A-A-P.org /// \\\ Help AIDS victims, buy at Amazon -- http://ICCF.nl/click1.html /// |
From: Aschwin M. <a.marsman@aYniK.com> - 2003-05-12 21:28:59
|
On Mon, 12 May 2003, Bram Moolenaar wrote: > Until now wildcard expansion had to be done explicitly with the Python > glob() function. Thus a list of files would look like: ... > This is fine for people who know Python and have some idea what > backticks do. But it is rather verbose and obscure for others. > > The alternative is to use the wildcards directly: ... > The main reason I did not do this was that it becomes more difficult to > use a literal "*". Same for other wildcards: "?" and "[]". However, > "$" and "#" already need to be escaped. And in a command like ":copy" > wildcards are already expanded, thus it is a bit inconsistant. > > For escaping I would continue using what is currently done for "$" and > "#": > > use to get > $$ $ > $# # > $* * conflicts with current use of $* > $? ? conflicts with current use of $? > $[ [ more obvious to use for $[something] > > Thus we need something else for escaping, perhaps $star, $question and > $bracket, but these are quite long... Ideas? Using backslashes is not > a very nice solution, you always end up doubling them an unknown number > of times and on MS-Windows the backslash is used as a path separator. I would vote for not using the glob() call, but use wildcards directly, by using the backslash for escaping. It's used a couple of languages already, and why try to invent the wheel, a-a-p is using a new syntax already, let's make the learning curve as easy as possible. > The main disadvantage I still see is that it's not that easy to spot the > wildcard. But perhaps that is not very important. > > What do you think, should we keep the glob() call or use wildcards > directly? Best regards, Aschwin Marsman -- aYniK Software Solutions all You need is Knowledge Bedrijvenpark Twente 305 NL-7602 KL Almelo - the Netherlands P.O. box 134 NL-7600 AC Almelo - the Netherlands a.marsman@aYniK.com http://www.aYniK.com |
From: Bram M. <Br...@mo...> - 2003-05-13 09:05:23
|
Aschwin Marsman wrote: > I would vote for not using the glob() call, but use wildcards directly, > by using the backslash for escaping. It's used a couple of languages > already, and why try to invent the wheel, a-a-p is using a new syntax > already, let's make the learning curve as easy as possible. I'll count the vote to use wildcards directly. Using a backslash has a serious problem for when a backslash is used as path separator: foo\* Does this mean: everything in directory "foo", or: the file "foo*"? From my work on Vim I know this ambiguety cannot be solved and keeps causing trouble forever. All these magic sequences to escape the special meaning of characters such as '$', '#' and '*' might become complicated. We need an easy way. Preferably one where you don't have to search in the documentation for the solution. Thus $star, $questionmark and $squarebracket are not good solutions. Would it be sufficient to take a character literally when it appears in quotes? Example: foo"*" file "foo*" "dir with spaces"/* everything in directory "dir with spaces" An exception would be "$", because it will be expanded inside quotes as well. This requires using $$, which is not too difficult to understand. Oh, and the backtick is also doubled to avoid its special meaning (but it's illegal in file names on many systems, thus it won't occur often). From the user point of view, another method would be to use a Python expression: foo`"*"` However, the Python expression is evaluated before we can see the result, thus the Aap functions will see "foo*". It doesn't look very nice anyway. Yet another method would be to use $(): foo$(*) foo$(?) foo$([) Does that sound like a good solution? We could also use $($) instead of $$ then, for consistency. The implementation still won't be simple, but you can leave that to me... -- Microsoft's definition of a boolean: TRUE, FALSE, MAYBE "Embrace and extend"...? /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\ /// Creator of Vim - Vi IMproved -- http://www.Vim.org \\\ \\\ Project leader for A-A-P -- http://www.A-A-P.org /// \\\ Help AIDS victims, buy at Amazon -- http://ICCF.nl/click1.html /// |
From: Nikolai :: lone-s. :: W. <lon...@ho...> - 2003-05-12 21:50:03
|
On Mon, 12 May 2003 23:00:29 +0200, Bram Moolenaar wrote something resembling: > > Until now wildcard expansion had to be done explicitly with the Python > glob() function. Thus a list of files would look like: > > FILES = abc > `glob("*.py")` > efg > `glob("images/*.png")` > xyz > [snip] > > What do you think, should we keep the glob() call or use wildcards > directly? > i've always found it strange that wildcards aren't expanded everywhere in Makefiles. Personally, i think that auto-expanding is a nice feature, and escaping is less often necessary than expansion. There is of course a problem with how to escape the necessary characters. I guess one way would be to use Python for that case instead. But that would mean you would need a lot of text for possibly a single character (more than $star and friends). -- ::: name: Nikolai Weibull :: aliases: pcp / lone-star ::: ::: born: Chicago, IL USA :: loc atm: Gothenburg, Sweden ::: ::: page: www.pcppopper.org :: fun atm: gf,lps,ruby,php,war3 ::: main(){printf(&linux["\021%six\012\0"],(linux)["have"]+"fun"-97);} |