Issue #27891: Consistently group and sort imports within idlelib modules.

This commit is contained in:
Terry Jan Reedy 2016-08-31 00:50:55 -04:00
parent 89b1162511
commit bfbaa6b206
47 changed files with 200 additions and 125 deletions

View File

@ -228,4 +228,23 @@ Help
<No menu>
Center Insert # eEW.center_insert_event
CODE STYLE -- Generally PEP 8.
import
------
Put import at the top, unless there is a good reason otherwise.
PEP 8 says to group stdlib, 3rd-party dependencies, and package imports.
For idlelib, the groups are general stdlib, tkinter, and idlelib.
Sort modules within each group, except that tkinter.ttk follows tkinter.
Sort 'from idlelib import mod1' and 'from idlelib.mod2 import object'
together by module, ignoring within module objects.
Put 'import __main__' after other idlelib imports.
Imports only needed for testing are not at the top but are put in the
htest function def or the "if __name__ == '__main__'" clause.
Within module imports like "from idlelib.mod import class" may cause
circular imports to deadlock. Even without this, circular imports may
require at least one of the imports to be delayed until a function call.

View File

@ -4,26 +4,27 @@ This extension can complete either attribute names or file names. It can pop
a window with all available names, for the user to select from.
"""
import os
import sys
import string
import sys
from idlelib.config import idleConf
# This string includes all chars that may be in an identifier
ID_CHARS = string.ascii_letters + string.digits + "_"
# These constants represent the two different types of completions
# These constants represent the two different types of completions.
# They must be defined here so autocomple_w can import them.
COMPLETE_ATTRIBUTES, COMPLETE_FILES = range(1, 2+1)
from idlelib import autocomplete_w
from idlelib.config import idleConf
from idlelib.hyperparser import HyperParser
import __main__
# This string includes all chars that may be in an identifier.
# TODO Update this here and elsewhere.
ID_CHARS = string.ascii_letters + string.digits + "_"
SEPS = os.sep
if os.altsep: # e.g. '/' on Windows...
SEPS += os.altsep
class AutoComplete:
menudefs = [

View File

@ -3,8 +3,9 @@ An auto-completion window for IDLE, used by the autocomplete extension
"""
from tkinter import *
from tkinter.ttk import Scrollbar
from idlelib.multicall import MC_SHIFT
from idlelib.autocomplete import COMPLETE_FILES, COMPLETE_ATTRIBUTES
from idlelib.multicall import MC_SHIFT
HIDE_VIRTUAL_EVENT_NAME = "<<autocompletewindow-hide>>"
HIDE_SEQUENCES = ("<FocusOut>", "<ButtonPress>")

View File

@ -12,8 +12,8 @@ its state.
This is an extension file and there is only one instance of AutoExpand.
'''
import string
import re
import string
###$ event <<expand-word>>
###$ win <Alt-slash>
@ -100,7 +100,6 @@ class AutoExpand:
i = i-1
return line[i:]
if __name__ == '__main__':
import unittest
unittest.main('idlelib.idle_test.test_autoexpand', verbosity=2)

View File

@ -11,13 +11,13 @@ XXX TO DO:
"""
import os
import sys
import pyclbr
import sys
from idlelib import pyshell
from idlelib.windows import ListedToplevel
from idlelib.tree import TreeNode, TreeItem, ScrolledCanvas
from idlelib.config import idleConf
from idlelib import pyshell
from idlelib.tree import TreeNode, TreeItem, ScrolledCanvas
from idlelib.windows import ListedToplevel
file_open = None # Method...Item and Class...Item use this.
# Normally pyshell.flist.open, but there is no pyshell.flist for htest.

View File

@ -5,7 +5,6 @@ parameter and docstring information when you type an opening parenthesis, and
which disappear when you type a closing parenthesis.
"""
import __main__
import inspect
import re
import sys
@ -14,6 +13,7 @@ import types
from idlelib import calltip_w
from idlelib.hyperparser import HyperParser
import __main__
class CallTips:

View File

@ -9,10 +9,12 @@ variable in the codecontext section of config-extensions.def. Lines which do
not open blocks are not shown in the context hints pane.
"""
import tkinter
from tkinter.constants import TOP, LEFT, X, W, SUNKEN
import re
from sys import maxsize as INFINITY
import tkinter
from tkinter.constants import TOP, LEFT, X, W, SUNKEN
from idlelib.config import idleConf
BLOCKOPENERS = {"class", "def", "elif", "else", "except", "finally", "for",

View File

@ -1,9 +1,10 @@
import time
import re
import keyword
import builtins
from idlelib.delegator import Delegator
import keyword
import re
import time
from idlelib.config import idleConf
from idlelib.delegator import Delegator
DEBUG = False

View File

@ -18,10 +18,10 @@ configuration problem notification and resolution.
"""
# TODOs added Oct 2014, tjr
from configparser import ConfigParser
import os
import sys
from configparser import ConfigParser
from tkinter.font import Font, nametofont
class InvalidConfigType(Exception): pass

View File

@ -11,17 +11,17 @@ Refer to comments in EditorWindow autoindent code for details.
"""
from tkinter import *
from tkinter.ttk import Scrollbar
import tkinter.messagebox as tkMessageBox
import tkinter.colorchooser as tkColorChooser
import tkinter.font as tkFont
import tkinter.messagebox as tkMessageBox
from idlelib.config import idleConf
from idlelib.dynoption import DynOptionMenu
from idlelib.config_key import GetKeysDialog
from idlelib.dynoption import DynOptionMenu
from idlelib import macosx
from idlelib.query import SectionName, HelpSource
from idlelib.tabbedpages import TabbedPageSet
from idlelib.textview import view_text
from idlelib import macosx
class ConfigDialog(Toplevel):

View File

@ -1,10 +1,12 @@
import os
import bdb
import os
from tkinter import *
from tkinter.ttk import Scrollbar
from idlelib.windows import ListedToplevel
from idlelib.scrolledlist import ScrolledList
from idlelib import macosx
from idlelib.scrolledlist import ScrolledList
from idlelib.windows import ListedToplevel
class Idb(bdb.Bdb):

View File

@ -8,11 +8,10 @@
# XXX TO DO:
# - for classes/modules, add "open source" to object browser
from reprlib import Repr
from idlelib.tree import TreeItem, TreeNode, ScrolledCanvas
from reprlib import Repr
myrepr = Repr()
myrepr.maxstring = 100
myrepr.maxother = 100

View File

@ -3,6 +3,7 @@ OptionMenu widget modified to allow dynamic menu reconfiguration
and setting of highlightthickness
"""
import copy
from tkinter import OptionMenu, _setit, StringVar, Button
class DynOptionMenu(OptionMenu):

View File

@ -6,24 +6,28 @@ import platform
import re
import string
import sys
import tokenize
import traceback
import webbrowser
from tkinter import *
from tkinter.ttk import Scrollbar
import tkinter.simpledialog as tkSimpleDialog
import tkinter.messagebox as tkMessageBox
import traceback
import webbrowser
from idlelib.multicall import MultiCallCreator
from idlelib import query
from idlelib import windows
from idlelib import search
from idlelib import grep
from idlelib import replace
from idlelib import pyparse
from idlelib.config import idleConf
from idlelib import help_about, textview, configdialog
from idlelib import macosx
from idlelib import configdialog
from idlelib import grep
from idlelib import help
from idlelib import help_about
from idlelib import macosx
from idlelib.multicall import MultiCallCreator
from idlelib import pyparse
from idlelib import query
from idlelib import replace
from idlelib import search
from idlelib import textview
from idlelib import windows
# The default tab setting for a Text widget, in average-width characters.
TK_TABWIDTH_DEFAULT = 8
@ -1515,9 +1519,6 @@ def classifyws(s, tabwidth):
break
return raw, effective
import tokenize
_tokenize = tokenize
del tokenize
class IndentSearcher(object):
@ -1542,8 +1543,8 @@ class IndentSearcher(object):
return self.text.get(mark, mark + " lineend+1c")
def tokeneater(self, type, token, start, end, line,
INDENT=_tokenize.INDENT,
NAME=_tokenize.NAME,
INDENT=tokenize.INDENT,
NAME=tokenize.NAME,
OPENERS=('class', 'def', 'for', 'if', 'try', 'while')):
if self.finished:
pass
@ -1554,19 +1555,19 @@ class IndentSearcher(object):
self.finished = 1
def run(self):
save_tabsize = _tokenize.tabsize
_tokenize.tabsize = self.tabwidth
save_tabsize = tokenize.tabsize
tokenize.tabsize = self.tabwidth
try:
try:
tokens = _tokenize.generate_tokens(self.readline)
tokens = tokenize.generate_tokens(self.readline)
for token in tokens:
self.tokeneater(*token)
except (_tokenize.TokenError, SyntaxError):
except (tokenize.TokenError, SyntaxError):
# since we cut off the tokenizer early, we can trigger
# spurious errors
pass
finally:
_tokenize.tabsize = save_tabsize
tokenize.tabsize = save_tabsize
return self.blkopenline, self.indentedline
### end autoindent code ###

View File

@ -1,4 +1,5 @@
import os
from tkinter import *
import tkinter.messagebox as tkMessageBox

View File

@ -1,11 +1,14 @@
import os
import fnmatch
import os
import sys
from tkinter import StringVar, BooleanVar
from tkinter.ttk import Checkbutton
from idlelib import searchengine
from idlelib.searchbase import SearchDialogBase
# Importing OutputWindow fails due to import loop
from idlelib import searchengine
# Importing OutputWindow here fails due to import loop
# EditorWindow -> GrepDialop -> OutputWindow -> EditorWindow
def grep(text, io=None, flist=None):
@ -127,9 +130,9 @@ class GrepDialog(SearchDialogBase):
def _grep_dialog(parent): # htest #
from idlelib.pyshell import PyShellFileList
from tkinter import Toplevel, Text, SEL, END
from tkinter.ttk import Button
from idlelib.pyshell import PyShellFileList
top = Toplevel(parent)
top.title("Test GrepDialog")
x, y = map(int, parent.geometry().split('+')[1:])

View File

@ -27,9 +27,11 @@ show_idlehelp - Create HelpWindow. Called in EditorWindow.help_dialog.
from html.parser import HTMLParser
from os.path import abspath, dirname, isfile, join
from platform import python_version
from tkinter import Toplevel, Frame, Text, Menu
from tkinter.ttk import Menubutton, Scrollbar
from tkinter import font as tkfont
from idlelib.config import idleConf
## About IDLE ##

View File

@ -1,12 +1,14 @@
"""About Dialog for IDLE
"""
import os
from sys import version
from tkinter import *
from idlelib import textview
class AboutDialog(Toplevel):
"""Modal about dialog for idle
@ -144,6 +146,7 @@ class AboutDialog(Toplevel):
def Ok(self, event=None):
self.destroy()
if __name__ == '__main__':
import unittest
unittest.main('idlelib.idle_test.test_help_about', verbosity=2, exit=False)

View File

@ -2,6 +2,7 @@
from idlelib.config import idleConf
class History:
''' Implement Idle Shell history mechanism.
@ -99,6 +100,7 @@ class History:
self.pointer = None
self.prefix = None
if __name__ == "__main__":
from unittest import main
main('idlelib.idle_test.test_idlehistory', verbosity=2, exit=False)
main('idlelib.idle_test.test_history', verbosity=2, exit=False)

View File

@ -4,11 +4,10 @@ HyperParser uses PyParser. PyParser mostly gives information on the
proper indentation of code. HyperParser gives additional information on
the structure of code.
"""
import string
from keyword import iskeyword
from idlelib import pyparse
import string
from idlelib import pyparse
# all ASCII chars that may be in an identifier
_ASCII_ID_CHARS = frozenset(string.ascii_letters + string.digits + "_")

View File

@ -1,6 +1,7 @@
import unittest
import io
from idlelib.pyshell import PseudoInputFile, PseudoOutputFile
from idlelib.run import PseudoInputFile, PseudoOutputFile
class S(str):
@ -230,4 +231,4 @@ class PseudeInputFilesTest(unittest.TestCase):
if __name__ == '__main__':
unittest.main()
unittest.main(verbosity=2)

View File

@ -2,9 +2,10 @@
A number of functions that enhance IDLE on Mac OSX.
"""
from sys import platform # Used in _init_tk_type, changed by test.
import tkinter
import warnings
import tkinter
## Define functions that query the Mac graphics type.
## _tk_type and its initializer are private to this section.

View File

@ -28,9 +28,9 @@ The order by which events are called is defined by these rules:
unless this conflicts with the first rule.
Each function will be called at most once for each event.
"""
import sys
import re
import sys
import tkinter
# the event type constants, which define the meaning of mc_type

View File

@ -1,9 +1,12 @@
from tkinter import *
from idlelib.editor import EditorWindow
import re
from tkinter import *
import tkinter.messagebox as tkMessageBox
from idlelib.editor import EditorWindow
from idlelib import iomenu
class OutputWindow(EditorWindow):
"""An editor window that can serve as an output file.

View File

@ -14,10 +14,11 @@ Known problems with comment reformatting:
spaces, they will not be considered part of the same block.
* Fancy comments, like this bulleted list, aren't handled :-)
"""
import re
from idlelib.config import idleConf
class FormatParagraph:
menudefs = [
@ -189,6 +190,7 @@ def get_comment_header(line):
if m is None: return ""
return m.group(1)
if __name__ == "__main__":
import unittest
unittest.main('idlelib.idle_test.test_paragraph',

View File

@ -4,7 +4,6 @@ When you hit a right paren, the cursor should move briefly to the left
paren. Paren here is used generically; the matching applies to
parentheses, square brackets, and curly braces.
"""
from idlelib.hyperparser import HyperParser
from idlelib.config import idleConf

View File

@ -1,10 +1,10 @@
import importlib.machinery
import os
import sys
import importlib.machinery
from idlelib.tree import TreeItem
from idlelib.browser import ClassBrowser, ModuleBrowserTreeItem
from idlelib.pyshell import PyShellFileList
from idlelib.tree import TreeItem
class PathBrowser(ClassBrowser):
@ -24,6 +24,7 @@ class PathBrowser(ClassBrowser):
def rootnode(self):
return PathBrowserTreeItem()
class PathBrowserTreeItem(TreeItem):
def GetText(self):
@ -36,6 +37,7 @@ class PathBrowserTreeItem(TreeItem):
sublist.append(item)
return sublist
class DirBrowserTreeItem(TreeItem):
def __init__(self, dir, packages=[]):
@ -95,6 +97,7 @@ class DirBrowserTreeItem(TreeItem):
sorted.sort()
return sorted
def _path_browser(parent): # htest #
flist = PyShellFileList(parent)
PathBrowser(flist, _htest=True)

View File

@ -1,5 +1,5 @@
from idlelib.redirector import WidgetRedirector
from idlelib.delegator import Delegator
from idlelib.redirector import WidgetRedirector
class Percolator:

View File

@ -1,6 +1,6 @@
from collections import Mapping
import re
import sys
from collections import Mapping
# Reason last stmt is continued (or C_NONE if it's not).
(C_NONE, C_BACKSLASH, C_STRING_FIRST_LINE,

View File

@ -15,9 +15,13 @@ if TkVersion < 8.5:
parent=root)
sys.exit(1)
from code import InteractiveInterpreter
import getopt
import io
import linecache
import os
import os.path
from platform import python_version, system
import re
import socket
import subprocess
@ -25,23 +29,20 @@ import sys
import threading
import time
import tokenize
import warnings
import linecache
from code import InteractiveInterpreter
from platform import python_version, system
from idlelib import testing
from idlelib.editor import EditorWindow, fixwordbreaks
from idlelib.filelist import FileList
from idlelib import testing # bool value
from idlelib.colorizer import ColorDelegator
from idlelib.undo import UndoDelegator
from idlelib.outwin import OutputWindow
from idlelib.config import idleConf
from idlelib.run import idle_formatwarning, PseudoInputFile, PseudoOutputFile
from idlelib import rpc
from idlelib import debugger
from idlelib import debugger_r
from idlelib.editor import EditorWindow, fixwordbreaks
from idlelib.filelist import FileList
from idlelib import macosx
from idlelib.outwin import OutputWindow
from idlelib import rpc
from idlelib.run import idle_formatwarning, PseudoInputFile, PseudoOutputFile
from idlelib.undo import UndoDelegator
HOST = '127.0.0.1' # python execution server on localhost loopback
PORT = 0 # someday pass in host, port for remote debug capability
@ -51,7 +52,6 @@ PORT = 0 # someday pass in host, port for remote debug capability
# temporarily redirect the stream to the shell window to display warnings when
# checking user's code.
warning_stream = sys.__stderr__ # None, at least on Windows, if no console.
import warnings
def idle_showwarning(
message, category, filename, lineno, file=None, line=None):

View File

@ -23,9 +23,10 @@ Subclass HelpSource gets menu item and path for additions to Help menu.
import importlib
import os
from sys import executable, platform # Platform is set for one test.
from tkinter import Toplevel, StringVar, W, E, N, S
from tkinter import filedialog
from tkinter.ttk import Frame, Button, Entry, Label
from tkinter import filedialog
from tkinter.font import Font
class Query(Toplevel):

View File

@ -3,12 +3,12 @@ Uses idlelib.SearchEngine for search capability.
Defines various replace related functions like replace, replace all,
replace+find.
"""
from tkinter import StringVar, TclError
from idlelib import searchengine
from idlelib.searchbase import SearchDialogBase
import re
from tkinter import StringVar, TclError
from idlelib.searchbase import SearchDialogBase
from idlelib import searchengine
def replace(text):
"""Returns a singleton ReplaceDialog instance.The single dialog

View File

@ -26,23 +26,21 @@ See the Idle run.main() docstring for further information on how this was
accomplished in Idle.
"""
import sys
import os
import builtins
import copyreg
import io
import socket
import marshal
import os
import pickle
import queue
import select
import socket
import socketserver
import struct
import pickle
import sys
import threading
import queue
import traceback
import copyreg
import types
import marshal
import builtins
def unpickle_code(ms):
co = marshal.loads(ms)
@ -60,10 +58,12 @@ def dumps(obj, protocol=None):
p.dump(obj)
return f.getvalue()
class CodePickler(pickle.Pickler):
dispatch_table = {types.CodeType: pickle_code}
dispatch_table.update(copyreg.dispatch_table)
BUFSIZE = 8*1024
LOCALHOST = '127.0.0.1'
@ -487,16 +487,19 @@ class RemoteObject(object):
# Token mix-in class
pass
def remoteref(obj):
oid = id(obj)
objecttable[oid] = obj
return RemoteProxy(oid)
class RemoteProxy(object):
def __init__(self, oid):
self.oid = oid
class RPCHandler(socketserver.BaseRequestHandler, SocketIO):
debugging = False
@ -514,6 +517,7 @@ class RPCHandler(socketserver.BaseRequestHandler, SocketIO):
def get_remote_proxy(self, oid):
return RPCProxy(self, oid)
class RPCClient(SocketIO):
debugging = False
@ -539,6 +543,7 @@ class RPCClient(SocketIO):
def get_remote_proxy(self, oid):
return RPCProxy(self, oid)
class RPCProxy(object):
__methods = None
@ -587,6 +592,7 @@ def _getattributes(obj, attributes):
if not callable(attr):
attributes[name] = 1
class MethodProxy(object):
def __init__(self, sockio, oid, name):

View File

@ -2,21 +2,21 @@ import io
import linecache
import queue
import sys
import _thread as thread
import threading
import time
import traceback
import tkinter
import _thread as thread
import threading
import warnings
from idlelib import calltips
from idlelib import autocomplete
from idlelib import debugger_r
from idlelib import debugobj_r
from idlelib import stackviewer
from idlelib import rpc
from idlelib import iomenu
import tkinter # Tcl, deletions, messagebox if startup fails
from idlelib import autocomplete # AutoComplete, fetch_encodings
from idlelib import calltips # CallTips
from idlelib import debugger_r # start_debugger
from idlelib import debugobj_r # remote_object_tree_item
from idlelib import iomenu # encoding
from idlelib import rpc # multiple objects
from idlelib import stackviewer # StackTreeItem
import __main__
for mod in ('simpledialog', 'messagebox', 'font',
@ -27,7 +27,6 @@ for mod in ('simpledialog', 'messagebox', 'font',
LOCALHOST = '127.0.0.1'
import warnings
def idle_formatwarning(message, category, filename, lineno, line=None):
"""Format warnings the IDLE way."""
@ -280,6 +279,7 @@ def exit():
capture_warnings(False)
sys.exit(0)
class MyRPCServer(rpc.RPCServer):
def handle_error(self, request, client_address):

View File

@ -20,11 +20,12 @@ XXX GvR Redesign this interface (yet again) as follows:
import os
import tabnanny
import tokenize
import tkinter.messagebox as tkMessageBox
from idlelib import pyshell
from idlelib.config import idleConf
from idlelib import macosx
from idlelib import pyshell
indent_message = """Error: Inconsistent indentation detected!

View File

@ -1,7 +1,9 @@
from tkinter import *
from idlelib import macosx
from tkinter.ttk import Scrollbar
from idlelib import macosx
class ScrolledList:
default = "(None)"

View File

@ -24,6 +24,7 @@ def find_selection(text):
"Handle the editor edit menu item and corresponding event."
return _setup(text).find_selection(text)
class SearchDialog(SearchDialogBase):
def create_widgets(self):

View File

@ -3,6 +3,7 @@
from tkinter import Toplevel, Frame
from tkinter.ttk import Entry, Label, Button, Checkbutton, Radiobutton
class SearchDialogBase:
'''Create most of a 3 or 4 row, 3 column search dialog.

View File

@ -1,5 +1,6 @@
'''Define SearchEngine for search dialogs.'''
import re
from tkinter import StringVar, BooleanVar, TclError
import tkinter.messagebox as tkMessageBox
@ -14,6 +15,7 @@ def get(root):
# This creates a cycle that persists until root is deleted.
return root._searchengine
class SearchEngine:
"""Handles searching a text widget for Find, Replace, and Grep."""
@ -186,6 +188,7 @@ class SearchEngine:
col = len(chars) - 1
return None
def search_reverse(prog, chars, col):
'''Search backwards and return an re match object or None.

View File

@ -1,11 +1,12 @@
import os
import sys
import linecache
import os
import re
import sys
import tkinter as tk
from idlelib.tree import TreeNode, TreeItem, ScrolledCanvas
from idlelib.debugobj import ObjectTreeItem, make_objecttreeitem
from idlelib.tree import TreeNode, TreeItem, ScrolledCanvas
def StackBrowser(root, flist=None, tb=None, top=None):
if top is None:
@ -16,6 +17,7 @@ def StackBrowser(root, flist=None, tb=None, top=None):
node = TreeNode(sc.canvas, None, item)
node.expand()
class StackTreeItem(TreeItem):
def __init__(self, flist=None, tb=None):
@ -54,6 +56,7 @@ class StackTreeItem(TreeItem):
sublist.append(item)
return sublist
class FrameTreeItem(TreeItem):
def __init__(self, info, flist):
@ -95,6 +98,7 @@ class FrameTreeItem(TreeItem):
if os.path.isfile(filename):
self.flist.gotofileline(filename, lineno)
class VariablesTreeItem(ObjectTreeItem):
def GetText(self):
@ -119,6 +123,7 @@ class VariablesTreeItem(ObjectTreeItem):
sublist.append(item)
return sublist
def _stack_viewer(parent): # htest #
from idlelib.pyshell import PyShellFileList
top = tk.Toplevel(parent)

View File

@ -1,5 +1,6 @@
from tkinter import Frame, Label
class MultiStatusBar(Frame):
def __init__(self, master, **kw):
@ -17,6 +18,7 @@ class MultiStatusBar(Frame):
label.config(width=width)
label.config(text=text)
def _multistatus_bar(parent): # htest #
from tkinter import Toplevel, Frame, Text, Button
top = Toplevel(parent)

View File

@ -285,6 +285,7 @@ class TabSet(Frame):
# placed hide it
self.tab_set.lower()
class TabbedPageSet(Frame):
"""A Tkinter tabbed-pane widget.
@ -302,6 +303,7 @@ class TabbedPageSet(Frame):
remove_page() methods.
"""
class Page(object):
"""Abstract base class for TabbedPageSet's pages.
@ -467,6 +469,7 @@ class TabbedPageSet(Frame):
self._tab_set.set_selected_tab(page_name)
def _tabbed_pages(parent): # htest #
top=Toplevel(parent)
x, y = map(int, parent.geometry().split('+')[1:])

View File

@ -1,11 +1,11 @@
"""Simple text browser for IDLE
"""
from tkinter import *
from tkinter.ttk import Scrollbar
from tkinter.messagebox import showerror
class TextViewer(Toplevel):
"""A simple text viewer dialog for IDLE

View File

@ -15,10 +15,12 @@
# - optimize tree redraw after expand of subnode
import os
from tkinter import *
from tkinter.ttk import Scrollbar
from idlelib import zoomheight
from idlelib.config import idleConf
from idlelib import zoomheight
ICONDIR = "Icons"

View File

@ -1,5 +1,7 @@
import string
from idlelib.delegator import Delegator
# tkintter import not needed because module does not create widgets,
# although many methods operate on text widget arguments.
@ -158,7 +160,6 @@ class UndoDelegator(Delegator):
class Command:
# Base class for Undoable commands
tags = None
@ -204,7 +205,6 @@ class Command:
class InsertCommand(Command):
# Undoable insert command
def __init__(self, index1, chars, tags=None):
@ -262,7 +262,6 @@ class InsertCommand(Command):
class DeleteCommand(Command):
# Undoable delete command
def __init__(self, index1, index2=None):
@ -297,8 +296,8 @@ class DeleteCommand(Command):
text.see('insert')
##sys.__stderr__.write("undo: %s\n" % self)
class CommandSequence(Command):
class CommandSequence(Command):
# Wrapper for a sequence of undoable cmds to be undone/redone
# as a unit

View File

@ -1,5 +1,6 @@
from tkinter import *
class WindowList:
def __init__(self):
@ -48,6 +49,7 @@ class WindowList:
t, v, tb = sys.exc_info()
print("warning: callback failed in WindowList", t, ":", v)
registry = WindowList()
add_windows_to_menu = registry.add_windows_to_menu

View File

@ -5,6 +5,7 @@ import sys
from idlelib import macosx
class ZoomHeight:
menudefs = [
@ -20,6 +21,7 @@ class ZoomHeight:
top = self.editwin.top
zoom_height(top)
def zoom_height(top):
geom = top.wm_geometry()
m = re.match(r"(\d+)x(\d+)\+(-?\d+)\+(-?\d+)", geom)