#FEATURE by stefan
class: PCFilename
added: #nameWithSpecialExpansions:
changed: #osNameForFile
do %EnvironmentVariable% - expansion in Filenames
--- a/PCFilename.st Fri Aug 12 17:44:15 2016 +0200
+++ b/PCFilename.st Fri Aug 12 17:45:11 2016 +0200
@@ -11,6 +11,8 @@
"
"{ Package: 'stx:libbasic' }"
+"{ NameSpace: Smalltalk }"
+
Filename subclass:#PCFilename
instanceVariableNames:''
classVariableNames:'StandardSuffixTable NextTempFilenameIndex'
@@ -218,6 +220,32 @@
^ 'c:'
! !
+!PCFilename class methodsFor:'misc'!
+
+nameWithSpecialExpansions:aString
+ "return the nameString, expanding any OS specific macros.
+ Here, a ~/ or ~user/ prefix is expanded to the users home dir (as in csh)"
+
+ |expandedString|
+
+ expandedString := aString.
+ (expandedString includes:$%) ifTrue:[
+ expandedString := OperatingSystem expandEnvironmentStrings:expandedString.
+ ].
+
+ (expandedString startsWith:$~) ifTrue:[
+ ^ super nameWithSpecialExpansions:expandedString.
+ ].
+ ^ expandedString
+
+ "
+ self nameWithSpecialExpansions:'c:/windows'
+ self nameWithSpecialExpansions:'%ProgramFiles%\exept\expecco'
+ self nameWithSpecialExpansions:'~\exept\expecco'
+ self nameWithSpecialExpansions:'~stefan\exept\expecco'
+ "
+! !
+
!PCFilename class methodsFor:'queries'!
isBadCharacter:aCharacter
@@ -907,11 +935,8 @@
"internal - return the OS's name for the receiver to
access it as a file."
- (nameString includes:$~) ifTrue:[
- (nameString startsWith:'~') ifTrue:[
- ^ self class nameWithSpecialExpansions:nameString.
- ].
- "/ self makeNonDOSName.
+ (nameString includesAny:'~%') ifTrue:[
+ ^ self class nameWithSpecialExpansions:nameString.
].
^ nameString
@@ -941,3 +966,4 @@
version_SVN
^ '$Id$'
! !
+