summaryrefslogtreecommitdiffstats
path: root/Tools/idle/Bindings.py
diff options
context:
space:
mode:
authorGuido van Rossum <guido@python.org>1998-10-12 20:57:09 (GMT)
committerGuido van Rossum <guido@python.org>1998-10-12 20:57:09 (GMT)
commitd8d676c289e76171480765eb2e60d1e981c21af2 (patch)
treecd0ab819bd3d518b5be4e15f0aa6e6bc9aadcd2c /Tools/idle/Bindings.py
parentd020cf3d7d80fe89f9be3388016eecb8d703c910 (diff)
downloadcpython-d8d676c289e76171480765eb2e60d1e981c21af2.zip
cpython-d8d676c289e76171480765eb2e60d1e981c21af2.tar.gz
cpython-d8d676c289e76171480765eb2e60d1e981c21af2.tar.bz2
Add menu configuration to the event configuration.
Diffstat (limited to 'Tools/idle/Bindings.py')
-rw-r--r--Tools/idle/Bindings.py183
1 files changed, 123 insertions, 60 deletions
diff --git a/Tools/idle/Bindings.py b/Tools/idle/Bindings.py
index 9e2e791..4f1ddac 100644
--- a/Tools/idle/Bindings.py
+++ b/Tools/idle/Bindings.py
@@ -1,87 +1,125 @@
-# The first item of each tuple is the virtual event;
-# each of the remaining items is an actual key binding for the event.
-# (This conveniently forms an argument list for event_add().)
+# The first three items of each tupel pertain to the menu bar. All
+# three are None if the item is not to appeat in a menu. Otherwise,
+# the first item is the menu name (in lowercase), the second item is
+# the menu item label; the third item is the keyboard shortcut to be
+# listed in the menu, if any. Menu items are added in the order of
+# their occurrence in this table. An item of the form
+# ("menu", None, None) can be used to insert a separator in the menu.
+#
+# The fourth item, if present is the virtual event; each of the
+# remaining items is an actual key binding for the event. (Thus,
+# items[3:] conveniently forms an argument list for event_add().)
win_bindings = [
- ("<<beginning-of-line>>", "<Control-a>", "<Home>"),
+ (None, None, None, "<<beginning-of-line>>", "<Control-a>", "<Home>"),
- ("<<expand-word>>", "<Meta-slash>", "<Alt-slash>"),
+ (None, None, None, "<<expand-word>>", "<Meta-slash>", "<Alt-slash>"),
- ("<<newline-and-indent>>", "<Key-Return>", "<KP_Enter>"),
- ("<<plain-newline-and-indent>>", "<Control-j>"),
+ (None, None, None, "<<newline-and-indent>>", "<Key-Return>", "<KP_Enter>"),
+ (None, None, None, "<<plain-newline-and-indent>>", "<Control-j>"),
- ("<<interrupt-execution>>", "<Control-c>"),
- ("<<end-of-file>>", "<Control-d>"),
+ (None, None, None, "<<interrupt-execution>>", "<Control-c>"),
+ (None, None, None, "<<end-of-file>>", "<Control-d>"),
- ("<<dedent-region>>", "<Control-bracketleft>"),
- ("<<indent-region>>", "<Control-bracketright>"),
+ (None, None, None, "<<dedent-region>>", "<Control-bracketleft>"),
+ (None, None, None, "<<indent-region>>", "<Control-bracketright>"),
- ("<<comment-region>>", "<Meta-Key-3>", "<Alt-Key-3>"),
- ("<<uncomment-region>>", "<Meta-Key-4>", "<Alt-Key-4>"),
+ (None, None, None, "<<comment-region>>", "<Meta-Key-3>", "<Alt-Key-3>"),
+ (None, None, None, "<<uncomment-region>>", "<Meta-Key-4>", "<Alt-Key-4>"),
- ("<<history-previous>>", "<Meta-p>", "<Alt-p>"),
- ("<<history-next>>", "<Meta-n>", "<Alt-n>"),
+ (None, None, None, "<<history-previous>>", "<Meta-p>", "<Alt-p>"),
+ (None, None, None, "<<history-next>>", "<Meta-n>", "<Alt-n>"),
- ("<<toggle-auto-coloring>>", "<Control-slash>"),
+ (None, None, None, "<<toggle-auto-coloring>>", "<Control-slash>"),
- ("<<close-all-windows>>", "<Control-q>"),
- ("<<open-new-window>>", "<Control-n>"),
- ("<<open-window-from-file>>", "<Control-o>"),
- ("<<save-window>>", "<Control-s>"),
- ("<<save-window-as-file>>", "<Control-w>"),
- ("<<save-copy-of-window-as-file>>", "<Meta-w>"),
+ (None, None, None, "<<close-all-windows>>", "<Control-q>"),
+ (None, None, None, "<<open-new-window>>", "<Control-n>"),
+ (None, None, None, "<<open-window-from-file>>", "<Control-o>"),
+ (None, None, None, "<<save-window>>", "<Control-s>"),
+ (None, None, None, "<<save-window-as-file>>", "<Control-w>"),
+ (None, None, None, "<<save-copy-of-window-as-file>>", "<Meta-w>"),
- ("<<find>>", "<Control-f>"),
- ("<<find-next>>", "<F3>"),
- ("<<find-same>>", "<Control-F3>"),
- ("<<goto-line>>", "<Alt-g>", "<Meta-g>"),
+ (None, None, None, "<<find>>", "<Control-f>"),
+ (None, None, None, "<<find-next>>", "<F3>"),
+ (None, None, None, "<<find-same>>", "<Control-F3>"),
+ (None, None, None, "<<goto-line>>", "<Alt-g>", "<Meta-g>"),
- ("<<undo>>", "<Control-z>"),
- ("<<redo>>", "<Control-y>"),
- ("<<dump-undo-state>>", "<Control-backslash>"),
+ (None, None, None, "<<undo>>", "<Control-z>"),
+ (None, None, None, "<<redo>>", "<Control-y>"),
+ (None, None, None, "<<dump-undo-state>>", "<Control-backslash>"),
]
emacs_bindings = [
- ("<<beginning-of-line>>", "<Control-a>", "<Home>"),
- ("<<center-insert>>", "<Control-l>"),
- ("<<expand-word>>", "<Meta-slash>", "<Alt-slash>"),
+ # File menu
+
+ ("file", "New window", "C-x C-n",
+ "<<open-new-window>>", "<Control-x><Control-n>"),
+ ("file", "Open...", "C-x C-f",
+ "<<open-window-from-file>>", "<Control-x><Control-f>"),
+ ("file", None, None),
+
+ ("file", "Save", "C-x C-s",
+ "<<save-window>>", "<Control-x><Control-s>"),
+ ("file", "Save As...", "C-x C-w",
+ "<<save-window-as-file>>", "<Control-x><Control-w>"),
+ ("file", "Save Copy As...", "C-x w",
+ "<<save-copy-of-window-as-file>>", "<Control-x><w>"),
+ ("file", None, None),
+
+ ("file", "Close", "C-x C-0",
+ "<<close-window>>", "<Control-x><Control-0>"),
+ ("file", "Exit", "C-x C-c",
+ "<<close-all-windows>>", "<Control-x><Control-c>"),
+
+ # Edit menu
+
+ ("edit", "Undo", "C-z", "<<undo>>", "<Control-z>"),
+ ("edit", "Redo", "Alt-z", "<<redo>>", "<Alt-z>", "<Meta-z>"),
+ ("edit", None, None),
+
+ ("edit", "Cut", None, "<<Cut>>"),
+ ("edit", "Copy", None, "<<Copy>>"),
+ ("edit", "Paste", None, "<<Paste>>"),
+ ("edit", None, None),
+
+ ("edit", "Find...", "C-s",
+ "<<find>>", "<Control-u><Control-u><Control-s>"),
+ ("edit", "Find next", "C-u C-s",
+ "<<find-next>>", "<Control-u><Control-s>"),
+ ("edit", "Find same", "C-s", "<<find-same>>", "<Control-s>"),
+ ("edit", "Go to line", "Alt-g", "<<goto-line>>", "<Alt-g>", "<Meta-g>"),
+ ("edit", None, None),
+
+ ("edit", "Dedent region", "Ctrl-[", "<<dedent-region>>",
+ "<Meta-bracketleft>", "<Alt-bracketleft>", "<Control-bracketleft>"),
+ ("edit", "Indent region", "Ctrl-]", "<<indent-region>>",
+ "<Meta-bracketright>", "<Alt-bracketright>", "<Control-bracketright>"),
- ("<<newline-and-indent>>", "<Key-Return>", "<KP_Enter>"),
- ("<<plain-newline-and-indent>>", "<Control-j>"),
+ ("edit", "Comment out region", "Alt-3",
+ "<<comment-region>>", "<Meta-Key-3>", "<Alt-Key-3>"),
+ ("edit", "Uncomment region", "Alt-4",
+ "<<uncomment-region>>", "<Meta-Key-4>", "<Alt-Key-4>"),
- ("<<interrupt-execution>>", "<Control-c>"),
- ("<<end-of-file>>", "<Control-d>"),
+ # Not in any menu
- ("<<dedent-region>>",
- "<Meta-bracketleft>", "<Alt-bracketleft>", "<Control-bracketleft>"),
- ("<<indent-region>>",
- "<Meta-bracketright>", "<Alt-bracketright>", "<Control-bracketright>"),
+ (None, None, None, "<<beginning-of-line>>", "<Control-a>", "<Home>"),
+ (None, None, None, "<<center-insert>>", "<Control-l>"),
- ("<<comment-region>>", "<Meta-Key-3>", "<Alt-Key-3>"),
- ("<<uncomment-region>>", "<Meta-Key-4>", "<Alt-Key-4>"),
+ (None, None, None, "<<expand-word>>", "<Meta-slash>", "<Alt-slash>"),
- ("<<history-previous>>", "<Meta-p>", "<Alt-p>"),
- ("<<history-next>>", "<Meta-n>", "<Alt-n>"),
+ (None, None, None, "<<newline-and-indent>>", "<Key-Return>", "<KP_Enter>"),
+ (None, None, None, "<<plain-newline-and-indent>>", "<Control-j>"),
- ("<<toggle-auto-coloring>>", "<Control-slash>"),
+ (None, None, None, "<<interrupt-execution>>", "<Control-c>"),
+ (None, None, None, "<<end-of-file>>", "<Control-d>"),
- ("<<close-all-windows>>", "<Control-x><Control-c>"),
- ("<<close-window>>", "<Control-x><Control-0>"),
- ("<<open-new-window>>", "<Control-x><Control-n>"),
- ("<<open-window-from-file>>", "<Control-x><Control-f>"),
- ("<<save-window>>", "<Control-x><Control-s>"),
- ("<<save-window-as-file>>", "<Control-x><Control-w>"),
- ("<<save-copy-of-window-as-file>>", "<Control-x><w>"),
+ (None, None, None, "<<history-previous>>", "<Meta-p>", "<Alt-p>"),
+ (None, None, None, "<<history-next>>", "<Meta-n>", "<Alt-n>"),
- ("<<find>>", "<Control-u><Control-u><Control-s>"),
- ("<<find-next>>", "<Control-u><Control-s>"),
- ("<<find-same>>", "<Control-s>"),
- ("<<goto-line>>", "<Alt-g>", "<Meta-g>"),
+ (None, None, None, "<<toggle-auto-coloring>>", "<Control-slash>"),
- ("<<undo>>", "<Control-z>"),
- ("<<redo>>", "<Alt-z>", "<Meta-z>"),
- ("<<dump-undo-state>>", "<Control-backslash>"),
+ (None, None, None, "<<dump-undo-state>>", "<Control-backslash>"),
]
default_bindings = emacs_bindings
@@ -89,4 +127,29 @@ default_bindings = emacs_bindings
def apply_bindings(text, bindings=default_bindings):
event_add = text.event_add
for args in bindings:
- apply(event_add, args)
+ args = args[3:]
+ if args[1:]:
+ apply(event_add, args)
+
+def fill_menus(text, dict, bindings=default_bindings):
+ # Fill the menus for the given text widget. The dict argument is
+ # a dictionary containing the menus, keyed by their lowercased name.
+ for args in bindings:
+ menu, label, accelerator = args[:3]
+ if not menu:
+ continue
+ menu = dict[menu]
+ if not menu:
+ continue
+ if accelerator is None:
+ accelerator = ""
+ args = args[3:]
+ if args:
+ def command(text=text, event=args[0]):
+ text.event_generate(event)
+ menu.add_command(label=label, accelerator=accelerator,
+ command=command)
+ elif label or accelerator:
+ menu.add_command(label=label, accelerator=accelerator)
+ else:
+ menu.add_separator()