This is the near-term task list for Wing IDE Basic, containing planned bug fixes and feature enhancements by release. This is a working document, does not represent a contract or commitment to inclusion of listed items in each release, and may change without notice. * : High priority - : Lower priority ? : May not be addressed x : Not a bug in Wing Version 1.1.* ============= General Bugs ------------ x Python 2.1 nested scope of class within a function def will cause the debugger to segfault when the tracer hits a 'class' defn within the function. This is a bug in Python 2.1.0 but was fixed in 2.1.1. A work-around for Python 2.1.0 is to use wingdbstub and issue the SuspendDebug() call before the problem code is hit, and ResumeDebug() afterwards. x Upgrading doesn't always work when patch files have been applied previously. Uninstalling completely first works. * Wing can time out during startup of Zope in some cases if files have been altered outside of Wing. Removing all breakpoints before starting Zope works around the problem. * Reload dialog should not come up during menu navigation, when a modal dialog is active, or when Wing is not in the foreground * Reload dialog does not remove views that have been closed since it was displayed. * Switch-view (ctrl-x b in emacs) restores state of view to old scroll position and selection state in some cases * Digit menu accelerators in Windows menu randomly don't always work. * Set font size of the error list to be same as for source editors (also update it when the source editor font size is changed from Source menu) - In normal editor mode, alt-del should delete to end of line (currently does backward-word-del) - this should act like emacs ^K - Break point margin click doesn't work in source browser window - If close the error list dialog, then bring it up again, then check the "Ignore this exception location" box and hit Close & Continue, the dialog closes but the process doesn't continue. - Wing prints harmless widget size allocation warnings when drag the project window divider and during menu navigation (only visible if running Wing with a console window) Linux Bugs ---------- * Would be nice to release X grab if it's held by the debuggee when a breakpoint or exception is reached * Change view placement to be more impervious to follow-focus mouse style X servers... otherwise, end up putting new views into windows the user didn't intend. Win32 Bugs ---------- * On Win32 dual monitors, pull down menus show up on the primary monitor even if the window is on the secondary monitor. * A WXPython debug process may crash when running under Wing debugger. This has been observed when rapidly scrolling pixmaps on the screen and is related to the idle callback we install in WX. May be a threading bug in WX or WXPython. - Editor scrolling is off by one pixel on win32: Artifacts appear at bottom and right if window is just the right size. - Debugger never allows Use Inherited Console, although it should when running console_wing.exe - Title bar should flash if Wing is not in the foreground and reload file message is received. - README file on cd has LF newlines Version 1.2+ ============ Refactoring Tasks ----------------- * Change 'util' to some other name to avoid conflicts with Python libs * Change all windows and dialogs to be based on viewmgr/windowmgr so they show up in the Windows menu and future windowing modes can alter how they are shown and managed * Totally async debug network protocol, fill data values in incrementally as they arrive, prioritize top-level/expanded values that are scrolled into view over those that are not; also unify and expand error handling to all be with one set of codes in first field of value tuple * Changes to gtk to allow processing of network events, etc, while native win32 file selector is up (needed for totally async debug network protocol) * Support multiple concurrent debug connections and threads * Change disconnected interactive shell to work with a dummy local debug process and also make it possible to access this from the expression evaluator * Restructure so we can open source most or all of util * Rename prefs manager to props file mgr and prepare to open source * Prepare license manager to open source * Fix the manager refcount tangle... so all managers are registered in the guimgr and all others go there to find another manager * Possibly, change pyscintilla to omit python defs for things that just call through to C++ * Possibly, change to use UTF-8 unicode internally instead of WCP, and pass that across the win32gtk API. This may be needed for Japanese language support. * Centrally register all cache mgr attribs with default value info, connection to preferences if any, data types allowable, whether stored per-platform or not, whether sharable via revision control, and expiration threshold times. * Analysis should use random access disk file format that allows seperate access to class information, and should set threshold at which to toss analysis objects not relevant to currently open project to avoid long updates on changed Python path (and similar) - Add auto-generation of command docs and key equivs from Python source - Improve linking of dbgtracer*_d.pyd: Can we use distutils's --debug switch to build these? Ditto for scintillamodule, which doesn't have debug symbols on win32 right now. - win32gtk reports keyvalues to connected callbacks in the upper case range rather than lower case, which is how this works on unix. This is at least try for control + key combinations. Our code works around this but the change in win32gtk may break things. - Replace win32gtk cursor code to use only gtk cursors not HCURSOR Ports ----- * Test on Caldera 3.1 and Mandrake 7.02 * Solaris * Mac OS X * FreeBSD - SGI - Jython - Python.NET - PPC Linux - AIX - Dec Alpha running OSF - Japanese language support Gui Manager ----------- * Simpler ability to reconfigure menus and toolbars (without problems across updates) * Support gtk-style key bindings (popup menu and then push keys to assign) * X win printing based on gnome print instead of py2pdf, and add print dialogs * Get left alt-space to work correctly to reach window operations menu * gtk menus stay up if switch apps with alt-tab on win32 * Windows sometimes resize -- e.g. in proj mgr, ^X^F, tab-tab-tab, then push ctrl, alt or fn (win32 only?) * Context-sensitive help * Long menus attached to the menu bar often appear with portions of themselves off the screen if there is not enough room between the menu bar and the bottom of the screen. The 2nd time the menu comes up, it seems to position itself a bit better. * Need to truncate text displayed in status area below editor to fit in window or disable spontaneous resize of window when it's long (to replicate, position cursor before ')' in long, multi-line def and then ctrl-M (match braces): Insertion of the long source line causes window to widen). May just need set_line_wrap(true) on the GtkLabel? * In emacs mode, ~ and // in file selection do not do what they should * Allow more cursor keys (e.g. alt-backspace) in text entry boxes. * Close search manager window when is pressed * Allow search/replace from search manager on CR, LF chars also: Add special char popup menu and allow pasting in EOL without translation and/or setting EOL mode for the view (seems to use CRLF all the time now) * Error List dialog should store checkbox for ignore value as soon as it's changed, not when dialog is closed * Allow keysymbols to have aliases so keypad cursor keys work without the KP_* mappings. * Colorize preferences file and maybe add mouse over hints. - Add optional ability for console used for Execute File commands to wait around after the sub-process exits, or integrate this with some sort of console mgr inside Wing and general purpose I/O redirection. - Look at fixing the rc_style-related problem in unix GTK or pygtk that causes crashing when running with themes, esp. when themes are changed while Wing is running or when source editor windows are closed (this is not an issue in our private gtk copy since we turn themes off, but would be the key to supporting themes in general again) - Menu label underlines are a bit too long on win32 - Windows menu grows in width when torn off and the focus window changes ? Wing won't run on win32 in 256 color mode ? Real usable screen size isn't detected when running on Linux in an environment with borders such as those in KDE or Gnome. Workaround: Set the gui.work-area-rect preference to limit Wing's use of screen space Analysis/Browser ---------------- * Call tips * Add inferencing cases: (a) Infer type of list/tuple elements and dict keys/values, (b) infer fct return value type through parameters (as in def A(a): return a), (c) infer x = ClassX() and x.a = ... assignment outside of the class methods, (d) infer types through lambda statements, (e) inferencing from using built in types as factories (py2.2), (f) static and class methods (py2.2), (g) subclasses of built-in types (py2.2), (h) 'properties' (py2.2), (i) 'slots' (py2.2), (j) super() (py2.2), and (k) iterators/generators through yield (py2.2). * Browser warning if it can't find many modules and dialog for suggested PYTHONPATH based on analysis and contents of the project file * Detect & parse type hints in the form of: #decl : * Fix analysis so it sees imports that are within try/except clauses at top level (and possibly other similar cases too) * Treat 'Exception' and other built in exception classes as valid exceptions for the source analysis * Deleting and then restoring the end of a triple quoted string or other continued line terminator may cause the rest of the buffer to fail to be re-analyzed (work around: re-open the file without closing it; this will cause from-scratch reanalysis) (fixed?) * Directory node doesn't auto update when directory contents change on disk * Possible to include in auto completion symbols mentioned in function but not yet assigned? Handy if the first thing you type isn't an assignment. * Support Python 2.1 function attributes? * Selecting on the filter check boxes can be sluggish if a lot of items are on the display * Update the parsetools library to use 2.2 grammar and keywords. * Write interpreter info to disk and reread when wing starts. * Not all subclasses are included in the source browser below their base class when aliases to classes are created through assignment. An example of this is in cache.manager in Wing source code where CResourceAnalysis is bound to a class object through CResourceAnalysis = abstract.CResourceAnalysis. * A file mydir/Utilities.py will mask a mydir/Utilities directory in the source browser. * Source browser doesn't toss class info when a module is removed from the project * Project window & source browser are not updated immediately after the mime type of a file is set. * Source browser should jump to most recently visited source view not always the first view, when more than one view into the same source file is open * Check box to make the source browser source view read-only to avoid accidental edits there. * Add an to methods in browser that override a method in the base class * Add a label to indicate if a module is a C extension in the browser. * Show selection in the source browser window's editor (and for result of using the source index and goto-defn features) in the same way as run location is shown (need to define a new marker type tho). Make sure this gets removed when uncheck the Follow Selection check box in browser or on any action or click subsequently. - Opening some large files in the module view is very slow: This is caused by presence of a 'from xxx import *' statement. - Tree expansion isn't retained when switching between browse mode. - Names imported into class scope might be listed as inherited rather than imported; e.g. 'class A: from mod import B.b' where B is a class (fixed?) - Almost duplicate entries will appear in a package node if the package's __init__.py imports a sub module. - Allow display of more than one instance of browser at a time Source Editor ------------- * Change backspace to delete one indentation level if it's pushed in the indent part of the line * Tabbed window option for multi-view window mode * Book marks * Ctrl-up/down in source windows as in PythonWin * Tab Nanny as in PythonWin * Add vi key bindings * Project-wide or directory-based grep * Enable copying also via menu bar from the text window of debug client and via ^C / alt-W * Popup menu in breakpoint margin for actions on the breakpoint if right click there (instead of showing the source index menu) * Convert indents on paste to correct style * Preference/mode for autocompletion where completion on tab is only to unique point in multiple matches and autocompletion doesn't terminate (as w/ emacs tab completion) * Create list of importable names when autocompleting names in import statements. * Add "reuse" checkbox to source windows, checked by default, that when unchecked will prevent the window from being reused for additional source views * PDF export capability for Python source (eventually want HTML export of API docs, etc) * Clear selection in normal editor mode when is pushed * Better anchoring/reanchoring + delete key to back out of incremental search results in search manager * Do something smarter when see weirdo line endings like CRCRLF, possibly look at a bit more of the file than just the first line to determine style, and warn user of incorrect looking or mixed line endings * For faster startup when many editors are open, delay opening views until actually shown on screen (only helps in multi-view mode) * Add Ctrl-U emacs key bindings (similar to Esc + numbers except that if you don't type numbers you get this odd 4X multiplier behaviour) * Searching while extending the selection should extend the selection to the found text. * C++ lexer doesn't handle strings continued to new lines with \ very well * C/C++ styling within preprocessor flag set in scintillamodule.cxx enable_folding() call doesn't take effect until click near or edit in a preprocessor statement (like "#ifdef DEBUG") * Prevent auto-wrap from breaking up strings * Backspace at the end of the ident outdents the line. - Add Revert menu item for forcing re-read from disk - Autoscroll after indent/dedent and comment in/out sometimes still happens, with jump to start of long selection - Change folding to work on all fold points at same level as first in selection rather than just on first in selection - Add ability to fold up all children but not the node itself - Add popup menu to the fold margin, when right mouse click on it - Python folding to collapse all outside of classes, methods and their doc strings - Optimize replace-all commands by using set_target() and replace_target() to avoid internal work scrolling, etc. Needed both for emacs query replace manager and the search manager window. - Regex search/replace - More emacs key bindings should be available in the minibuffer - Emacs kill ring support - Multi-layer undo/redo? - Need to reposition cursor when using scroll bar to avoid confusing behaviour when keyboard cursor movement is used after scroll bar - Need to speed up macro invocation (with C-only scintilla API and and possibly by turning off extra internal processing during the macro invocation) - ^U support for emacs mode (similar to Esc + numbers) - Emacs forward kill with ^K does not set the X selection on Linux - When click on non-empty multi-line selection in scintilla and don't drag it, the selection is sometimes set to (0,0) ... should be set to point of click! - Brace matching in non-styled files should use another algorithm since scintilla's brace_match() call uses styling info and so presence of braces in quotes messes up matching. May want to detect context of within-string or not within-string in all cases and write fast algorithm that doesn't depend on styling, since scintilla also will match braces within seperate strings that happen to be near each other. Could also fix scintilla and add a default lexer that styles quoted strings and a few other things. - Highlight also matching indentation guides when hilighting braces (SciTE does this) ? Printing of the all or parts of the source browser tree ? Recognize vi-style tab width as handled by the Python tokenizer Project Manager --------------- * Printing of this window (all expanded content) * Should be able to jump from project manager to source browser module view for that file - Support setting user-specific values for debug properties and other project manager values to override the values in shared fork of properties file - Optionally, place x/a and x/b visually under x rather than parallel at top level - ('hello',) is written by pretty printer and read by prefs reader as 'hello' instead of as a tuple - Fix relative file path conversion when, e.g., ../../../x does not exist in a project's context (which happens when moving between machines in some cases) ? Docstring area is not changed correctly when right-click is used on items (left-click works) ? On European machines, where decimals are #,# form instead of #.# all lines in preferences file that contain #.# decimal fail to parse (currently we've removed the decimals to avoid this) License Manager --------------- - Change to broadcast-based distributed license counting - Multiuser licensing for win32 ? Will leave .bak, .bak.bak, .bak.bak.bak files, etc on disk when new licenses are installed. Should be *.bak1, *.bak2, etc. Debugger -------- * Add example of remote debugging setup to the manual * Add more info about debugging C/C++ code mixed with Python to the Wing Tips chapter in manual (including use of python_d on Windows) * Should also multiplex our debug socket with time.sleep() calls, as we do for waiting on stdin (are there other common cases as well?). Calling this messes up Attach in any case. * Interactive shell may time out on large values. To avoid this, set preference debug.safe-size-checks-only to false. However, then Wing will cause functionality in a __getattr__ method to be invoked twice, which may have unwanted side effects. * Could use C function as tracer in py2.2+ for less debugger overhead. * Add drop-down to Python executable in project/debug-file properties with recent valid choices listed, for quick switching * Error list window should be active, allowing click to view file for stack frames * Enable copying from tree view of debug client * Allow source and debugger in same window * Add enable-all/disable-all breakpoints commands * Breakpoint ignores-left and hit counts should be accessible and resettable from the GUI, via a breakpoint overview window * Add ability to stop at breakpoints reached as a result of evaluating an expression or typing in the interactive shell window * Qt support on win32 * Show exception info when a conditional bp raises an exception * Replace xterm with window in IDE for debug program stdout/stdin * SDL game support in debugger, if that has the non-Python mainloop limitation * Support keyboard navigation of the variable display views, as exists for source browser and project manager. * Move 'self' in variable display views out to be parallel with locals and globals. - Remove newlines from debugger messages in varmanager so text wraps naturally - Sometimes, attach fails after multiple attach/detaches (win32 only?) - Allow executing arbitrary lines/blocks of code selected on the editor, as if from the Debug Probe (combined with support for stopping at bps from the debug probe, this would be useful) - Multi-list side-by-side vars view - Add wingdbstub.StopHere() and SetExceptionMode() calls - Precompile conditionals in breakpoints for faster evaluation, as follows: parse_node = PyParser_SimpleParseString(bp->cond, Py_eval_input) bp->cond_co = PyNode_Compile(parse_node, "") result = PyEval_EvalCode(bp->cond_co, globals, locals) - Add support to show the value of variables set to the following types, which are not supported now: Python tracebacks, frames, some pygtk types - Add checkbox in run args dialog to allow setting that file as the project main debug file - Add option to 'ignore breakpoint' dialog to allow selecting ignore style between 'reset to this value on each run', or 'cumulative', or 'this run only, then clear bp' or 'this run only, then set ignore=0' (or some such list) - Add unix domain sockets impl of the network protocol for faster comm - Add ability to use env variables in all property definitions. - Add ability to specify exception type as well as location in ignored exceptions and add dialog for viewing and editing the exception ignores list - Add ability to expand and view dict keys also when they are not simple types (need to add these to the GetValue registry and return a tuple for keys as well as values that allows subsequent access to the value of the key) - When in the debugger window and stopped at bp, enable the remove bp command - Textual variable data view scrolling position is lost when you use show more/less buttons - Unicode strings are shown with an extra set of quotes - $WINGHOME/debug/server is incorrectly included in the sys.path by the debug server - Naming a file "" will confuse the debugger x Debugger may fail to report errors occurring during initial load of the debug program; if this happens, turn on debug.verbose or set debug.logfile and try again; debug output will be shown in stderr or the given log file (which must exist or else logging will be disabled) Pref Mgr -------- - Add ability to specify short command line option in prefs defns and allow setting of all prefs via ide command line either via full pref name prepended with '--' or with the given short command line option name - GUI for setting prefs Win32 Bugs ---------- * Convert file names to case stored on disk rather than case entered by user * Drop down menus don't go away with second click on the menu label as do native win32 menus - When click in scrollbar arrow and use alt-tab to switch to another app without letting up the mouse, the scroll bar gets confused - Wing should attempt to save files before cancelling end session request on win98. ? Cannot debug files on \\machine\path\to\share directories that aren't mapped to a drive letter. The call to os.path.exists in wingdb.py seems to fail. ? External change checking does not work for Samba volumes (this is just a limitation of Samba but might be fixable with selective polling) Linux Bugs ---------- * Sometimes get long ../../../.. paths in the project manager, possibly if use cwd set to a path containing an alias, or may be due to setting DEVEL_WINGHOME to a path containing an alias * File open dialog doesn't show directories or files with name starting with '.' but you can access them by typing in the entry area and using and to traverse * Possibly improve the gtk file selector with Martin Preishuber's replacement? Need to make sure the license isn't GPL. See screen shot and download at http://www.its4you.at/pygnome-tools.php * Tar installer doesn't know to update 1.1b7-1 when installing 1.1b7-2: Should recognize previous Wing installation when user gives install directory and offer to uninstall before installing new version * Redo the Zope bundle for linux so it's more like the win32 bundle (an add-on for already-installed Wing IDE) Build / Packaging ----------------- * Add tutorial * Should make sure to remove the bin/dll directory as part of building a distribution * Build will contain bin/2.1.1 if run the build on a machine with upgraded Python version: Either should force bin/2.1.0, or use bin/2.1, or search for bin/2.1.x with disk scan... not sure which is safer, tho shipping against 2.x.0 may be generically safer than going with 2.x.y (?) - Generate pyscintilla's lexer_info.py with a Python code rather than Unix makefile