| 1 | """icopen patch
|
|---|
| 2 |
|
|---|
| 3 | OVERVIEW
|
|---|
| 4 |
|
|---|
| 5 | icopen patches MacOS Python to use the Internet Config file mappings to select
|
|---|
| 6 | the type and creator for a file.
|
|---|
| 7 |
|
|---|
| 8 | Version 1 released to the public domain 3 November 1999
|
|---|
| 9 | by Oliver Steele (steele@cs.brandeis.edu).
|
|---|
| 10 |
|
|---|
| 11 | DETAILS
|
|---|
| 12 |
|
|---|
| 13 | This patch causes files created by Python's open(filename, 'w') command (and
|
|---|
| 14 | by functions and scripts that call it) to set the type and creator of the file
|
|---|
| 15 | to the type and creator associated with filename's extension (the
|
|---|
| 16 | portion of the filename after the last period), according to Internet Config.
|
|---|
| 17 | Thus, a script that creates a file foo.html will create one that opens in whatever
|
|---|
| 18 | browser you've set to handle *.html files, and so on.
|
|---|
| 19 |
|
|---|
| 20 | Python IDE uses its own algorithm to select the type and creator for saved
|
|---|
| 21 | editor windows, so this patch won't effect their types.
|
|---|
| 22 |
|
|---|
| 23 | As of System 8.6 at least, Internet Config is built into the system, and the
|
|---|
| 24 | file mappings are accessed from the Advanced pane of the Internet control
|
|---|
| 25 | panel. User Mode (in the Edit menu) needs to be set to Advanced in order to
|
|---|
| 26 | access this pane.
|
|---|
| 27 |
|
|---|
| 28 | INSTALLATION
|
|---|
| 29 |
|
|---|
| 30 | Put this file in your Python path, and create a file named {Python}:sitecustomize.py
|
|---|
| 31 | that contains:
|
|---|
| 32 | import icopen
|
|---|
| 33 |
|
|---|
| 34 | (If {Python}:sitecustomizer.py already exists, just add the 'import' line to it.)
|
|---|
| 35 |
|
|---|
| 36 | The next time you launch PythonInterpreter or Python IDE, the patch will take
|
|---|
| 37 | effect.
|
|---|
| 38 | """
|
|---|
| 39 |
|
|---|
| 40 | from warnings import warnpy3k
|
|---|
| 41 | warnpy3k("In 3.x, the icopen module is removed.", stacklevel=2)
|
|---|
| 42 |
|
|---|
| 43 | import __builtin__
|
|---|
| 44 |
|
|---|
| 45 | _builtin_open = globals().get('_builtin_open', __builtin__.open)
|
|---|
| 46 |
|
|---|
| 47 | def _open_with_typer(*args):
|
|---|
| 48 | file = _builtin_open(*args)
|
|---|
| 49 | filename = args[0]
|
|---|
| 50 | mode = 'r'
|
|---|
| 51 | if args[1:]:
|
|---|
| 52 | mode = args[1]
|
|---|
| 53 | if mode[0] == 'w':
|
|---|
| 54 | from ic import error, settypecreator
|
|---|
| 55 | try:
|
|---|
| 56 | settypecreator(filename)
|
|---|
| 57 | except error:
|
|---|
| 58 | pass
|
|---|
| 59 | return file
|
|---|
| 60 |
|
|---|
| 61 | __builtin__.open = _open_with_typer
|
|---|
| 62 |
|
|---|
| 63 | """
|
|---|
| 64 | open('test.py')
|
|---|
| 65 | _open_with_typer('test.py', 'w')
|
|---|
| 66 | _open_with_typer('test.txt', 'w')
|
|---|
| 67 | _open_with_typer('test.html', 'w')
|
|---|
| 68 | _open_with_typer('test.foo', 'w')
|
|---|
| 69 | """
|
|---|