Changes by Mark Hammond: (1) support optional output_sep argument to
the constructor so he can eliminate the sys.ps2 that PythonWin leaves
in the source; (2) remove duplicate history items.
Hah! A fix of my own to Tim's code!
Unix bindings for <<toggle-tabs>> and <<change-indentwidth>> were
missing, and somehow that meant the events were never generated,
even though they were in the menu. The new Unix bindings are now
the same as the Windows bindings (M-t and M-u).
The new version (attached) is fast enough all the time in every real module
I have <whew!>. You can make it slow by, e.g., creating an open list with
5,000 90-character identifiers (+ trailing comma) each on its own line, then
adding an item to the end -- but that still consumes less than a second on
my P5-166. Response time in real code appears instantaneous.
Fixed some bugs.
New feature: when hitting ENTER and the cursor is beyond the line's leading
indentation, whitespace is removed on both sides of the cursor; before
whitespace was removed only on the left; e.g., assuming the cursor is
between the comma and the space:
def something(arg1, arg2):
^ cursor to the left of here, and hit ENTER
arg2): # new line used to end up here
arg2): # but now lines up the way you expect
New hack: AutoIndent has grown a context_use_ps1 Boolean config option,
defaulting to 0 (false) and set to 1 (only) by PyShell. Reason: handling
the fancy stuff requires looking backward for a parsing synch point; ps1
lines are the only sensible thing to look for in a shell window, but are a
bad thing to look for in a file window (ps1 lines show up in my module
docstrings often). PythonWin's shell should set this true too.
Persistent problem: strings containing def/class can still screw things up
completely. No improvement. Simplest workaround is on the user's head, and
consists of inserting e.g.
def _(): pass
(or any other def/class) after the end of the multiline string that's
screwing them up. This is especially irksome because IDLE's syntax coloring
is *not* confused, so when this happens the colors don't match the
indentation behavior they see.
[Tim, after adding some bracket smarts to AutoIndent.py]
> ...
> What it can't possibly do without reparsing large gobs of text is
> suggest a reasonable indent level after you've *closed* a bracket
> left open on some previous line.
> ...
The attached can, and actually fast enough to use -- most of the time. The
code is tricky beyond belief to achieve that, but it works so far; e.g.,
return len(string.expandtabs(str[self.stmt_start :
^ indents to caret
i],
^ indents to caret
self.tabwidth)) + 1
^ indents to caret
It's about as smart as pymode now, wrt both bracket and backslash
continuation rules. It does require reparsing large gobs of text, and if it
happens to find something that looks like a "def" or "class" or sys.ps1
buried in a multiline string, but didn't suck up enough preceding text to
see the start of the string, it's completely hosed. I can't repair that --
it's just too slow to reparse from the start of the file all the time.
AutoIndent has grown a new num_context_lines tuple attribute that controls
how far to look back, and-- like other params --this could/should be made
user-overridable at startup and per-file on the fly.
One new file in the attached, PyParse.py. The LineStudier (whatever it was
called <wink>) class was removed from AutoIndent; PyParse subsumes its
functionality.
Tim Peters keeps revising this module (more to come):
Removed "New tabwidth" menu binding.
Added "a tab means how many spaces?" dialog to block tabify and untabify. I
think prompting for this is good now: they're usually at-most-once-per-file
commands, and IDLE can't let them change tabwidth from the Tk default
anymore, so IDLE can no longer presume to have any idea what a tab means.
Irony: for the purpose of keeping comments aligned via tabs, Tk's
non-default approach is much nicer than the Emacs/Notepad/Codewright/vi/etc
approach.
1. Catch NameError on import (could be raised by case mismatch on Windows).
2. No longer need to reset pyclbr cache and show watch cursor when calling
ClassBrowser -- the ClassBrowser takes care of pyclbr and the TreeWidget
takes care of the watch cursor.
3. Reset the focus to the current window after error message about class
browser on buffer without filename.
Barry Warsaw [Thu, 27 May 1999 23:13:21 +0000 (23:13 +0000)]
posix_listdir(): When an error occurs, call
posix_error_with_filename() instead of posix_error(), passing in the
name argument, so you get information on which directory was being
listed.
Fred Drake [Wed, 26 May 1999 13:03:34 +0000 (13:03 +0000)]
Change the example of configuring for large file support under Solaris
to use `getconf LFS_CFLAGS`. Steve Clift (the author of the section
and large file support) agrees that this is the right thing to do.
Barry Warsaw [Mon, 24 May 1999 21:43:37 +0000 (21:43 +0000)]
(py-electric-backspace): I'm not sure this function should be special
casing when py-honor-comment-indentation is nil, but this could be a
religious issue with some. Seems to me we should still be dedenting
such comment lines one level.
Barry Warsaw [Mon, 24 May 1999 19:57:32 +0000 (19:57 +0000)]
(py-parse-state): When running under Emacs -- which doesn't have
buffer-syntactic-context -- just short circuit the TQS test by jumping
to point-min and doing the test from there. For long files, this will
be faster than looping with a re-search-backwards.
Just van Rossum [Fri, 21 May 1999 21:42:27 +0000 (21:42 +0000)]
Oliver Steele writes:
"""Despite the best intentions of Anarchie and Internet Explorer, I often end
up with Python source files (and other text files that I'd like to edit with
PythonIDE) that use '\n' instead of '\r' as a line separator (and therefore
sh
Guido van Rossum [Fri, 21 May 1999 16:12:30 +0000 (16:12 +0000)]
Andy Dustman writes:
I noticed while watching (with lsof) my forking SocketServer app running
that I would get multiple processes listening to the socket. For the most
part, this doesn't hurt things, but if you terminate the server, this can
prevent it from restarting because it cannot bind to the port due to any
running children which also have the socket open. The following one-liner
fixes this.
Fred Drake [Tue, 18 May 1999 17:34:51 +0000 (17:34 +0000)]
Modify to perform "---" to "—" conversion outside of
verbatim-like environments. The list of verbatim-like environments is
a defined by a variable in main().
Fred Drake [Mon, 17 May 1999 14:47:10 +0000 (14:47 +0000)]
\declaremodule: Make this more robust. Only attempt to add an index
entry based on the module type if the type is known.
Otherwise, spit out a warning the the module type
parameter was bad and generate a "plain" index entry.
Without this, the bad module type was emitted as
text.
Problem noticed by processing Michael Hudson's docs for
bytecodehacks.
Fred Drake [Thu, 13 May 1999 18:36:54 +0000 (18:36 +0000)]
make_index_entry(): Remove. Not only did this override the
l2hinit.perl version of the function (which
overrode a version in latex2html), but
do_cmd_index() was overridden. Since
do_cmd_index() was the only caller, we can trash
this.
define_indexing_macro(): New function used during setup to support
more dynamic dispatch for indexing.
process_index_macros(): New function; implement dynamic dispatching
of indexing support functions, allowing many
targets used in indexing to be shared by
multiple index entries. I.e., something like
\index{foo}\bifuncindex{bar} can now share a
single target anchor.
These indexing changes reduce the amount of clutter in the generated
HTML files. In the reference manual, this cuts the number of targets
by 44%. Targets are less affected when generated by environments
rather than macros.
Fred Drake [Fri, 7 May 1999 21:14:28 +0000 (21:14 +0000)]
ExtendedEsisBuilder.push(): Override inherited definition. We don't
want to push nodes into the document, but into a document
fragment, since we're not necesarily working with something
that's well-formed.
Fred Drake [Thu, 6 May 1999 19:37:38 +0000 (19:37 +0000)]
Make it work for "manual" documents as well as "howto" documents.
This still doesn't understand anything about multiple source files or
checking time dependencies.
1. Fixes float divmod so that the quotient it returns is always an integral
value.
2. Fixes float % and float divmod so that the remainder always gets the
right sign (the current code uses a "are the signs different?" test that
doesn't work half the time <wink> when the product of the divisor and the
remainder underflows to 0).
Nathan Paul Simons noticed that the grid_remove() method was missing.
(The difference between grid_remove() and grid_forget() is that the
former remembers the options for the slave.)
I'm still unsure, but couldn't stand the virtual event trickery so tried a
different sin (adding undo_block_start/stop methods to the Text instance in
EditorWindow.py). Like it or not, it's efficient and works <wink>. Better
idea?
Give the attached a whirl. Even if you hate the implementation, I think
you'll like the results. Think I caught all the "block edit" cmds,
including Format Paragraph, plus subtler ones involving smart indents and
backspacing.
[W]hile trying to dope out how redirection works, stumbled into two
possible glitches. In the first, it doesn't appear to make sense to try to
rename a command that's already been destroyed; in the second, the name
"previous" doesn't really bring to mind "ignore the previous value" <wink>.