This issue tracker has been migrated to GitHub, and is currently read-only.
For more information, see the GitHub FAQs in the Python's Developer Guide.

Author terry.reedy
Recipients cheryl.sabella, louielu, terry.reedy
Date 2017-05-21.09:24:21
SpamBayes Score -1.0
Marked as misclassified Yes
Message-id <1495358662.91.0.337523431285.issue30422@psf.upfronthosting.co.za>
In-reply-to
Content
Idlelib needs a roadmap with a bit of history to help orient new contributors to IDLE as to where I see it going.  I am not sure whether to add this to README.txt or make is a separate roadmap.txt file.  A rough draft (which started as just an outline ;-):

Summary of planned improvements:
  Fix bugs and selectively add enhancements.
  Continue improving tests.
  Modernize code and refactor as needed for other improvements.
  Convert tk widgets with ttk equivalents to ttk.
  Convert IDLE from multiple windows to a window with tabbed panes.


Recent history relevant to current improvements:

* Summer 2010: Pydev discussed whether to remove IDLE (too old) or modernize it.  'Modernize' mostly meant 'use the better-looking ttk widgets' and 'convert IDLE a modern single window app'.  The decision was to modernize, but this was mostly blocked from starting at that time.  Using ttk dependably requires tcl/tk 8.5.  Reorganizing IDLE externally requires internal reorganization that will break 3rd party extensions that use more than the documented extension API.

* Winter 2013: PEP 434 formalized the practice of allowing IDLE improvements to be backported even if more of an enhancement than a bug fix.  Except for idlelib.idle.*, it also declared idlelib to be a 'private implementation modules'.  The intention was to eventually allow refactoring, even if not immediately.  'Big' changes like using ttk and tabbed pane conversion were specifically kept blocked until decided otherwise in further discussion.

* Spring 2016: After the required further discussion, which began the previous summer, modernization and refactoring were unblocked for IDLE 3.6+.  IDLE 3.6 was allowed to (and now does) require tcl/tk 8.5.  Any 3rd-party code that requires 3.5 idlelib can adjust, require Python 3.5, or incorporate 3.5 idlelib.


Specific goals for 3.7:

* Bug fixes: Some priorities are fix hangs and crashes; continue after exceptions, if possible, instead of exiting; display fatal exceptions in a tk messagebox before exiting.  Backport all changes to 3.6.  

* Unittests: Continue expanding the test/test_idle.py and  idlelib/idle_test/ suite begun in Summer 2013.  Change code as needed to enable testing.  (The May 2016 decision allows this to be done freely.)  Ideally, test every patch to prevent regressions.

* Dialog appearance and operation: Htests ensure that widget creation code runs and that the 'look and feel' is minimally acceptable.  Convert any remaining 'sanity check' code not converted in summer 2014, such as in config.py.  Fix some remaining consistency issues.  Rework About IDLE and the option dialogs.

* Modernizing code: After the May 2016 decisions, modules were renamed to short lowercase PEP8 names.  Changes within modules are best done when adding tests (if a module is not already fully tested).  Some specifics:
  - Convert function names to lowercase.
  - Replace '*' in 'from tkinter import *' with objects.
  - Convert tkinter submodule imports from the backwards-looking 2to3 conversion.  Change 'import tkinter.font as TkFont' to 'from tkinter import font' and replace 'TkFont' with 'font' in the rest of a module.  Do the same with messagebox, colorchooser, and simpledialog.
  - Eliminate unneeded intermediate collections objects (some from 2to3 conversion).  Example: 'for k in list(d.keys):' should be 'for k in d:'.

[Notes: import * and VALUE versus 'value' are discussed in #30290. Searching idlelib for 'import tkinter.' gets 16 hits.]

* Refactoring: Make Editor, PyShell, and Output subclasses of a base text-based window that only has common features.  Separate startup code from pyshell.

* Ttk widgets: Some windows and dialogs have been converted.  Finish.  Optional: allow selection of available themes.  [Futuristic: create an IDLE theme, possibly based on the Python snake colors, green, blue, and yellow.]

* Tabbed panes: Convert any listed toplevel windows with multiple widgets to windows with a frame with multiple widgets.  (The help window was specifically designed this way.)  Frames can later be moved from the window to a tab.  (To do this, text-based frames in menu windows must also be disentangled from the menu.)

I would like to have a single window app by 2017, but that is too speculative to list now.
History
Date User Action Args
2017-05-21 09:24:23terry.reedysetrecipients: + terry.reedy, louielu, cheryl.sabella
2017-05-21 09:24:22terry.reedysetmessageid: <1495358662.91.0.337523431285.issue30422@psf.upfronthosting.co.za>
2017-05-21 09:24:22terry.reedylinkissue30422 messages
2017-05-21 09:24:21terry.reedycreate