Tim Peters writes:

[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>.
diff --git a/Tools/idle/WidgetRedirector.py b/Tools/idle/WidgetRedirector.py
index 45f86f7..b11b0e4 100644
--- a/Tools/idle/WidgetRedirector.py
+++ b/Tools/idle/WidgetRedirector.py
@@ -28,11 +28,11 @@
         tk = widget.tk
         w = widget._w
         tk.deletecommand(w)
-        tk.call("rename", w, orig)
+        tk.call("rename", orig, w)
 
     def register(self, name, function):
         if self.dict.has_key(name):
-            previous = function
+            previous = dict[name]
         else:
             previous = OriginalCommand(self, name)
         self.dict[name] = function