Difference between revisions of "Machacks"

From Madagascar
Jump to navigation Jump to search
 
Line 7: Line 7:
 
# Use the following python file (named ClickPen.py). Adapt the sfpen path as needed, or use an environmental variable:
 
# Use the following python file (named ClickPen.py). Adapt the sfpen path as needed, or use an environmental variable:
  
<pre>
+
<syntaxhighlight lang="python">
 
#!/usr/bin/env python
 
#!/usr/bin/env python
 
# -*- coding: utf-8 -*-
 
# -*- coding: utf-8 -*-
Line 45: Line 45:
 
for f in sys.argv[1:]:
 
for f in sys.argv[1:]:
 
     doOpenFile(f)
 
     doOpenFile(f)
</pre>
+
</syntaxhighlight>
  
 
# Use the following setup file (named setup.py):
 
# Use the following setup file (named setup.py):
<pre>
+
<syntaxhighlight lang="python">
 
"""
 
"""
 
This is a setup.py script generated by py2applet
 
This is a setup.py script generated by py2applet
Line 85: Line 85:
 
     setup_requires=['py2app'],
 
     setup_requires=['py2app'],
 
)
 
)
</pre>
+
</syntaxhighlight>
  
  

Latest revision as of 14:44, 3 April 2015

On this page you can find a few hacks for MacOS users.


Open Vplot files with Double Click

This actually requires an application. MacOS cannot use shell scripts as applications, and the application also needs to be able to parse arguments (needed for the double click funcionality - the instigating file becomes the first argument). The below steps will turn a simple python script into an Application. First, install py2ap and then follow the below instructions (based on a website of MooSystems).

  1. Use the following python file (named ClickPen.py). Adapt the sfpen path as needed, or use an environmental variable:
#!/usr/bin/env python
# -*- coding: utf-8 -*-
"""This piece of code shows how to accept 'Open Document' Apple Events in
your Python / Tk application."""

import os
import sys
import commands
import logging
import logging.handlers

# configure logging
home_dir = os.path.expanduser('~')
log_file = os.path.join(home_dir,
                        "Library/Logs/CliclPen.log")
log = logging.getLogger("main")
log.setLevel(logging.DEBUG)
handler = logging.handlers.RotatingFileHandler(log_file,
                                               maxBytes=30000000,
                                               backupCount=10)
handler.setLevel(logging.DEBUG)
fmt = logging.Formatter('%(asctime)s - %(message)s')
handler.setFormatter(fmt)
log.addHandler(handler)

# callback which gets invoked when files or folders are sent to our app:
def doOpenFile(*args):
    for f in args:
        if os.path.isfile(f):
            command = '/opt/RSF/bin/sfpen %s'%(f)
            commands.getoutput(command)
        else:
            log.info("'%s' is not compatible." % f)

# when the app starts up, check for command-line arguments:
for f in sys.argv[1:]:
    doOpenFile(f)
  1. Use the following setup file (named setup.py):
"""
This is a setup.py script generated by py2applet

Usage:
    python setup.py py2app
"""

from setuptools import setup

APP = ['ClickPen.py']
DATA_FILES = []
OPTIONS = {'argv_emulation': True,
           'plist': {
                'CFBundleDocumentTypes': [{
                    'CFBundleTypeName': "File suffix of my app's documents",
                    'CFBundleTypeRole': "Editor",
                    'LSHandlerRank': "Owner",
                    'LSItemContentTypes': ["ClickPen"],
                }],
                'UTExportedTypeDeclarations': [{
                    'UTTypeConformsTo': ["public.data"],
                    'UTTypeIdentifier': "ClickPen",
                    'UTTypeDescription': "File suffix of my app's documents",
                    'UTTypeTagSpecification': {'public.filename-extension': ".vpl"}
                }],
                'CFBundleIdentifier': "ClickPen",
                'CFBundleName': "ClickPen"
            }
          }

setup(
    app=APP,
    data_files=DATA_FILES,
    options={'py2app': OPTIONS},
    setup_requires=['py2app'],
)


  1. Run the following command:
python setup.py py2app
  1. Now in the dist folder you should find a ClickPen.app program. Use it wisely.