summaryrefslogtreecommitdiffstats
path: root/Lib/idlelib/extend.txt
diff options
context:
space:
mode:
Diffstat (limited to 'Lib/idlelib/extend.txt')
-rw-r--r--Lib/idlelib/extend.txt111
1 files changed, 37 insertions, 74 deletions
diff --git a/Lib/idlelib/extend.txt b/Lib/idlelib/extend.txt
index a1756f0..efb0fc7 100644
--- a/Lib/idlelib/extend.txt
+++ b/Lib/idlelib/extend.txt
@@ -1,4 +1,5 @@
Writing an IDLE extension
+=========================
An IDLE extension can define new key bindings and menu entries for IDLE
edit windows. There is a simple mechanism to load extensions when IDLE
@@ -7,10 +8,10 @@ to make other changes to IDLE, but this must be done by editing the IDLE
source code.)
The list of extensions loaded at startup time is configured by editing
-the file config.txt; see below for details.
+the file config-extensions.def. See below for details.
An IDLE extension is defined by a class. Methods of the class define
-actions that are invoked by those bindings or menu entries. Class (or
+actions that are invoked by event bindings or menu entries. Class (or
instance) variables define the bindings and menu additions; these are
automatically applied by IDLE when the extension is linked to an edit
window.
@@ -26,41 +27,32 @@ variables:
(There are a few more, but they are rarely useful.)
-The extension class must not bind key events. Rather, it must define
-one or more virtual events, e.g. <<zoom-height>>, and corresponding
-methods, e.g. zoom_height_event(), and have one or more class (or instance)
-variables that define mappings between virtual events and key sequences,
-e.g. <Alt-F2>. When the extension is loaded, these key sequences will
-be bound to the corresponding virtual events, and the virtual events
-will be bound to the corresponding methods. (This indirection is done
-so that the key bindings can easily be changed, and so that other
-sources of virtual events can exist, such as menu entries.)
-
-The following class or instance variables are used to define key
-bindings for virtual events:
-
- keydefs for all platforms
- mac_keydefs for Macintosh
- windows_keydefs for Windows
- unix_keydefs for Unix (and other platforms)
-
-Each of these variables, if it exists, must be a dictionary whose
-keys are virtual events, and whose values are lists of key sequences.
-
-An extension can define menu entries in a similar fashion. This is done
-with a class or instance variable named menudefs; it should be a list of
-pair, where each pair is a menu name (lowercase) and a list of menu
-entries. Each menu entry is either None (to insert a separator entry) or
-a pair of strings (menu_label, virtual_event). Here, menu_label is the
-label of the menu entry, and virtual_event is the virtual event to be
-generated when the entry is selected. An underscore in the menu label
-is removed; the character following the underscore is displayed
-underlined, to indicate the shortcut character (for Windows).
-
-At the moment, extensions cannot define whole new menus; they must
-define entries in existing menus. Some menus are not present on some
-windows; such entry definitions are then ignored, but the key bindings
-are still applied. (This should probably be refined in the future.)
+The extension class must not directly bind Window Manager (e.g. X) events.
+Rather, it must define one or more virtual events, e.g. <<zoom-height>>, and
+corresponding methods, e.g. zoom_height_event(). The virtual events will be
+bound to the corresponding methods, and Window Manager events can then be bound
+to the virtual events. (This indirection is done so that the key bindings can
+easily be changed, and so that other sources of virtual events can exist, such
+as menu entries.)
+
+An extension can define menu entries. This is done with a class or instance
+variable named menudefs; it should be a list of pairs, where each pair is a
+menu name (lowercase) and a list of menu entries. Each menu entry is either
+None (to insert a separator entry) or a pair of strings (menu_label,
+virtual_event). Here, menu_label is the label of the menu entry, and
+virtual_event is the virtual event to be generated when the entry is selected.
+An underscore in the menu label is removed; the character following the
+underscore is displayed underlined, to indicate the shortcut character (for
+Windows).
+
+At the moment, extensions cannot define whole new menus; they must define
+entries in existing menus. Some menus are not present on some windows; such
+entry definitions are then ignored, but key bindings are still applied. (This
+should probably be refined in the future.)
+
+Extensions are not required to define menu entries for all the events they
+implement. (XXX KBK 15Jul03: But it appears they must have keybindings for each
+virtual event?)
Here is a complete example example:
@@ -73,48 +65,19 @@ class ZoomHeight:
])
]
- windows_keydefs = {
- '<<zoom-height>>': ['<Alt-F2>'],
- }
- unix_keydefs = {
- '<<zoom-height>>': ['<Control-z><Control-z>'],
- }
-
def __init__(self, editwin):
self.editwin = editwin
def zoom_height_event(self, event):
"...Do what you want here..."
-The final piece of the puzzle is the file "config.txt", which is used
-to to configure the loading of extensions. For each extension,
-you must include a section in config.txt (or in any of the other
-configuration files that are consulted at startup: config-unix.txt,
-config-win.txt, or ~/.idle). A section is headed by the module name
-in square brackets, e.g.
-
- [ZoomHeight]
-
-The section may be empty, or it may define configuration options for
-the extension. (See ParenMatch.py for an example.) A special option
-is 'enable': including
-
- enable = 0
-
-in a section disables that extension. More than one configuration
-file may specify options for the same extension, so a user may disable
-an extension that is loaded by default, or enable an extension that is
-disabled by default.
-
-Extensions can define key bindings and menu entries that reference
-events they don't implement (including standard events); however this is
-not recommended (and may be forbidden in the future).
+The final piece of the puzzle is the file "config-extensions.def", which is
+used to to configure the loading of extensions and to establish key (or, more
+generally, event) bindings to the virtual events defined in the extensions.
-Extensions are not required to define menu entries for all events they
-implement.
+See the comments at the top of config-extensions.def for information. It's
+currently necessary to manually modify that file to change IDLE's extension
+loading or extension key bindings.
-Note: in order to change key bindings, you must currently edit the file
-keydefs. It contains two dictionaries named and formatted like the
-keydefs dictionaries described above, one for the Unix bindings and one
-for the Windows bindings. In the future, a better mechanism will be
-provided.
+For further information on binding refer to the Tkinter Resources web page at
+python.org and to the Tk Command "bind" man page.