[Python-checkins] commit of r41551 - in python/trunk: Lib/idlelib Misc

martin.v.loewis@python.org martin.v.loewis at python.org
Sun Nov 27 17:59:11 CET 2005


Author: martin.v.loewis
Date: Sun Nov 27 17:59:04 2005
New Revision: 41551

Modified:
   python/trunk/Lib/idlelib/EditorWindow.py
   python/trunk/Lib/idlelib/IOBinding.py
   python/trunk/Misc/NEWS
Log:
Patch #1162825: Support non-ASCII characters in IDLE window titles.


Modified: python/trunk/Lib/idlelib/EditorWindow.py
==============================================================================
--- python/trunk/Lib/idlelib/EditorWindow.py	(original)
+++ python/trunk/Lib/idlelib/EditorWindow.py	Sun Nov 27 17:59:04 2005
@@ -42,7 +42,7 @@
     from Percolator import Percolator
     from ColorDelegator import ColorDelegator
     from UndoDelegator import UndoDelegator
-    from IOBinding import IOBinding
+    from IOBinding import IOBinding, filesystemencoding, encoding
     import Bindings
     from Tkinter import Toplevel
     from MultiStatusBar import MultiStatusBar
@@ -256,6 +256,21 @@
         self.askinteger = tkSimpleDialog.askinteger
         self.showerror = tkMessageBox.showerror
 
+    def _filename_to_unicode(self, filename):
+        """convert filename to unicode in order to display it in Tk"""
+        if isinstance(filename, unicode) or not filename:
+            return filename
+        else:
+            try:
+                return filename.decode(self.filesystemencoding)
+            except UnicodeDecodeError:
+                # XXX
+                try:
+                    return filename.decode(self.encoding)
+                except UnicodeDecodeError:
+                    # byte-to-byte conversion
+                    return filename.decode('iso8859-1')
+
     def new_callback(self, event):
         dirname, basename = self.io.defaultfilename()
         self.flist.new(dirname)
@@ -675,8 +690,10 @@
             menu.delete(1, END)  # clear, and rebuild:
             for i, file in zip(count(), rf_list):
                 file_name = file[0:-1]  # zap \n
+                # make unicode string to display non-ASCII chars correctly
+                ufile_name = self._filename_to_unicode(file_name)
                 callback = instance.__recent_file_callback(file_name)
-                menu.add_command(label=ulchars[i] + " " + file_name,
+                menu.add_command(label=ulchars[i] + " " + ufile_name,
                                  command=callback,
                                  underline=0)
 
@@ -716,10 +733,12 @@
         filename = self.io.filename
         if filename:
             filename = os.path.basename(filename)
-        return filename
+        # return unicode string to display non-ASCII chars correctly
+        return self._filename_to_unicode(filename)
 
     def long_title(self):
-        return self.io.filename or ""
+        # return unicode string to display non-ASCII chars correctly
+        return self._filename_to_unicode(self.io.filename or "")
 
     def center_insert_event(self, event):
         self.center()

Modified: python/trunk/Lib/idlelib/IOBinding.py
==============================================================================
--- python/trunk/Lib/idlelib/IOBinding.py	(original)
+++ python/trunk/Lib/idlelib/IOBinding.py	Sun Nov 27 17:59:04 2005
@@ -32,6 +32,9 @@
 except (ImportError, locale.Error):
     pass
 
+# Encoding for file names
+filesystemencoding = sys.getfilesystemencoding()
+
 encoding = "ascii"
 if sys.platform == 'win32':
     # On Windows, we could use "mbcs". However, to give the user
@@ -517,7 +520,10 @@
         if not self.opendialog:
             self.opendialog = tkFileDialog.Open(master=self.text,
                                                 filetypes=self.filetypes)
-        return self.opendialog.show(initialdir=dir, initialfile=base)
+        filename = self.opendialog.show(initialdir=dir, initialfile=base)
+        if isinstance(filename, unicode):
+            filename = filename.encode(filesystemencoding)
+        return filename
 
     def defaultfilename(self, mode="open"):
         if self.filename:
@@ -536,7 +542,10 @@
         if not self.savedialog:
             self.savedialog = tkFileDialog.SaveAs(master=self.text,
                                                   filetypes=self.filetypes)
-        return self.savedialog.show(initialdir=dir, initialfile=base)
+        filename = self.savedialog.show(initialdir=dir, initialfile=base)
+        if isinstance(filename, unicode):
+            filename = filename.encode(filesystemencoding)
+        return filename
 
     def updaterecentfileslist(self,filename):
         "Update recent file list on all editor windows"

Modified: python/trunk/Misc/NEWS
==============================================================================
--- python/trunk/Misc/NEWS	(original)
+++ python/trunk/Misc/NEWS	Sun Nov 27 17:59:04 2005
@@ -287,6 +287,8 @@
 Library
 -------
 
+- Patch #1162825: Support non-ASCII characters in IDLE window titles.
+
 - Bug #1365984: urllib now opens "data:" URLs again.
 
 - Patch #1314396: prevent deadlock for threading.Thread.join() when an exception


More information about the Python-checkins mailing list