diff -r ceae06796c52 -r 22494c109161 Filename.st --- a/Filename.st Tue Nov 11 22:30:16 2008 +0100 +++ b/Filename.st Wed Nov 12 14:10:54 2008 +0100 @@ -4319,14 +4319,15 @@ filenameCompletionIn:aDirectory "try to complete the receiver filename. + BAD DESIGN: has side effect on the receiver. This method has both a return value and a side effect on the receiver: it returns a collection of matching filename objects, - and changes the receivers filename-string to the longest common - match. - If none matches, the returned collection is empty and the recevier is unchanged. + and changes the receiver's filename-string to the longest common match. + If none matches, the returned collection is empty and the receiver is unchanged. If there is only one match, the size of the returned collection is exactly 1, - containing the fully expanded filename and the receivers name is changed to it." + containing the fully expanded filename and the receiver's name is changed to it. + An empty baseName pattern (i.e. giving the name of a directory) will also return an empty matchset." |dir baseName matching matchLen try allMatching sepString parentString prefix nMatch nm caseless lcBaseName| @@ -4354,7 +4355,9 @@ ] ifFalse:[ "/ more than one file longest := longest commonPrefixWith:fileName ignoreCase:caseless. - longest isEmpty ifTrue:[ ^ #() ]. + longest isEmpty ifTrue:[ + ^ #() + ]. ] ] ]. @@ -4440,9 +4443,9 @@ if I had a directory-prefix, change names in collection ... " prefix notNil ifTrue:[ - prefix = sepString ifTrue:[ + (prefix endsWith:sepString) ifTrue:[ "/ avoid introducing double slashes - prefix := '' + prefix := prefix copyWithoutLast:(sepString size). ]. matching := matching collect:[:n | prefix , sepString , n]. nMatch == 1 ifTrue:[ @@ -4466,9 +4469,9 @@ " trivial cases: - '../' asFilename filenameCompletion - '/' asFilename filenameCompletion - '/usr/' asFilename filenameCompletion + '../' asFilename filenameCompletion -> empty + '/' asFilename filenameCompletion -> empty + '/usr/' asFilename filenameCompletion -> empty 'mak' asFilename filenameCompletion 'Make' asFilename filenameCompletion @@ -4476,6 +4479,13 @@ '/u' asFilename filenameCompletion '../../libpr' asFilename filenameCompletion '/etc/mail/auth/xx' asFilename filenameCompletion + + 'c:\pr' asFilename filenameCompletion -> matching names + 'c:\pr' asFilename filenameCompletion; yourself -> side effect: name changed to longest match + 'c:\p' asFilename filenameCompletion + 'c:\' asFilename filenameCompletion -> empty + 'c:' asFilename filenameCompletion -> empty + '\' asFilename filenameCompletion -> empty " "Modified: / 22-09-1997 / 18:03:33 / stefan" @@ -5566,7 +5576,7 @@ !Filename class methodsFor:'documentation'! version - ^ '$Header: /cvs/stx/stx/libbasic/Filename.st,v 1.329 2008-10-01 17:45:15 cg Exp $' + ^ '$Header: /cvs/stx/stx/libbasic/Filename.st,v 1.330 2008-11-12 13:10:54 cg Exp $' ! ! Filename initialize!