/opt/imh/python3.13/lib/python3.13/idlelib
NameSizeModeActions
Icons/-0755rm
__pycache__/-0755rm
autocomplete.py93540644editdlrm
autocomplete_w.py208630644editdlrm
autoexpand.py32160644editdlrm
browser.py85880644editdlrm
calltip.py72670644editdlrm
calltip_w.py70830644editdlrm
ChangeLog563600644editdlrm
codecontext.py114200644editdlrm
colorizer.py147830644editdlrm
config-extensions.def22660644editdlrm
config-highlight.def28640644editdlrm
config-keys.def109100644editdlrm
config-main.def31680644editdlrm
config.py384030644editdlrm
configdialog.py1053030644editdlrm
config_key.py152300644editdlrm
CREDITS.txt21480644editdlrm
debugger.py209970644editdlrm
debugger_r.py121150644editdlrm
debugobj.py41770644editdlrm
debugobj_r.py10820644editdlrm
delegator.py10440644editdlrm
dynoption.py19930644editdlrm
editor.py695570644editdlrm
extend.txt36320644editdlrm
filelist.py38710644editdlrm
format.py157770644editdlrm
grep.py75210644editdlrm
help.html605660644editdlrm
help.py118430644editdlrm
help_about.py90230644editdlrm
history.py40650644editdlrm
HISTORY.txt103130644editdlrm
hyperparser.py128890644editdlrm
idle.bat1770644editdlrm
idle.py4540644editdlrm
idle.pyw5700644editdlrm
iomenu.py161590644editdlrm
macosx.py92900644editdlrm
mainmenu.py39380644editdlrm
multicall.py186520644editdlrm
NEWS2x.txt271720644editdlrm
News3.txt568180644editdlrm
outwin.py57050644editdlrm
parenmatch.py72040644editdlrm
pathbrowser.py30930644editdlrm
percolator.py35680644editdlrm
pyparse.py198640644editdlrm
pyshell.py624840755editdlrm
query.py150670644editdlrm
README.txt116530644editdlrm
redirector.py68320644editdlrm
replace.py97980644editdlrm
rpc.py210780644editdlrm
run.py218770644editdlrm
runscript.py82730644editdlrm
scrolledlist.py44780644editdlrm
search.py55670644editdlrm
searchbase.py78520644editdlrm
searchengine.py73720644editdlrm
sidebar.py203270644editdlrm
squeezer.py128340644editdlrm
stackviewer.py40160644editdlrm
statusbar.py14740644editdlrm
textview.py68080644editdlrm
TODO.txt84770644editdlrm
tooltip.py66650644editdlrm
tree.py167730644editdlrm
undo.py110160644editdlrm
util.py13120644editdlrm
window.py26160644editdlrm
zoomheight.py42030644editdlrm
zzdummy.py20050644editdlrm
__init__.py3960644editdlrm
__main__.py1070644editdlrm
Edit: /opt/imh/python3.13/lib/python3.13/idlelib/extend.txt (3632B)
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 starts up and to attach them to each edit window. (It is also possible 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-extensions.def. See below for details. An IDLE extension is defined by a class. Methods of the class define 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. An IDLE extension class is instantiated with a single argument, `editwin', an EditorWindow instance. The extension cannot assume much about this argument, but it is guaranteed to have the following instance variables: text a Text instance (a widget) io an IOBinding instance (more about this later) flist the FileList instance (shared by all edit windows) (There are a few more, but they are rarely useful.) The extension class must not directly bind Window Manager (e.g. X) events. Rather, it must define one or more virtual events, e.g. <>, and corresponding methods, e.g. z_in_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. (They are also not required to create keybindings, but in that case there must be empty bindings in config-extensions.def) Here is a partial example from zzdummy.py: class ZzDummy: menudefs = [ ('format', [ ('Z in', '<>'), ('Z out', '<>'), ] ) ] def __init__(self, editwin): self.editwin = editwin def z_in_event(self, event=None): "...Do what you want here..." The final piece of the puzzle is the file "config-extensions.def", which is used to configure the loading of extensions and to establish key (or, more generally, event) bindings to the virtual events defined in the extensions. 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. For further information on binding refer to the Tkinter Resources web page at python.org and to the Tk Command "bind" man page.