Forward port of various fixes that were initially only done on the
release23-maint branch:
- Remember the scroll position when rebuilding the browser (as we do far
too often). Fixes #824430.
- Allow for the documentation to be inside PythonIDE as well as in
the Python.app inside the framework (the original location for 2.3).
- Updated version numbers
- In PythonIDE, add the Tools/IDE directory as the second entry in
sys.path in stead of as the first, leaving PythonIDE.app/Contents/Resources
as the first one.
- The code for setting the working directory to $HOME was both incorrect
and in the wrong place, fixed.
- On OSX the default location for IDE scripts is now
$HOME/Library/Python/IDE-Scripts.
diff --git a/Mac/Tools/IDE/PythonIDEMain.py b/Mac/Tools/IDE/PythonIDEMain.py
index 5987c10..3ad35b7 100644
--- a/Mac/Tools/IDE/PythonIDEMain.py
+++ b/Mac/Tools/IDE/PythonIDEMain.py
@@ -32,6 +32,11 @@
 class PythonIDE(Wapplication.Application):
 	
 	def __init__(self):
+		if sys.platform == "darwin":
+			if len(sys.argv) > 1 and sys.argv[1].startswith("-psn"):
+				home = os.getenv("HOME")
+				if home:
+					os.chdir(home)
 		self.preffilepath = os.path.join("Python", "PythonIDE preferences")
 		Wapplication.Application.__init__(self, 'Pide')
 		from Carbon import AE
@@ -49,11 +54,6 @@
 				self.quitevent)
 		import PyConsole, PyEdit
 		Splash.wait()
-		if sys.platform == "darwin":
-			if sys.argv and sys.argv[0].startswith("-psn"):
-				home = os.getenv("HOME")
-				if home:
-					os.chdir(home)
 		# With -D option (OSX command line only) keep stderr, for debugging the IDE
 		# itself.
 		debug_stderr = None
@@ -140,9 +140,12 @@
 		except:
 			path = os.path.join(os.getcwd(), "Mac", "IDE scripts")
 			if not os.path.exists(path):
-				path = os.path.join(os.getcwd(), "Scripts")
+				if sys.platform == "darwin":
+					path = os.path.join(os.getenv("HOME"), "Library", "Python", "IDE-Scripts")
+				else:
+					path = os.path.join(os.getcwd(), "Scripts")
 				if not os.path.exists(path):
-					os.mkdir(path)
+					os.makedirs(path)
 					f = open(os.path.join(path, "Place your scripts here"+ELIPSES), "w")
 					f.close()
 			fsr = File.FSRef(path)
@@ -451,11 +454,31 @@
 		# is located in the framework, but there's a symlink in Python.app.
 		# And as AHRegisterHelpBook wants a bundle (with the right bits in
 		# the plist file) we refer it to Python.app
+		#
+		# To make matters worse we have to look in two places: first in the IDE
+		# itself, then in the Python application inside the framework.
+		has_help = False
+		has_doc = False
+		ide_path_components = sys.argv[0].split("/")
+		if ide_path_components[-3:] == ["Contents", "Resources", "PythonIDE.py"]:
+			ide_app = "/".join(ide_path_components[:-3])
+			help_source = os.path.join(ide_app, 'Contents/Resources/English.lproj/Documentation')
+			doc_source = os.path.join(ide_app, 'Contents/Resources/English.lproj/PythonDocumentation')
+			has_help = os.path.isdir(help_source)
+			has_doc = os.path.isdir(doc_source)
+			if has_help or has_doc:
+				try:
+					from Carbon import AH
+					AH.AHRegisterHelpBook(ide_app)
+				except (ImportError, MacOS.Error), arg:
+					pass # W.Message("Cannot register Python Documentation: %s" % str(arg))
 		python_app = os.path.join(sys.prefix, 'Resources/Python.app')
-		help_source = os.path.join(python_app, 'Contents/Resources/English.lproj/Documentation')
-		doc_source = os.path.join(python_app, 'Contents/Resources/English.lproj/PythonDocumentation')
-		has_help = os.path.isdir(help_source)
-		has_doc = os.path.isdir(doc_source)
+		if not has_help:
+			help_source = os.path.join(python_app, 'Contents/Resources/English.lproj/Documentation')
+			has_help = os.path.isdir(help_source)
+		if not has_doc:
+			doc_source = os.path.join(python_app, 'Contents/Resources/English.lproj/PythonDocumentation')
+			has_doc = os.path.isdir(doc_source)
 		if has_help or has_doc:
 			try:
 				from Carbon import AH