(* ShowNeighbours 0.9
Skripti näyttää valitun kansion naapurikansiot.
Harjoitelma AppleScriptin ja Finderin omituisuuksien seulomisessa.
Tuottaa käyttäjälle ymmärrettävät tulokset riippumatta mm.
valitun kansion läheisyydestä Työpöytään, joka sekoittaa herkästi
hakemistopolkujen selvittelyn olemalla eri levyjen kesken yhteinen.
Työpöytäkansion sijainti on skriptissä häivytetty kuten Finderissakin.
Vaatimukset Mac OS Classic, AppleScript, standard additions.
2001 Tuomas Rosberg <vanhentunut>
Lähdekoodi on ilmaista ja tarkoitettu yleiseen käyttöön (public domain).
Sitä lainattessa kirjoittajan nimi on mainittava.
Koodilla ei ole mitään takuuta, ja sen sisältävää ohjelmaa käyttävät
toimivat omalla vastuullaan.
*)
global otherFolders, originalFolder
on run
choose folder with prompt "Valitse kansio, jonka naapurikansiot haetaan."
set originalFolder to result
if (originalFolder as string) does not contain "FindByContent" then -- I hope this is invisible after AppleScript v. 1.3.4.
set otherFolders to {}
tell application "Finder"
try
set parentFolder to container of originalFolder
on error -- The original folder has no container, so it must be the Desktop Folder.
end try
end tell
try
set parentFolder to parentFolder as alias
my listNeighbours(parentFolder)
on error -- Container didn't coerse to an alias, so it must be desktop.
my listDesktop()
end try
my showResult()
else
display dialog ¬
"Näkemiin." buttons "Kiitos" default button 1
end if
end run
on listNeighbours(parentFolder)
list folder parentFolder without invisibles
set namesList to result
repeat with x in namesList
set pathText to (parentFolder as string) & contents of x
set anAlias to pathText as alias
if last character of (anAlias as string) is ":" then
tell application "Finder" to copy name of anAlias to aName
if (anAlias as string) does not contain "Desktop" then --'list folder' regards desktop folder visible, so it is picked by hand.
if anAlias is not originalFolder then
set anEntry to {{name:aName, path:anAlias}}
set otherFolders to otherFolders & anEntry
end if
end if
end if
end repeat
end listNeighbours
on listDesktop()
tell application "Finder"
set theList to every container in desktop
repeat with aContainer in theList
set aName to name of aContainer
try
set aContainer to aContainer as alias
if aContainer is not originalFolder then
set anEntry to {{name:aName, path:aContainer}}
set otherFolders to otherFolders & anEntry
end if
on error -- It is the trash can. Leave it.
end try
end repeat
end tell
end listDesktop
on showResult()
set namesList to {}
repeat with f in otherFolders
set namesList to namesList & name in f
end repeat
choose from list namesList
set chosenName to result
if chosenName is not false then -- 'choose from list' returns false if cancelled.
repeat with f in otherFolders
if name in f contains chosenName then
exit repeat
end if
end repeat
set chosenFolder to path in f
tell application "Finder"
activate
open chosenFolder
end tell
end if
end showResult