SF 748973  Guido van Rossum patch

New Window should save in the directory of the Editor Window
from which it was selected.

M EditorWindow.py
M FileList.py
M IOBinding.py
diff --git a/Lib/idlelib/EditorWindow.py b/Lib/idlelib/EditorWindow.py
index fcb1612..2303537 100644
--- a/Lib/idlelib/EditorWindow.py
+++ b/Lib/idlelib/EditorWindow.py
@@ -139,7 +139,7 @@
             flist.inversedict[self] = key
             if key:
                 flist.dict[key] = self
-            text.bind("<<open-new-window>>", self.flist.new_callback)
+            text.bind("<<open-new-window>>", self.new_callback)
             text.bind("<<close-all-windows>>", self.flist.close_all_callback)
             text.bind("<<open-class-browser>>", self.open_class_browser)
             text.bind("<<open-path-browser>>", self.open_path_browser)
@@ -182,7 +182,7 @@
         self.UpdateRecentFilesList()
 
         if filename:
-            if os.path.exists(filename):
+            if os.path.exists(filename) and not os.path.isdir(filename):
                 io.loadfile(filename)
             else:
                 io.set_filename(filename)
@@ -210,6 +210,11 @@
             self.extensions['AutoIndent'].set_indentation_params(
                 self.ispythonsource(filename))
 
+    def new_callback(self, event):
+        dirname, basename = self.io.defaultfilename()
+        self.flist.new(dirname)
+        return "break"
+
     def set_status_bar(self):
         self.status_bar = self.MultiStatusBar(self.top)
         self.status_bar.set_label('column', 'Col: ?', side=RIGHT)
diff --git a/Lib/idlelib/FileList.py b/Lib/idlelib/FileList.py
index e01ce3c..7a46afa 100644
--- a/Lib/idlelib/FileList.py
+++ b/Lib/idlelib/FileList.py
@@ -58,8 +58,8 @@
         if edit is not None and lineno is not None:
             edit.gotoline(lineno)
 
-    def new(self):
-        return self.EditorWindow(self)
+    def new(self, filename=None):
+        return self.EditorWindow(self, filename)
 
     def new_callback(self, event):
         self.new()
diff --git a/Lib/idlelib/IOBinding.py b/Lib/idlelib/IOBinding.py
index cd2638c..e207750 100644
--- a/Lib/idlelib/IOBinding.py
+++ b/Lib/idlelib/IOBinding.py
@@ -179,12 +179,18 @@
         self.filename_change_hook = hook
 
     filename = None
+    dirname = None
 
     def set_filename(self, filename):
-        self.filename = filename
-        self.set_saved(1)
-        if self.filename_change_hook:
-            self.filename_change_hook()
+        if filename and os.path.isdir(filename):
+            self.filename = None
+            self.dirname = filename
+        else:
+            self.filename = filename
+            self.dirname = None
+            self.set_saved(1)
+            if self.filename_change_hook:
+                self.filename_change_hook()
 
     def open(self, event=None, editFile=None):
         if self.editwin.flist:
@@ -505,6 +511,8 @@
     def defaultfilename(self, mode="open"):
         if self.filename:
             return os.path.split(self.filename)
+        elif self.dirname:
+            return self.dirname, ""
         else:
             try:
                 pwd = os.getcwd()