Add a highlight theme for builtin keywords. Python Patch 805830 Nigel Rowe

M ClassBrowser.py
M ColorDelegator.py
M EditorWindow.py
M NEWS.txt
M PyShell.py
M TreeWidget.py
M config-highlight.def
M configDialog.py
M configHandler.py
This commit is contained in:
Kurt B. Kaiser 2004-03-08 18:15:31 +00:00
parent 4102478f46
commit 73360a3e61
9 changed files with 42 additions and 16 deletions

View file

@ -17,6 +17,7 @@ import pyclbr
import PyShell import PyShell
from WindowList import ListedToplevel from WindowList import ListedToplevel
from TreeWidget import TreeNode, TreeItem, ScrolledCanvas from TreeWidget import TreeNode, TreeItem, ScrolledCanvas
from configHandler import idleConf
class ClassBrowser: class ClassBrowser:
@ -42,7 +43,9 @@ class ClassBrowser:
self.settitle() self.settitle()
top.focus_set() top.focus_set()
# create scrolled canvas # create scrolled canvas
sc = ScrolledCanvas(top, bg="white", highlightthickness=0, takefocus=1) theme = idleConf.GetOption('main','Theme','name')
background = idleConf.GetHighlight(theme, 'normal')['background']
sc = ScrolledCanvas(top, bg=background, highlightthickness=0, takefocus=1)
sc.frame.pack(expand=1, fill="both") sc.frame.pack(expand=1, fill="both")
item = self.rootnode() item = self.rootnode()
self.node = node = TreeNode(sc.canvas, None, item) self.node = node = TreeNode(sc.canvas, None, item)

View file

@ -1,6 +1,7 @@
import time import time
import re import re
import keyword import keyword
import __builtin__
from Tkinter import * from Tkinter import *
from Delegator import Delegator from Delegator import Delegator
from configHandler import idleConf from configHandler import idleConf
@ -17,13 +18,16 @@ def any(name, list):
def make_pat(): def make_pat():
kw = r"\b" + any("KEYWORD", keyword.kwlist) + r"\b" kw = r"\b" + any("KEYWORD", keyword.kwlist) + r"\b"
builtinlist = [str(name) for name in dir(__builtin__)
if not name.startswith('_')]
builtin = r"([^\\.]\b|^)" + any("BUILTIN", builtinlist) + r"\b"
comment = any("COMMENT", [r"#[^\n]*"]) comment = any("COMMENT", [r"#[^\n]*"])
sqstring = r"(\b[rR])?'[^'\\\n]*(\\.[^'\\\n]*)*'?" sqstring = r"(\b[rR])?'[^'\\\n]*(\\.[^'\\\n]*)*'?"
dqstring = r'(\b[rR])?"[^"\\\n]*(\\.[^"\\\n]*)*"?' dqstring = r'(\b[rR])?"[^"\\\n]*(\\.[^"\\\n]*)*"?'
sq3string = r"(\b[rR])?'''[^'\\]*((\\.|'(?!''))[^'\\]*)*(''')?" sq3string = r"(\b[rR])?'''[^'\\]*((\\.|'(?!''))[^'\\]*)*(''')?"
dq3string = r'(\b[rR])?"""[^"\\]*((\\.|"(?!""))[^"\\]*)*(""")?' dq3string = r'(\b[rR])?"""[^"\\]*((\\.|"(?!""))[^"\\]*)*(""")?'
string = any("STRING", [sq3string, dq3string, sqstring, dqstring]) string = any("STRING", [sq3string, dq3string, sqstring, dqstring])
return kw + "|" + comment + "|" + string + "|" + any("SYNC", [r"\n"]) return kw + "|" + builtin + "|" + comment + "|" + string + "|" + any("SYNC", [r"\n"])
prog = re.compile(make_pat(), re.S) prog = re.compile(make_pat(), re.S)
idprog = re.compile(r"\s+(\w+)", re.S) idprog = re.compile(r"\s+(\w+)", re.S)
@ -58,6 +62,7 @@ class ColorDelegator(Delegator):
self.tagdefs = { self.tagdefs = {
"COMMENT": idleConf.GetHighlight(theme, "comment"), "COMMENT": idleConf.GetHighlight(theme, "comment"),
"KEYWORD": idleConf.GetHighlight(theme, "keyword"), "KEYWORD": idleConf.GetHighlight(theme, "keyword"),
"BUILTIN": idleConf.GetHighlight(theme, "builtin"),
"STRING": idleConf.GetHighlight(theme, "string"), "STRING": idleConf.GetHighlight(theme, "string"),
"DEFINITION": idleConf.GetHighlight(theme, "definition"), "DEFINITION": idleConf.GetHighlight(theme, "definition"),
"SYNC": {'background':None,'foreground':None}, "SYNC": {'background':None,'foreground':None},
@ -68,7 +73,7 @@ class ColorDelegator(Delegator):
"hit": idleConf.GetHighlight(theme, "hit"), "hit": idleConf.GetHighlight(theme, "hit"),
} }
if DEBUG: print 'tagdefs',tagdefs if DEBUG: print 'tagdefs',self.tagdefs
def insert(self, index, chars, tags=None): def insert(self, index, chars, tags=None):
index = self.index(index) index = self.index(index)

View file

@ -510,6 +510,8 @@ class EditorWindow:
if self.color: if self.color:
self.color = self.ColorDelegator() self.color = self.ColorDelegator()
self.per.insertfilter(self.color) self.per.insertfilter(self.color)
theme = idleConf.GetOption('main','Theme','name')
self.text.config(idleConf.GetHighlight(theme, "normal"))
def ResetFont(self): def ResetFont(self):
"Update the text widgets' font if it is changed" "Update the text widgets' font if it is changed"

View file

@ -3,6 +3,8 @@ What's New in IDLE 1.1a0?
*Release date: XX-XXX-2004* *Release date: XX-XXX-2004*
- Add a highlight theme for builtin keywords. Python Patch 805830 Nigel Rowe
- rpc.py:SocketIO - Large modules were generating large pickles when downloaded - rpc.py:SocketIO - Large modules were generating large pickles when downloaded
to the execution server. The return of the OK response from the subprocess to the execution server. The return of the OK response from the subprocess
initialization was interfering and causing the sending socket to be not initialization was interfering and causing the sending socket to be not

View file

@ -528,7 +528,9 @@ class ModifiedInterpreter(InteractiveInterpreter):
item = RemoteObjectBrowser.StubObjectTreeItem(self.rpcclt, oid) item = RemoteObjectBrowser.StubObjectTreeItem(self.rpcclt, oid)
from TreeWidget import ScrolledCanvas, TreeNode from TreeWidget import ScrolledCanvas, TreeNode
top = Toplevel(self.tkconsole.root) top = Toplevel(self.tkconsole.root)
sc = ScrolledCanvas(top, bg="white", highlightthickness=0) theme = idleConf.GetOption('main','Theme','name')
background = idleConf.GetHighlight(theme, 'normal')['background']
sc = ScrolledCanvas(top, bg=background, highlightthickness=0)
sc.frame.pack(expand=1, fill="both") sc.frame.pack(expand=1, fill="both")
node = TreeNode(sc.canvas, None, item) node = TreeNode(sc.canvas, None, item)
node.expand() node.expand()

View file

@ -20,6 +20,7 @@ from Tkinter import *
import imp import imp
import ZoomHeight import ZoomHeight
from configHandler import idleConf
ICONDIR = "Icons" ICONDIR = "Icons"
@ -249,10 +250,11 @@ class TreeNode:
except AttributeError: except AttributeError:
# padding carefully selected (on Windows) to match Entry widget: # padding carefully selected (on Windows) to match Entry widget:
self.label = Label(self.canvas, text=text, bd=0, padx=2, pady=2) self.label = Label(self.canvas, text=text, bd=0, padx=2, pady=2)
theme = idleConf.GetOption('main','Theme','name')
if self.selected: if self.selected:
self.label.configure(fg="white", bg="darkblue") self.label.configure(idleConf.GetHighlight(theme, 'hilite'))
else: else:
self.label.configure(fg="black", bg="white") self.label.configure(idleConf.GetHighlight(theme, 'normal'))
id = self.canvas.create_window(textx, texty, id = self.canvas.create_window(textx, texty,
anchor="nw", window=self.label) anchor="nw", window=self.label)
self.label.bind("<1>", self.select_or_edit) self.label.bind("<1>", self.select_or_edit)

View file

@ -6,6 +6,8 @@ normal-foreground= #000000
normal-background= #ffffff normal-background= #ffffff
keyword-foreground= #ff7700 keyword-foreground= #ff7700
keyword-background= #ffffff keyword-background= #ffffff
builtin-foreground= #ca00ca
builtin-background= #ffffff
comment-foreground= #dd0000 comment-foreground= #dd0000
comment-background= #ffffff comment-background= #ffffff
string-foreground= #00aa00 string-foreground= #00aa00
@ -35,6 +37,8 @@ normal-foreground= #000000
normal-background= #ffffff normal-background= #ffffff
keyword-foreground= #ff7700 keyword-foreground= #ff7700
keyword-background= #ffffff keyword-background= #ffffff
builtin-foreground= #ca00ca
builtin-background= #ffffff
comment-foreground= #dd0000 comment-foreground= #dd0000
comment-background= #ffffff comment-background= #ffffff
string-foreground= #00aa00 string-foreground= #00aa00

View file

@ -35,15 +35,17 @@ class ConfigDialog(Toplevel):
self.themeElements={'Normal Text':('normal','00'), self.themeElements={'Normal Text':('normal','00'),
'Python Keywords':('keyword','01'), 'Python Keywords':('keyword','01'),
'Python Definitions':('definition','02'), 'Python Definitions':('definition','02'),
'Python Comments':('comment','03'), 'Python Builtins':('builtin', '03'),
'Python Strings':('string','04'), 'Python Comments':('comment','04'),
'Selected Text':('hilite','05'), 'Python Strings':('string','05'),
'Found Text':('hit','06'), 'Selected Text':('hilite','06'),
'Cursor':('cursor','07'), 'Found Text':('hit','07'),
'Error Text':('error','08'), 'Cursor':('cursor','08'),
'Shell Normal Text':('console','09'), 'Error Text':('error','09'),
'Shell Stdout Text':('stdout','10'), 'Shell Normal Text':('console','10'),
'Shell Stderr Text':('stderr','11')} 'Shell Stdout Text':('stdout','11'),
'Shell Stderr Text':('stderr','12'),
}
self.ResetChangedItems() #load initial values in changed items dict self.ResetChangedItems() #load initial values in changed items dict
self.CreateWidgets() self.CreateWidgets()
self.resizable(height=FALSE,width=FALSE) self.resizable(height=FALSE,width=FALSE)
@ -197,7 +199,9 @@ class ConfigDialog(Toplevel):
(' ','normal'),('func','definition'),('(param):','normal'), (' ','normal'),('func','definition'),('(param):','normal'),
('\n ','normal'),('"""string"""','string'),('\n var0 = ','normal'), ('\n ','normal'),('"""string"""','string'),('\n var0 = ','normal'),
("'string'",'string'),('\n var1 = ','normal'),("'selected'",'hilite'), ("'string'",'string'),('\n var1 = ','normal'),("'selected'",'hilite'),
('\n var2 = ','normal'),("'found'",'hit'),('\n\n','normal'), ('\n var2 = ','normal'),("'found'",'hit'),
('\n var3 = ','normal'),('list', 'builtin'), ('(','normal'),
('None', 'builtin'),(')\n\n','normal'),
(' error ','error'),(' ','normal'),('cursor |','cursor'), (' error ','error'),(' ','normal'),('cursor |','cursor'),
('\n ','normal'),('shell','console'),(' ','normal'),('stdout','stdout'), ('\n ','normal'),('shell','console'),(' ','normal'),('stdout','stdout'),
(' ','normal'),('stderr','stderr'),('\n','normal')) (' ','normal'),('stderr','stderr'),('\n','normal'))

View file

@ -306,6 +306,8 @@ class IdleConf:
'normal-background':'#ffffff', 'normal-background':'#ffffff',
'keyword-foreground':'#000000', 'keyword-foreground':'#000000',
'keyword-background':'#ffffff', 'keyword-background':'#ffffff',
'builtin-foreground':'#000000',
'builtin-background':'#ffffff',
'comment-foreground':'#000000', 'comment-foreground':'#000000',
'comment-background':'#ffffff', 'comment-background':'#ffffff',
'string-foreground':'#000000', 'string-foreground':'#000000',