text: import os
  from Tkinter import *
  import tkMessageBox
  
  
  class FileList:
  
      # N.B. this import overridden in PyShellFileList.
      from idlelib.EditorWindow import EditorWindow
  
      def __init__(self, root):
          self.root = root
          self.dict = {}
          self.inversedict = {}
          self.vars = {} # For EditorWindow.getrawvar (shared Tcl variables)
  
      def open(self, filename, action=None):
          assert filename
          filename = self.canonize(filename)
          if os.path.isdir(filename):
              # This can happen when bad filename is passed on command line:
              tkMessageBox.showerror(
                  "File Error",
                  "%r is a directory." % (filename,),
                  master=self.root)
              return None
          key = os.path.normcase(filename)
          if self.dict.has_key(key):
              edit = self.dict[key]
              edit.top.wakeup()
              return edit
          if action:
              # Don't create window, perform 'action', e.g. open in same window
              return action(filename)
          else:
              return self.EditorWindow(self, filename, key)
  
      def gotofileline(self, filename, lineno=None):
          edit = self.open(filename)
          if edit is not None and lineno is not None:
              edit.gotoline(lineno)
  
      def new(self, filename=None):
          return self.EditorWindow(self, filename)
  
      def close_all_callback(self, event):
          for edit in self.inversedict.keys():
              reply = edit.close()
              if reply == "cancel":
                  break
          return "break"
  
      def unregister_maybe_terminate(self, edit):
          try:
              key = self.inversedict[edit]
          except KeyError:
              print "Don't know this EditorWindow object.  (close)"
              return
          if key:
              del self.dict[key]
          del self.inversedict[edit]
          if not self.inversedict:
              self.root.quit()
  
      def filename_changed_edit(self, edit):
          edit.saved_change_hook()
          try:
              key = self.inversedict[edit]
          except KeyError:
              print "Don't know this EditorWindow object.  (rename)"
              return
          filename = edit.io.filename
          if not filename:
              if key:
                  del self.dict[key]
              self.inversedict[edit] = None
              return
          filename = self.canonize(filename)
          newkey = os.path.normcase(filename)
          if newkey == key:
              return
          if self.dict.has_key(newkey):
              conflict = self.dict[newkey]
              self.inversedict[conflict] = None
              tkMessageBox.showerror(
                  "Name Conflict",
                  "You now have multiple edit windows open for %r" % (filename,),
                  master=self.root)
          self.dict[newkey] = edit
          self.inversedict[edit] = newkey
          if key:
              try:
                  del self.dict[key]
              except KeyError:
                  pass
  
      def canonize(self, filename):
          if not os.path.isabs(filename):
              try:
                  pwd = os.getcwd()
              except os.error:
                  pass
              else:
                  filename = os.path.join(pwd, filename)
          return os.path.normpath(filename)
  
  
  def _test():
      from idlelib.EditorWindow import fixwordbreaks
      import sys
      root = Tk()
      fixwordbreaks(root)
      root.withdraw()
      flist = FileList(root)
      if sys.argv[1:]:
          for filename in sys.argv[1:]:
              flist.open(filename)
      else:
          flist.new()
      if flist.inversedict:
          root.mainloop()
  
  if __name__ == '__main__':
      _test()
  