>>> What if I simply change the script to create >>> symlinks to the MacVim icon when it runs on Tiger? Then people >>> building on Tiger will have somewhat useless document icons, but >>> that >>> sounds like the lesser of two evil. >> >> If there is nothing that you can use instead of pyobjc then I guess >> this is an ok compromise (anybody using Tiger who has an objection to >> this, please speak up). > > Could we keep one generic MacVim document icon in the repo and link to > that, just so they look like documents, not applications? Or is that > what you meant? > > Even if there is something that can be used instead of PyObjC, then > this > seems like a good step to take until/unless someone has time and > inclination to implement in something else.
The appended version uses the generic document icon on Tiger. Nico --~--~---------~--~----~------------~-------~--~----~ You received this message from the "vim_mac" maillist. For more information, visit http://www.vim.org/maillist.php -~----------~----~----~----~------~----~------~--~---
# Creates a document icon from an app icon and an optional text. # The font is not quite right, use this script to create a document icon # for 'PDF' and compare the D with the D in Preview's pdf.icns # http://www.macresearch.org/cocoa-scientists-part-xx-python-scriptersmeet-cocoa import os import sys try: from Foundation import * from AppKit import * dont_create = False except: dont_create = True # most likely because we're on tiger # icon types LARGE = 0 # 512, 128, 32, 16; about 96kB SMALL = 1 # 128, 32, 16; about 36kB LINK = 2 # Create link to generic icon; 4kB (== smallest block size on HFS+) # path to makeicns binary MAKEICNS = './makeicns' # List of icons to create GENERIC_ICON_NAME = 'doc-bm-generic' vimIcons = { GENERIC_ICON_NAME: [u'', LARGE], 'doc-bm-vim': [u'VIM', LARGE], 'doc-bm-txt': [u'TXT', SMALL], 'doc-bm-tex': [u'TEX', SMALL], 'doc-bm-h': [u'H', SMALL], 'doc-bm-c': [u'C', SMALL], 'doc-bm-m': [u'M', SMALL], 'doc-bm-mm': [u'MM', SMALL], 'doc-bm-cpp': [u'C\uff0b\uff0b', SMALL], # fullwidth plusses 'doc-bm-java': [u'JAVA', SMALL], 'doc-bm-f': [u'FTRAN', SMALL], 'doc-bm-html': [u'HTML', SMALL], 'doc-bm-xml': [u'XML', SMALL], 'doc-bm-js': [u'JS', SMALL], 'doc-bm-perl': [u'PERL', SMALL], 'doc-bm-py': [u'PYTHON', SMALL], 'doc-bm-php': [u'PHP', SMALL], 'doc-bm-rb': [u'RUBY', SMALL], 'doc-bm-bash': [u'SH', SMALL], 'doc-bm-patch': [u'DIFF', SMALL], 'doc-bm-applescript': [u'\uf8ffSCPT', SMALL], # apple sign 'doc-bm-as': [u'FLASH', LINK], 'doc-bm-asp': [u'ASP', LINK], 'doc-bm-bib': [u'BIB', LINK], 'doc-bm-cs': [u'C#', LINK], 'doc-bm-csfg': [u'CFDG', LINK], #D 'doc-bm-csv': [u'CSV', LINK], 'doc-bm-tsv': [u'TSV', LINK], 'doc-bm-cgi': [u'CGI', LINK], 'doc-bm-cfg': [u'CFG', LINK], 'doc-bm-css': [u'CSS', SMALL], 'doc-bm-dtd': [u'DTD', LINK], 'doc-bm-dylan': [u'DYLAN', LINK], 'doc-bm-erl': [u'ERLANG', SMALL], 'doc-bm-fscript': [u'FSCPT', SMALL], 'doc-bm-hs': [u'HS', SMALL], 'doc-bm-inc': [u'INC', LINK], 'doc-bm-ics': [u'ICS', SMALL], 'doc-bm-ini': [u'INI', LINK], 'doc-bm-io': [u'IO', LINK], 'doc-bm-bsh': [u'BSH', LINK], #D 'doc-bm-properties': [u'PROP', LINK], 'doc-bm-jsp': [u'JSP', SMALL], 'doc-bm-lisp': [u'LISP', SMALL], 'doc-bm-log': [u'LOG', SMALL], 'doc-bm-wiki': [u'WIKI', SMALL], 'doc-bm-ps': [u'PS', LINK], #'doc-bm-plist': [u'PLIST', SMALL], 'doc-bm-sch': [u'SCHEME', SMALL], 'doc-bm-sql': [u'SQL', SMALL], 'doc-bm-tcl': [u'TCL', SMALL], 'doc-bm-xsl': [u'XSL', LINK], 'doc-bm-vcf': [u'VCARD', SMALL], 'doc-bm-vb': [u'VBASIC', LINK], 'doc-bm-yaml': [u'YAML', SMALL], 'doc-bm-gtd': [u'GTD', LINK], #D } # Resources BACKGROUND = '/System/Library/CoreServices/CoreTypes.bundle/' + \ 'Contents/Resources/GenericDocumentIcon.icns' # might require leopard? APPICON = 'vim-noshadow-512.png' #APPICON = 'vim-noshadow-no-v-512.png' def createIcon(outname, text, iconname=APPICON, bgname=BACKGROUND): # Prepare input images bg = NSImage.alloc().initWithContentsOfFile_(bgname) if not bg: print 'Failed to load', bgname sys.exit(1) icon = NSImage.alloc().initWithContentsOfFile_(iconname) if not icon: print 'Failed to load', iconname sys.exit(1) # Prepare text format style = NSMutableParagraphStyle.new() style.setParagraphStyle_(NSParagraphStyle.defaultParagraphStyle()) style.setAlignment_(NSCenterTextAlignment) # http://developer.apple.com/documentation/Cocoa/Conceptual/AttributedStrings/Articles/standardAttributes.html#//apple_ref/doc/uid/TP40004903 fontname = 'LucidaGrande-Bold' attribs = { NSParagraphStyleAttributeName: style, NSParagraphStyleAttributeName: style, NSFontAttributeName: NSFont.fontWithName_size_(fontname, 72.0), NSKernAttributeName: -1.0, # tighten font a bit NSForegroundColorAttributeName: NSColor.colorWithDeviceWhite_alpha_( 0.34, 1) } if not attribs[NSFontAttributeName]: print 'Failed to load font', fontname sys.exit(1) # Draw! bg.lockFocus() w, h = 289, 289 icon.drawInRect_fromRect_operation_fraction_( (((512-w)/2 + 1, 405 - h), (w, h)), NSZeroRect, NSCompositeSourceOver, 1.0) text.drawInRect_withAttributes_( ((0, 7), (512, 119)), attribs) bg.unlockFocus() # Save # http://www.cocoadev.com/index.pl?NSImageToJPEG (this is retarded) tmp = NSBitmapImageRep.imageRepWithData_(bg.TIFFRepresentation()) png = tmp.representationUsingType_properties_(NSPNGFileType, None) png.writeToFile_atomically_(outname, True) TMPFILE = 'make_icons_tmp.png' def main(): if dont_create: print "PyObjC not found, only using a stock icon for document icons." import shutil shutil.copyfile(BACKGROUND, '%s.icns' % GENERIC_ICON_NAME) for name in vimIcons: if name == GENERIC_ICON_NAME: continue icnsName = '%s.icns' % name if os.access(icnsName, os.F_OK): os.remove(icnsName) os.symlink('%s.icns' % GENERIC_ICON_NAME, icnsName) return # Make us not crash # http://www.cocoabuilder.com/archive/message/cocoa/2008/8/6/214964 NSApplicationLoad() #createIcon('test.png', #NSString.stringWithString_(u'PDF'), iconname='preview.icns') if not os.access(MAKEICNS, os.X_OK): print 'Cannot find makeicns at', MAKEICNS return # create LARGE and SMALL icons first... for name, t in vimIcons.iteritems(): text, size = t if size == LINK: continue print name icnsName = '%s.icns' % name createIcon(TMPFILE, NSString.stringWithString_(text)) if size == LARGE: os.system('%s -512 %s -128 %s -32 %s -16 %s -out %s' % (MAKEICNS, TMPFILE, TMPFILE, TMPFILE, TMPFILE, icnsName)) elif size == SMALL: os.system('%s -128 %s -32 %s -16 %s -out %s' % (MAKEICNS, TMPFILE, TMPFILE, TMPFILE, icnsName)) # ...create links later (to make sure the link targets exist) for name, t in vimIcons.iteritems(): text, size = t if size != LINK: continue print name icnsName = '%s.icns' % name # remove old version of icns if os.access(icnsName, os.F_OK): os.remove(icnsName) os.symlink('%s.icns' % GENERIC_ICON_NAME, icnsName) if __name__ == '__main__': try: main() finally: if os.access(TMPFILE, os.F_OK): os.remove(TMPFILE)
