[Edu-sig] Re: making an alias of a folder
Christopher Smith
csmith@blakeschool.org
Mon, 11 Feb 2002 09:09:35 -0600
Danny Yoo writes:
<cut>
>
>I don't have a Macintosh available at the moment, so I can't test this,
>but I believe that the macfs.NewAliasMinimalFromFullPath() is the function
>that you're looking for:
>
> http://www.python.org/doc/current/mac/module-macfs.html
I looked at that and didn't initially think that it was going to help but
your saying it might be the thing made me look again. Though I don't know
if I've got everything right, I do have a routine now that will make an
alias of a folder. I don't understand the "relative" option yet, though.
Those more in the know about the mac toolbox may see other things that I
don't know as well. :-) Until the macostools.makealias is fixed, this is
a workaround.
Thanks for the nudge, Danny. And thanks for filing a bug report, Jack.
/c
####
import macfs
from Carbon import Res
#
# Doesn't yet handle the relative option; I'm not sure what this
# means for an alias yet.
#
def mkfolderalias(src, dst, relative=None):
"""Create an alias to a folder"""
alias = macfs.NewAliasMinimalFromFullPath(dst)
dstfss = alias.Resolve()[0]
Res.FSpCreateResFile(dstfss, 'MACS', 'fdrp', -1)
# make it point at the src and update the resource
# {see Mac Lib Modules; v 2.2; sect 2.4.2 Alias Objects}
# If the source is itself an alias, the new alias
# will point at the same thing that the src alias is
# pointing at. If the src is *not* a folder it will then
# still point at the file but the icon will be a folder
# icon until it is updated by the Finder (e.g. after
# double clicking on it in the Finder).
#
alias.Update(src)
h = Res.FSpOpenResFile(dstfss, 3)
resource = Res.Resource(alias.data)
resource.AddResource('alis', 0, '')
Res.CloseResFile(h)
# turn it into an alias icon; before doing this the
# folder icon will be "busy and in use by the system"
#
dstfss = macfs.FSSpec(dst)
dstfinfo = dstfss.GetFInfo()
dstfinfo.Flags = dstfinfo.Flags|0x8000 # Alias flag
dstfss.SetFInfo(dstfinfo)
####