summaryrefslogtreecommitdiffstats
path: root/Lib
diff options
context:
space:
mode:
Diffstat (limited to 'Lib')
-rw-r--r--Lib/idlelib/EditorWindow.py35
-rw-r--r--Lib/idlelib/NEWS.txt9
-rw-r--r--Lib/idlelib/configDialog.py87
3 files changed, 41 insertions, 90 deletions
diff --git a/Lib/idlelib/EditorWindow.py b/Lib/idlelib/EditorWindow.py
index 31f400c..ed6b1a1 100644
--- a/Lib/idlelib/EditorWindow.py
+++ b/Lib/idlelib/EditorWindow.py
@@ -157,12 +157,12 @@ class EditorWindow(object):
vbar['command'] = text.yview
vbar.pack(side=RIGHT, fill=Y)
text['yscrollcommand'] = vbar.set
- fontWeight='normal'
- if idleConf.GetOption('main','EditorWindow','font-bold',type='bool'):
+ fontWeight = 'normal'
+ if idleConf.GetOption('main', 'EditorWindow', 'font-bold', type='bool'):
fontWeight='bold'
- text.config(font=(idleConf.GetOption('main','EditorWindow','font'),
- idleConf.GetOption('main','EditorWindow','font-size'),
- fontWeight))
+ text.config(font=(idleConf.GetOption('main', 'EditorWindow', 'font'),
+ idleConf.GetOption('main', 'EditorWindow', 'font-size'),
+ fontWeight))
text_frame.pack(side=LEFT, fill=BOTH, expand=1)
text.pack(side=TOP, fill=BOTH, expand=1)
text.focus_set()
@@ -173,19 +173,23 @@ class EditorWindow(object):
# which will cause Tabnanny to nag!
# false -> tab characters are converted to spaces by indent
# and dedent cmds, and ditto TAB keystrokes
- self.usetabs = False
-
- # indentwidth is the number of characters per logical indent level.
- # Recommended Python default indent is four spaces.
- self.indentwidth = 4
+ # Although use-spaces=0 can be configured manually in config-main.def,
+ # configuration of tabs v. spaces is not supported in the configuration
+ # dialog. IDLE promotes the preferred Python indentation: use spaces!
+ usespaces = idleConf.GetOption('main', 'Indent', 'use-spaces', type='bool')
+ self.usetabs = not usespaces
# tabwidth is the display width of a literal tab character.
# CAUTION: telling Tk to use anything other than its default
# tab setting causes it to use an entirely different tabbing algorithm,
# treating tab stops as fixed distances from the left margin.
# Nobody expects this, so for now tabwidth should never be changed.
- self.tabwidth = 8 # for IDLE use, must remain 8 until Tk is fixed.
- # indentwidth should be 8 when usetabs is True.
+ self.tabwidth = 8 # must remain 8 until Tk is fixed.
+
+ # indentwidth is the number of screen characters per indent level.
+ # The recommended Python indentation is four spaces.
+ self.indentwidth = self.tabwidth
+ self.set_notabs_indentwidth()
# If context_use_ps1 is true, parsing searches back for a ps1 line;
# else searches for a popular (if, def, ...) Python stmt.
@@ -583,6 +587,13 @@ class EditorWindow(object):
accel=get_accelerator(keydefs, event)
menu.entryconfig(index,accelerator=accel)
+ def set_notabs_indentwidth(self):
+ "Update the indentwidth if changed and not using tabs in this window"
+ # Called from configDialog.py
+ if not self.usetabs:
+ self.indentwidth = idleConf.GetOption('main', 'Indent','num-spaces',
+ type='int')
+
def reset_help_menu_entries(self):
"Update the additional help entries on the Help menu"
help_list = idleConf.GetAllExtraHelpSourcesList()
diff --git a/Lib/idlelib/NEWS.txt b/Lib/idlelib/NEWS.txt
index fd01d33..8804bc1 100644
--- a/Lib/idlelib/NEWS.txt
+++ b/Lib/idlelib/NEWS.txt
@@ -3,6 +3,15 @@ What's New in IDLE 1.2a0?
*Release date: XX-XXX-2005*
+- Removed ability to configure tabs indent from Options dialog. This 'feature'
+ has never worked and no one has complained. It is still possible to set a
+ default tabs (v. spaces) indent 'manually' via config-main.def (or to turn on
+ tabs for the current EditorWindow via the Format menu) but IDLE will
+ encourage indentation via spaces.
+
+- Enable setting the indentation width using the Options dialog.
+ Bug # 783877
+
- Add keybindings for del-word-left and del-word-right.
- Discourage using an indent width other than 8 when using tabs to indent
diff --git a/Lib/idlelib/configDialog.py b/Lib/idlelib/configDialog.py
index 48f22b8..1984845 100644
--- a/Lib/idlelib/configDialog.py
+++ b/Lib/idlelib/configDialog.py
@@ -6,7 +6,7 @@ saved as user defined sets. Select startup options including shell/editor
and default window size. Define additional help sources.
Note that tab width in IDLE is currently fixed at eight due to Tk issues.
-Refer to comment in EditorWindow autoindent code for details.
+Refer to comments in EditorWindow autoindent code for details.
"""
from Tkinter import *
@@ -21,9 +21,7 @@ from configSectionNameDialog import GetCfgSectionNameDialog
from configHelpSourceEdit import GetHelpSourceDialog
class ConfigDialog(Toplevel):
- """
- configuration dialog for idle
- """
+
def __init__(self,parent,title):
Toplevel.__init__(self, parent)
self.configure(borderwidth=5)
@@ -93,8 +91,6 @@ class ConfigDialog(Toplevel):
self.fontBold=BooleanVar(self)
self.fontName=StringVar(self)
self.spaceNum=IntVar(self)
- #self.tabCols=IntVar(self)
- self.indentBySpaces=BooleanVar(self)
self.editFont=tkFont.Font(self,('courier',10,'normal'))
##widget creation
#body frame
@@ -124,25 +120,12 @@ class ConfigDialog(Toplevel):
text='AaBbCcDdEe\nFfGgHhIiJjK\n1234567890\n#:+=(){}[]',
justify=LEFT,font=self.editFont)
#frameIndent
- labelIndentTitle=Label(frameIndent,text='Set Indentation Defaults')
- frameIndentType=Frame(frameIndent)
frameIndentSize=Frame(frameIndent)
- labelIndentTypeTitle=Label(frameIndentType,
- text='Choose indentation type :')
- radioUseSpaces=Radiobutton(frameIndentType,variable=self.indentBySpaces,
- value=1,text='Tab key inserts spaces')
- radioUseTabs=Radiobutton(frameIndentType,variable=self.indentBySpaces,
- value=0,text='Tab key inserts tabs')
- labelIndentSizeTitle=Label(frameIndentSize,
- text='Choose indentation size :')
- labelSpaceNumTitle=Label(frameIndentSize,justify=LEFT,
- text='indent width')
- self.scaleSpaceNum=Scale(frameIndentSize,variable=self.spaceNum,
- orient='horizontal',tickinterval=2,from_=2,to=16)
- #labeltabColsTitle=Label(frameIndentSize,justify=LEFT,
- # text='when tab key inserts tabs,\ncolumns per tab')
- #self.scaleTabCols=Scale(frameIndentSize,variable=self.tabCols,
- # orient='horizontal',tickinterval=2,from_=2,to=8)
+ labelSpaceNumTitle=Label(frameIndentSize, justify=LEFT,
+ text='Python Standard: 4 Spaces!')
+ self.scaleSpaceNum=Scale(frameIndentSize, variable=self.spaceNum,
+ label='Indentation Width', orient='horizontal',
+ tickinterval=2, from_=2, to=16)
#widget packing
#body
frameFont.pack(side=LEFT,padx=5,pady=10,expand=TRUE,fill=BOTH)
@@ -160,17 +143,9 @@ class ConfigDialog(Toplevel):
frameFontSample.pack(side=TOP,padx=5,pady=5,expand=TRUE,fill=BOTH)
self.labelFontSample.pack(expand=TRUE,fill=BOTH)
#frameIndent
- labelIndentTitle.pack(side=TOP,anchor=W,padx=5,pady=5)
- frameIndentType.pack(side=TOP,padx=5,fill=X)
frameIndentSize.pack(side=TOP,padx=5,pady=5,fill=BOTH)
- labelIndentTypeTitle.pack(side=TOP,anchor=W,padx=5,pady=5)
- radioUseSpaces.pack(side=TOP,anchor=W,padx=5)
- radioUseTabs.pack(side=TOP,anchor=W,padx=5)
- labelIndentSizeTitle.pack(side=TOP,anchor=W,padx=5,pady=5)
labelSpaceNumTitle.pack(side=TOP,anchor=W,padx=5)
self.scaleSpaceNum.pack(side=TOP,padx=5,fill=X)
- #labeltabColsTitle.pack(side=TOP,anchor=W,padx=5)
- #self.scaleTabCols.pack(side=TOP,padx=5,fill=X)
return frame
def CreatePageHighlight(self):
@@ -390,7 +365,6 @@ class ConfigDialog(Toplevel):
radioEncNone=Radiobutton(frameEncoding,variable=self.encoding,
value="none",text="None")
#frameHelp
- ##labelHelpTitle=Label(frameHelp,text='Help Options')
frameHelpList=Frame(frameHelp)
frameHelpListButtons=Frame(frameHelpList)
labelHelpListTitle=Label(frameHelpList,text='Additional Help Sources:')
@@ -406,13 +380,6 @@ class ConfigDialog(Toplevel):
width=8,command=self.HelpListItemAdd)
self.buttonHelpListRemove=Button(frameHelpListButtons,text='Remove',
state=DISABLED,width=8,command=self.HelpListItemRemove)
- # the following is better handled by the BROWSER environment
- # variable under unix/linux
- #checkHelpBrowser=Checkbutton(frameHelp,variable=self.userHelpBrowser,
- # onvalue=1,offvalue=0,text='user specified (html) help browser:',
- # command=self.OnCheckUserHelpBrowser)
- #self.entryHelpBrowser=Entry(frameHelp,textvariable=self.helpBrowser,
- # width=40)
#widget packing
#body
frameRun.pack(side=TOP,padx=5,pady=5,fill=X)
@@ -446,7 +413,6 @@ class ConfigDialog(Toplevel):
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)
frameHelpListButtons.pack(side=RIGHT,padx=5,pady=5,fill=Y)
frameHelpList.pack(side=TOP,padx=5,pady=5,expand=TRUE,fill=BOTH)
labelHelpListTitle.pack(side=TOP,anchor=W)
@@ -455,8 +421,6 @@ class ConfigDialog(Toplevel):
self.buttonHelpListEdit.pack(side=TOP,anchor=W,pady=5)
self.buttonHelpListAdd.pack(side=TOP,anchor=W)
self.buttonHelpListRemove.pack(side=TOP,anchor=W,pady=5)
- #checkHelpBrowser.pack(side=TOP,anchor=W,padx=5)
- #self.entryHelpBrowser.pack(side=TOP,anchor=W,padx=5,pady=5)
return frame
def AttachVarCallbacks(self):
@@ -464,8 +428,6 @@ class ConfigDialog(Toplevel):
self.fontName.trace_variable('w',self.VarChanged_fontName)
self.fontBold.trace_variable('w',self.VarChanged_fontBold)
self.spaceNum.trace_variable('w',self.VarChanged_spaceNum)
- #self.tabCols.trace_variable('w',self.VarChanged_tabCols)
- self.indentBySpaces.trace_variable('w',self.VarChanged_indentBySpaces)
self.colour.trace_variable('w',self.VarChanged_colour)
self.builtinTheme.trace_variable('w',self.VarChanged_builtinTheme)
self.customTheme.trace_variable('w',self.VarChanged_customTheme)
@@ -494,18 +456,10 @@ class ConfigDialog(Toplevel):
value=self.fontBold.get()
self.AddChangedItem('main','EditorWindow','font-bold',value)
- def VarChanged_indentBySpaces(self,*params):
- value=self.indentBySpaces.get()
- self.AddChangedItem('main','Indent','use-spaces',value)
-
def VarChanged_spaceNum(self,*params):
value=self.spaceNum.get()
self.AddChangedItem('main','Indent','num-spaces',value)
- #def VarChanged_tabCols(self,*params):
- # value=self.tabCols.get()
- # self.AddChangedItem('main','Indent','tab-cols',value)
-
def VarChanged_colour(self,*params):
self.OnNewColourSet()
@@ -912,12 +866,6 @@ class ConfigDialog(Toplevel):
self.textHighlightSample.tag_config(element, **colours)
self.SetColourSample()
-## def OnCheckUserHelpBrowser(self):
-## if self.userHelpBrowser.get():
-## self.entryHelpBrowser.config(state=NORMAL)
-## else:
-## self.entryHelpBrowser.config(state=DISABLED)
-
def HelpSourceSelected(self,event):
self.SetHelpListButtonStates()
@@ -996,17 +944,10 @@ class ConfigDialog(Toplevel):
self.SetFontSample()
def LoadTabCfg(self):
- ##indent type radiobuttons
- spaceIndent=idleConf.GetOption('main','Indent','use-spaces',
- default=1,type='bool')
- self.indentBySpaces.set(spaceIndent)
##indent sizes
spaceNum=idleConf.GetOption('main','Indent','num-spaces',
default=4,type='int')
- #tabCols=idleConf.GetOption('main','Indent','tab-cols',
- # default=4,type='int')
self.spaceNum.set(spaceNum)
- #self.tabCols.set(tabCols)
def LoadThemeCfg(self):
##current theme type radiobutton
@@ -1096,11 +1037,6 @@ class ConfigDialog(Toplevel):
for helpItem in self.userHelpList:
self.listHelp.insert(END,helpItem[0])
self.SetHelpListButtonStates()
- #self.userHelpBrowser.set(idleConf.GetOption('main','General',
- # 'user-help-browser',default=0,type='bool'))
- #self.helpBrowser.set(idleConf.GetOption('main','General',
- # 'user-help-browser-command',default=''))
- #self.OnCheckUserHelpBrowser()
def LoadConfigs(self):
"""
@@ -1171,17 +1107,12 @@ class ConfigDialog(Toplevel):
self.ResetChangedItems() #clear the changed items dict
def ActivateConfigChanges(self):
- #things that need to be done to make
- #applied config changes dynamic:
- #update editor/shell font and repaint
- #dynamically update indentation setttings
- #update theme and repaint
- #update keybindings and re-bind
- #update user help sources menu
+ "Dynamically apply configuration changes"
winInstances=self.parent.instance_dict.keys()
for instance in winInstances:
instance.ResetColorizer()
instance.ResetFont()
+ instance.set_notabs_indentwidth()
instance.ResetKeybindings()
instance.reset_help_menu_entries()