[Idle-dev] CVS: idle IOBinding.py,1.14,1.15 config-main.def,1.13,1.14 configDialog.py,1.51,1.52
Kurt B. Kaiser
kbk@users.sourceforge.net
Fri, 09 May 2003 17:49:58 -0700
Update of /cvsroot/idlefork/idle
In directory sc8-pr-cvs1:/tmp/cvs-serv2233
Modified Files:
IOBinding.py config-main.def configDialog.py
Log Message:
[ SF 710733 - Martin v. Loewis] Improving source encoding dialog
M IOBinding.py
M config-main.def
M configDialog.py
Index: IOBinding.py
===================================================================
RCS file: /cvsroot/idlefork/idle/IOBinding.py,v
retrieving revision 1.14
retrieving revision 1.15
diff -C2 -r1.14 -r1.15
*** IOBinding.py 25 Apr 2003 18:36:31 -0000 1.14
--- IOBinding.py 10 May 2003 00:49:56 -0000 1.15
***************
*** 14,17 ****
--- 14,19 ----
import tkMessageBox
import re
+ from Tkinter import *
+ from SimpleDialog import SimpleDialog
from configHandler import idleConf
***************
*** 68,71 ****
--- 70,119 ----
coding_re = re.compile("coding[:=]\s*([-\w_.]+)")
+ class EncodingMessage(SimpleDialog):
+ "Inform user that an encoding declaration is needed."
+ def __init__(self, master, enc):
+ self.should_edit = False
+
+ self.root = top = Toplevel(master)
+ top.bind("<Return>", self.return_event)
+ top.bind("<Escape>", self.do_ok)
+ top.protocol("WM_DELETE_WINDOW", self.wm_delete_window)
+ top.wm_title("I/O Warning")
+ top.wm_iconname("I/O Warning")
+ self.top = top
+
+ l1 = Label(top,
+ text="Non-ASCII found, yet no encoding declared. Add a line like")
+ l1.pack(side=TOP, anchor=W)
+ l2 = Entry(top, font="courier")
+ l2.insert(0, "# -*- coding: %s -*-" % enc)
+ # For some reason, the text is not selectable anymore if the
+ # widget is disabled.
+ # l2['state'] = DISABLED
+ l2.pack(side=TOP, anchor = W, fill=X)
+ l3 = Label(top, text="to your file\n"
+ "Choose OK to save this file as %s\n"
+ "Edit your general options to silence this warning" % enc)
+ l3.pack(side=TOP, anchor = W)
+
+ buttons = Frame(top)
+ buttons.pack(side=TOP, fill=X)
+ # Both return and cancel mean the same thing: do nothing
+ self.default = self.cancel = 0
+ b1 = Button(buttons, text="Ok", default="active",
+ command=self.do_ok)
+ b1.pack(side=LEFT, fill=BOTH, expand=1)
+ b2 = Button(buttons, text="Edit my file",
+ command=self.do_edit)
+ b2.pack(side=LEFT, fill=BOTH, expand=1)
+
+ self._set_transient(master)
+
+ def do_ok(self):
+ self.done(0)
+
+ def do_edit(self):
+ self.done(1)
+
def coding_spec(str):
"""Return the encoding declaration according to PEP 263.
***************
*** 369,384 ****
# Nothing was declared, and we had not determined an encoding
# on loading. Recommend an encoding line.
! try:
! chars = chars.encode(encoding)
! enc = encoding
! except UnicodeError:
! chars = BOM_UTF8 + chars.encode("utf-8")
! enc = "utf-8"
! tkMessageBox.showerror(
! "I/O Error",
! "Non-ASCII found, yet no encoding declared. Add a line like\n"
! "# -*- coding: %s -*- \nto your file" % enc,
! master = self.text)
! return chars
def fixlastline(self):
--- 417,449 ----
# Nothing was declared, and we had not determined an encoding
# on loading. Recommend an encoding line.
! config_encoding = idleConf.GetOption("main","EditorWindow",
! "encoding")
! if config_encoding == 'utf-8':
! # User has requested that we save files as UTF-8
! return BOM_UTF8 + chars.encode("utf-8")
! ask_user = True
! try:
! chars = chars.encode(encoding)
! enc = encoding
! if config_encoding == 'locale':
! ask_user = False
! except UnicodeError:
! chars = BOM_UTF8 + chars.encode("utf-8")
! enc = "utf-8"
! if not ask_user:
! return chars
! dialog = EncodingMessage(self.editwin.top, enc)
! dialog.go()
! if dialog.num == 1:
! # User asked us to edit the file
! encline = "# -*- coding: %s -*-\n" % enc
! firstline = self.text.get("1.0", "2.0")
! if firstline.startswith("#!"):
! # Insert encoding after #! line
! self.text.insert("2.0", encline)
! else:
! self.text.insert("1.0", encline)
! return self.encode(self.text.get("1.0", "end-1c"))
! return chars
def fixlastline(self):
***************
*** 488,491 ****
if __name__ == "__main__":
- from Tkinter import *
test()
--- 553,555 ----
Index: config-main.def
===================================================================
RCS file: /cvsroot/idlefork/idle/config-main.def,v
retrieving revision 1.13
retrieving revision 1.14
diff -C2 -r1.13 -r1.14
*** config-main.def 14 Jan 2003 22:03:31 -0000 1.13
--- config-main.def 10 May 2003 00:49:56 -0000 1.14
***************
*** 50,53 ****
--- 50,54 ----
font-size= 12
font-bold= 0
+ encoding=none
[Indent]
Index: configDialog.py
===================================================================
RCS file: /cvsroot/idlefork/idle/configDialog.py,v
retrieving revision 1.51
retrieving revision 1.52
diff -C2 -r1.51 -r1.52
*** configDialog.py 14 Jan 2003 22:03:31 -0000 1.51
--- configDialog.py 10 May 2003 00:49:56 -0000 1.52
***************
*** 335,338 ****
--- 335,339 ----
self.winHeight=StringVar(self)
self.startupEdit=IntVar(self)
+ self.encoding=StringVar(self)
self.userHelpBrowser=BooleanVar(self)
self.helpBrowser=StringVar(self)
***************
*** 343,346 ****
--- 344,348 ----
frameRun=Frame(frame,borderwidth=2,relief=GROOVE)
frameWinSize=Frame(frame,borderwidth=2,relief=GROOVE)
+ frameEncoding=Frame(frame,borderwidth=2,relief=GROOVE)
frameHelp=Frame(frame,borderwidth=2,relief=GROOVE)
#frameRun
***************
*** 360,363 ****
--- 362,373 ----
entryWinHeight=Entry(frameWinSize,textvariable=self.winHeight,
width=3)
+ #frameEncoding
+ labelEncodingTitle=Label(frameEncoding,text="Default Source Encoding")
+ radioEncLocale=Radiobutton(frameEncoding,variable=self.encoding,
+ value="locale",text="Locale-defined")
+ radioEncUTF8=Radiobutton(frameEncoding,variable=self.encoding,
+ value="utf-8",text="UTF-8")
+ radioEncNone=Radiobutton(frameEncoding,variable=self.encoding,
+ value="none",text="None")
#frameHelp
labelHelpTitle=Label(frameHelp,text='Help Options')
***************
*** 388,391 ****
--- 398,402 ----
frameRun.pack(side=TOP,padx=5,pady=5,fill=X)
frameWinSize.pack(side=TOP,padx=5,pady=5,fill=X)
+ frameEncoding.pack(side=TOP,padx=5,pady=5,fill=X)
frameHelp.pack(side=TOP,padx=5,pady=5,expand=TRUE,fill=BOTH)
#frameRun
***************
*** 400,403 ****
--- 411,419 ----
entryWinWidth.pack(side=RIGHT,anchor=E,padx=10,pady=5)
labelWinWidthTitle.pack(side=RIGHT,anchor=E,pady=5)
+ #frameEncoding
+ labelEncodingTitle.pack(side=LEFT,anchor=W,padx=5,pady=5)
+ radioEncNone.pack(side=RIGHT,anchor=E,pady=5)
+ radioEncUTF8.pack(side=RIGHT,anchor=E,pady=5)
+ radioEncLocale.pack(side=RIGHT,anchor=E,pady=5)
#frameHelp
labelHelpTitle.pack(side=TOP,anchor=W,padx=5,pady=5)
***************
*** 433,436 ****
--- 449,453 ----
self.winHeight.trace_variable('w',self.VarChanged_winHeight)
self.startupEdit.trace_variable('w',self.VarChanged_startupEdit)
+ self.encoding.trace_variable('w',self.VarChanged_encoding)
def VarChanged_fontSize(self,*params):
***************
*** 526,529 ****
--- 543,550 ----
self.AddChangedItem('main','General','editor-on-startup',value)
+ def VarChanged_encoding(self,*params):
+ value=self.encoding.get()
+ self.AddChangedItem('main','EditorWindow','encoding',value)
+
def ResetChangedItems(self):
#When any config item is changed in this dialog, an entry
***************
*** 1021,1024 ****
--- 1042,1047 ----
self.winWidth.set(idleConf.GetOption('main','EditorWindow','width'))
self.winHeight.set(idleConf.GetOption('main','EditorWindow','height'))
+ # default source encoding
+ self.encoding.set(idleConf.GetOption('main','EditorWindow','encoding'))
# additional help sources
self.userHelpList = idleConf.GetAllExtraHelpSourcesList()