also support cmd-. in the interactive window
diff --git a/Mac/Tools/IDE/PyConsole.py b/Mac/Tools/IDE/PyConsole.py
index 8d44469..e60b138 100644
--- a/Mac/Tools/IDE/PyConsole.py
+++ b/Mac/Tools/IDE/PyConsole.py
@@ -78,12 +78,36 @@
 				text = string.join(string.split(text, "\r"), "\n")
 				if hasattr(MacOS, 'EnableAppswitch'):
 					saveyield = MacOS.EnableAppswitch(0)
-				self.pyinteractive.executeline(text, self, self._namespace)
+				self._scriptDone = False
+				if sys.platform == "darwin":
+					# see identical construct in PyEdit.py
+					from threading import Thread
+					t = Thread(target=self._userCancelledMonitor,
+							name="UserCancelledMonitor")
+					t.start()
+				try:
+					self.pyinteractive.executeline(text, self, self._namespace)
+				finally:
+					self._scriptDone = True
 				if hasattr(MacOS, 'EnableAppswitch'):
 					MacOS.EnableAppswitch(saveyield)
 				selstart, selend = self.getselection()
 				self._inputstart = selstart
 	
+	def _userCancelledMonitor(self):
+		# XXX duplicate code from PyEdit.py
+		import time, os
+		from signal import SIGINT
+		from Carbon import Evt
+		while not self._scriptDone:
+			if Evt.CheckEventQueueForUserCancel():
+				# Send a SIGINT signal to ourselves.
+				# This gets delivered to the main thread,
+				# cancelling the running script.
+				os.kill(os.getpid(), SIGINT)
+				break
+			time.sleep(0.25)
+	
 	def domenu_save_as(self, *args):
 		filename = EasyDialogs.AskFileForSave(message='Save console text as:', 
 			savedFileName='console.txt')