OSXOperatingSystem.st
author |
Jan Vrany <jan.vrany@labware.com> |
|
Wed, 22 Mar 2023 13:57:18 +0000 |
branch | jv |
changeset 25445 |
1623217d2268 |
parent 20642 |
56c52db3521a
|
child 21452 |
3435141db80f |
permissions |
-rw-r--r-- |
Cherry-picked OrderedCollection.st from 0b286fd51da7:
* d4c86d7c0bfc: #TUNING by stefan, Stefan Vogel <sv@exept.de>
* 692b6497a669: #DOCUMENTATION by stefan, Stefan Vogel <sv@exept.de>
* d47bb2912953: #DOCUMENTATION by stefan, Stefan Vogel <sv@exept.de>
* abb4316c6bff: #FEATURE by cg, Claus Gittinger <cg@exept.de>
* 3a8fce0e8d11: #TUNING by stefan, Stefan Vogel <sv@exept.de>
* 03d29bf8c5bb: #REFACTORING by stefan, Stefan Vogel <sv@exept.de>
* cccc6c4abcfc: #REFACTORING by stefan, Stefan Vogel <sv@exept.de>
* 35d957c7a840: #FEATURE by cg, Claus Gittinger <cg@exept.de>
* 6b11890f5f2c: #OTHER by cg, Claus Gittinger <cg@exept.de>
* abb6108fb06b: #FEATURE by cg, Claus Gittinger <cg@exept.de>
* 2c4768bb2e89: #FEATURE by cg, Claus Gittinger <cg@exept.de>
* 4029e964d0f1: #FEATURE by cg, Claus Gittinger <cg@exept.de>
* ddcab3a9c2df: #OTHER by cg, Claus Gittinger <cg@exept.de>
* 2213eb56e0c7: #REFACTORING by exept, Claus Gittinger <cg@exept.de>
* 09ca874a6160: #REFACTORING by exept, Claus Gittinger <cg@exept.de>
* 30b332af1f33: #BUGFIX by stefan, Stefan Vogel <sv@exept.de>
* 779764ba117b: #REFACTORING by cg, Claus Gittinger <cg@exept.de>
* b3d232a613c9: #BUGFIX by stefan, Stefan Vogel <sv@exept.de>
* c417f7edaec1: #BUGFIX by stefan, Stefan Vogel <sv@exept.de>
* 904b6538f379: #FEATURE by exept, Claus Gittinger <cg@exept.de>
* c5887f03e01f: #REFACTORING by stefan, Stefan Vogel <sv@exept.de>
* 8912d03aff48: #BUGFIX by exept, Claus Gittinger <cg@exept.de>
* de5cd1dab4c3: #DOCUMENTATION by exept, Claus Gittinger <cg@exept.de>
* 9bbd26603378: #OTHER by exept, Claus Gittinger <cg@exept.de>
* c2c9dc110f42: #FEATURE by stefan, Stefan Vogel <sv@exept.de>
* 81d123c6703d: #DOCUMENTATION by stefan, Stefan Vogel <sv@exept.de>
* 8aadbb21458a: #BUGFIX by stefan, Stefan Vogel <sv@exept.de>
* f210dbb8b2f6: #TUNING by stefan, Stefan Vogel <sv@exept.de>
* c2c774fc53c0: #FEATURE by exept, Claus Gittinger <cg@exept.de>
* b6f462670875: #DOCUMENTATION by exept, Claus Gittinger <cg@exept.de>
* 27ae4021d5d6: #FEATURE by stefan, Stefan Vogel <sv@exept.de>
* 10d9e9d85594: #TUNING by exept, Claus Gittinger <cg@exept.de>
* 2653d855dcc7: #DOCUMENTATION by exept, Claus Gittinger <cg@exept.de>
* 6ea1698a1a34: #FEATURE by stefan, Stefan Vogel <sv@exept.de>
* 28762315e664: #OTHER by exept, Claus Gittinger <cg@exept.de>
* 7142ea786f3e: #TUNING by stefan, Stefan Vogel <sv@exept.de>
* 7875acb42b53: #BUGFIX by stefan, Stefan Vogel <sv@exept.de>
* 163a0eebc97e: #BUGFIX by Maren, matilk
"{ Package: 'stx:libbasic' }"
"{ NameSpace: Smalltalk }"
UnixOperatingSystem subclass:#OSXOperatingSystem
instanceVariableNames:''
classVariableNames:''
poolDictionaries:''
category:'OS-Unix'
!
!OSXOperatingSystem class methodsFor:'initialization'!
initializeCodeset
super initializeCodeset.
Codeset := #'utf8-mac'.
CodesetEncoder := nil.
! !
!OSXOperatingSystem class methodsFor:'dummy shell operations'!
openApplicationHelperCommand
"Return a command line helper to open a default application for file or URL"
(self canExecuteCommand: 'open') ifTrue:[
^ 'open'
].
^ nil
"Created: / 13-01-2015 / 09:23:18 / Jan Vrany <jan.vrany@fit.cvut.cz>"
!
openTerminalWithCommand:shellCommand inBackground:inBackground
"open a new terminal, which executes a command"
|cmd|
cmd := 'osascript -e ''tell application "Terminal" to do script "%1"''' bindWith:shellCommand.
inBackground ifTrue:[
^ self
startProcess:cmd
inputFrom:nil
outputTo:nil
errorTo:nil
auxFrom:nil
environment:nil
inDirectory:nil
] ifFalse:[
^ self executeCommand:cmd
].
"
OSXOperatingSystem openTerminalWithCommand:'ls -l' inBackground:true
"
! !
!OSXOperatingSystem class methodsFor:'file queries'!
caseSensitiveFilenames
"return true, if the OS has caseSensitive file naming.
On MSDOS, this will return false;
on a real OS, we return true.
Be aware, that OSX can be configured to be either.
Also, that it actually depends on the mounted volume"
"/ actually, this is wrong and depends on the mounted volume;
"/ so we need a query for a particular directory (and/or volume).
^ false
"Modified: / 5.6.1998 / 18:35:18 / cg"
!
defaultPackagePath
"redefined to add /Application and /Library stuff"
"called by Smalltalk initSystemPath"
"self defaultPackagePath"
|path executablePath executableDir packagesDir
libDir appDir versionsDir vsnDirName vsnDir|
path := super defaultPackagePath.
executablePath := OperatingSystem pathOfSTXExecutable.
executablePath notNil ifTrue:[
executableDir := executablePath asFilename directory.
packagesDir := executableDir directory directory / 'Packages'.
packagesDir exists ifTrue:[
packagesDir := packagesDir pathName.
(path includes:packagesDir) ifFalse:[
path add:packagesDir.
].
].
libDir := '/Library/Frameworks/SmalltalkX.framework' asFilename.
libDir exists ifTrue:[
versionsDir := libDir / 'Versions'.
versionsDir exists ifTrue:[
vsnDirName := '%1.%2.%3'
bindWith:Smalltalk majorVersionNr
with:Smalltalk minorVersionNr
with:Smalltalk revisionNr.
vsnDir := versionsDir / vsnDirName.
vsnDir exists ifTrue:[
vsnDir := vsnDir pathName.
(path includes:vsnDir) ifFalse:[
path add:vsnDir.
].
].
].
].
appDir := '/Applications/SmalltalkX/' asFilename.
appDir exists ifTrue:[
versionsDir := appDir / 'Versions'.
versionsDir exists ifTrue:[
vsnDirName := '%1.%2.%3'
bindWith:Smalltalk majorVersionNr
with:Smalltalk minorVersionNr
with:Smalltalk revisionNr.
vsnDir := versionsDir / vsnDirName.
vsnDir exists ifTrue:[
vsnDir := vsnDir pathName.
(path includes:vsnDir) ifFalse:[
path add:vsnDir.
].
].
].
].
].
^ path
!
getDriveList
"return a list of volumes in the system."
^ ('/Volumes' asFilename directoryContents)
, super getDriveList
!
getTrashDirectory
"get the name of a trash folder (if the OS supports it),
or nil, if not.
Must be redefined to return non nil in concrete operating systems"
^ '~/.Trash'
!
pathNameForDrive:driveName
"given a drive name, return the pathname to open it as a directory.
For Windows, this is the driveName itself.
For OSX, '/Volumes' is prepended.
Other OSs might prepent the pount point (i.e. /mnt/)"
driveName isNil ifTrue:[^ nil].
driveName asFilename isAbsolute ifTrue:[^ driveName].
^ '/Volumes/',driveName
!
supportsVolumes
"return true if the os support a list of drives/volumes
(here we can return a list of mounted drives in /Volumes)"
^ true
! !
!OSXOperatingSystem class methodsFor:'documentation'!
version
^ '$Header$'
!
version_CVS
^ '$Header$'
! !