[See end for tips.]

File menu:


Edit menu:

	Undo -- Undo last change to current window (max 1000 changes)
	Redo -- Redo last undone change to current window
	---
	Cut -- Copy selection into system-wide clipboard; then delete selection
	Copy -- Copy selection into system-wide clipboard
	Paste -- Insert system-wide clipboard into window
	---
	Find... -- Search (case sensitive, Perl regular expression)
	Find next -- Repeat last search
	Find same -- Search for the string in the selection
	Go to line -- Ask for a line number and show that line
	---
	Dedent region -- Shift selected lines left 4 spaces
	Indent region -- Shift selected lines right 4 spaces
	Comment out region -- Insert ## in front of selected lines
	Uncomment region -- Remove leading # or ## from selected lines

Windows menu:

	Contains the names of all open windows.  The Python Shell
	entry at the top will recreate the shell window if it has
	been closed.

Debug menu (in the Python Shell window only):

	Go to line from traceback -- look around the insert point for a
		filename and linenumber, open the file, and show the line
	Open stack viewer -- show the stack traceback of the last exception

Basic editing and navigation:

	Backspace deletes to the left; DEL deletes to the right
	Arrow keys and Page Up/Down to move around
	Home/End go to begin/end of line
	Control-Home/End go to begin/end of file
	Some Emacs bindings may also work, e.g. ^F/^B/^P/^N/^A/^E

    Word completion:

	Alt-/ expands the word you have typed to match another word in
	the same buffer.  Repeat to get a different expansion.

Python Shell window:

	^C interrupts executing command
	^D sends end-of-file; closes window if typed at >>> prompt

    Command history:

	Alt-p retrieves previous command matching what you have typed
	Alt-n retrieves next
	Hit return while on any previous command retrieves that command

Python syntax colors: the coloring is applied in a background thread

	Keywords	orange
	Strings		green
	Comments	red
	Definitions	blue

Shell colors:

	Console output	dark red
	stdout		blue
	stderr		dark green
	stdin		black

Tips:
	To change the font on Windows, open EditorWindow.py and change
	    text['font'] = ("verdana", 8)
	to, e.g.,
	    text['font'] = ("courier new", 10)

	To change the Python syntax colors, edit the tagdefs table in
	ColorDelegator.py; to change the shell colors, edit the tagdefs
	table in PyShell.py.
