blob: 4138d26b7c66a62fb137d40ee76d87364dce1c51 [file] [log] [blame]
Guido van Rossumd8d676c1998-10-12 20:57:09 +00001# The first three items of each tupel pertain to the menu bar. All
2# three are None if the item is not to appeat in a menu. Otherwise,
3# the first item is the menu name (in lowercase), the second item is
4# the menu item label; the third item is the keyboard shortcut to be
5# listed in the menu, if any. Menu items are added in the order of
6# their occurrence in this table. An item of the form
7# ("menu", None, None) can be used to insert a separator in the menu.
8#
9# The fourth item, if present is the virtual event; each of the
10# remaining items is an actual key binding for the event. (Thus,
11# items[3:] conveniently forms an argument list for event_add().)
Guido van Rossum3b4ca0d1998-10-10 18:48:31 +000012
13win_bindings = [
Guido van Rossumd8d676c1998-10-12 20:57:09 +000014 (None, None, None, "<<beginning-of-line>>", "<Control-a>", "<Home>"),
Guido van Rossum3b4ca0d1998-10-10 18:48:31 +000015
Guido van Rossumd8d676c1998-10-12 20:57:09 +000016 (None, None, None, "<<expand-word>>", "<Meta-slash>", "<Alt-slash>"),
Guido van Rossum3b4ca0d1998-10-10 18:48:31 +000017
Guido van Rossumd8d676c1998-10-12 20:57:09 +000018 (None, None, None, "<<newline-and-indent>>", "<Key-Return>", "<KP_Enter>"),
19 (None, None, None, "<<plain-newline-and-indent>>", "<Control-j>"),
Guido van Rossum3b4ca0d1998-10-10 18:48:31 +000020
Guido van Rossumd8d676c1998-10-12 20:57:09 +000021 (None, None, None, "<<interrupt-execution>>", "<Control-c>"),
22 (None, None, None, "<<end-of-file>>", "<Control-d>"),
Guido van Rossum3b4ca0d1998-10-10 18:48:31 +000023
Guido van Rossumd8d676c1998-10-12 20:57:09 +000024 (None, None, None, "<<dedent-region>>", "<Control-bracketleft>"),
25 (None, None, None, "<<indent-region>>", "<Control-bracketright>"),
Guido van Rossum3b4ca0d1998-10-10 18:48:31 +000026
Guido van Rossumd8d676c1998-10-12 20:57:09 +000027 (None, None, None, "<<comment-region>>", "<Meta-Key-3>", "<Alt-Key-3>"),
28 (None, None, None, "<<uncomment-region>>", "<Meta-Key-4>", "<Alt-Key-4>"),
Guido van Rossum3b4ca0d1998-10-10 18:48:31 +000029
Guido van Rossumd8d676c1998-10-12 20:57:09 +000030 (None, None, None, "<<history-previous>>", "<Meta-p>", "<Alt-p>"),
31 (None, None, None, "<<history-next>>", "<Meta-n>", "<Alt-n>"),
Guido van Rossum3b4ca0d1998-10-10 18:48:31 +000032
Guido van Rossumd8d676c1998-10-12 20:57:09 +000033 (None, None, None, "<<toggle-auto-coloring>>", "<Control-slash>"),
Guido van Rossum3b4ca0d1998-10-10 18:48:31 +000034
Guido van Rossumd8d676c1998-10-12 20:57:09 +000035 (None, None, None, "<<close-all-windows>>", "<Control-q>"),
36 (None, None, None, "<<open-new-window>>", "<Control-n>"),
37 (None, None, None, "<<open-window-from-file>>", "<Control-o>"),
38 (None, None, None, "<<save-window>>", "<Control-s>"),
39 (None, None, None, "<<save-window-as-file>>", "<Control-w>"),
40 (None, None, None, "<<save-copy-of-window-as-file>>", "<Meta-w>"),
Guido van Rossum3b4ca0d1998-10-10 18:48:31 +000041
Guido van Rossumd8d676c1998-10-12 20:57:09 +000042 (None, None, None, "<<find>>", "<Control-f>"),
43 (None, None, None, "<<find-next>>", "<F3>"),
44 (None, None, None, "<<find-same>>", "<Control-F3>"),
45 (None, None, None, "<<goto-line>>", "<Alt-g>", "<Meta-g>"),
Guido van Rossum3b4ca0d1998-10-10 18:48:31 +000046
Guido van Rossumd8d676c1998-10-12 20:57:09 +000047 (None, None, None, "<<undo>>", "<Control-z>"),
48 (None, None, None, "<<redo>>", "<Control-y>"),
49 (None, None, None, "<<dump-undo-state>>", "<Control-backslash>"),
Guido van Rossum3b4ca0d1998-10-10 18:48:31 +000050]
51
52emacs_bindings = [
Guido van Rossum3b4ca0d1998-10-10 18:48:31 +000053
Guido van Rossumd8d676c1998-10-12 20:57:09 +000054 # File menu
Guido van Rossum3b4ca0d1998-10-10 18:48:31 +000055
Guido van Rossumd8d676c1998-10-12 20:57:09 +000056 ("file", "New window", "C-x C-n",
57 "<<open-new-window>>", "<Control-x><Control-n>"),
58 ("file", "Open...", "C-x C-f",
59 "<<open-window-from-file>>", "<Control-x><Control-f>"),
Guido van Rossumb3418881998-10-13 03:45:15 +000060 ("file", "Open module...", "C-x C-m",
61 "<<open-module>>", "<Control-x><Control-m>"),
Guido van Rossum49c1a7e1998-10-13 16:31:46 +000062 ("file", "Class browser...", "C-x C-b",
63 "<<open-class-browser>>", "<Control-x><Control-b>"),
Guido van Rossumd8d676c1998-10-12 20:57:09 +000064 ("file", None, None),
Guido van Rossum3b4ca0d1998-10-10 18:48:31 +000065
Guido van Rossumd8d676c1998-10-12 20:57:09 +000066 ("file", "Save", "C-x C-s",
67 "<<save-window>>", "<Control-x><Control-s>"),
68 ("file", "Save As...", "C-x C-w",
69 "<<save-window-as-file>>", "<Control-x><Control-w>"),
70 ("file", "Save Copy As...", "C-x w",
71 "<<save-copy-of-window-as-file>>", "<Control-x><w>"),
72 ("file", None, None),
Guido van Rossum3b4ca0d1998-10-10 18:48:31 +000073
Guido van Rossumd8d676c1998-10-12 20:57:09 +000074 ("file", "Close", "C-x C-0",
75 "<<close-window>>", "<Control-x><Control-0>"),
76 ("file", "Exit", "C-x C-c",
77 "<<close-all-windows>>", "<Control-x><Control-c>"),
78
79 # Edit menu
80
81 ("edit", "Undo", "C-z", "<<undo>>", "<Control-z>"),
82 ("edit", "Redo", "Alt-z", "<<redo>>", "<Alt-z>", "<Meta-z>"),
83 ("edit", None, None),
84
85 ("edit", "Cut", None, "<<Cut>>"),
86 ("edit", "Copy", None, "<<Copy>>"),
87 ("edit", "Paste", None, "<<Paste>>"),
88 ("edit", None, None),
89
90 ("edit", "Find...", "C-s",
91 "<<find>>", "<Control-u><Control-u><Control-s>"),
92 ("edit", "Find next", "C-u C-s",
93 "<<find-next>>", "<Control-u><Control-s>"),
94 ("edit", "Find same", "C-s", "<<find-same>>", "<Control-s>"),
95 ("edit", "Go to line", "Alt-g", "<<goto-line>>", "<Alt-g>", "<Meta-g>"),
96 ("edit", None, None),
97
98 ("edit", "Dedent region", "Ctrl-[", "<<dedent-region>>",
Guido van Rossum3b4ca0d1998-10-10 18:48:31 +000099 "<Meta-bracketleft>", "<Alt-bracketleft>", "<Control-bracketleft>"),
Guido van Rossumd8d676c1998-10-12 20:57:09 +0000100 ("edit", "Indent region", "Ctrl-]", "<<indent-region>>",
Guido van Rossum3b4ca0d1998-10-10 18:48:31 +0000101 "<Meta-bracketright>", "<Alt-bracketright>", "<Control-bracketright>"),
102
Guido van Rossumd8d676c1998-10-12 20:57:09 +0000103 ("edit", "Comment out region", "Alt-3",
104 "<<comment-region>>", "<Meta-Key-3>", "<Alt-Key-3>"),
105 ("edit", "Uncomment region", "Alt-4",
106 "<<uncomment-region>>", "<Meta-Key-4>", "<Alt-Key-4>"),
Guido van Rossum219ffde1998-10-12 23:55:10 +0000107
108 # Debug menu
109
110 ("debug", "Go to line from traceback", None, "<<goto-traceback-line>>"),
111 ("debug", "Open stack viewer", None, "<<open-stack-viewer>>"),
Guido van Rossum35f75421998-10-13 23:51:13 +0000112 ("debug", "Toggle debugger", None, "<<toggle-debugger>>"),
Guido van Rossum219ffde1998-10-12 23:55:10 +0000113
114 # Help menu
115
116 ("help", "Help...", None, "<<help>>"),
117 ("help", None, None),
118 ("help", "About IDLE...", None, "<<about-idle>>"),
Guido van Rossum3b4ca0d1998-10-10 18:48:31 +0000119
Guido van Rossumd8d676c1998-10-12 20:57:09 +0000120 # Not in any menu
Guido van Rossum3b4ca0d1998-10-10 18:48:31 +0000121
Guido van Rossumd8d676c1998-10-12 20:57:09 +0000122 (None, None, None, "<<beginning-of-line>>", "<Control-a>", "<Home>"),
123 (None, None, None, "<<center-insert>>", "<Control-l>"),
Guido van Rossum3b4ca0d1998-10-10 18:48:31 +0000124
Guido van Rossumd8d676c1998-10-12 20:57:09 +0000125 (None, None, None, "<<expand-word>>", "<Meta-slash>", "<Alt-slash>"),
Guido van Rossum3b4ca0d1998-10-10 18:48:31 +0000126
Guido van Rossumd8d676c1998-10-12 20:57:09 +0000127 (None, None, None, "<<newline-and-indent>>", "<Key-Return>", "<KP_Enter>"),
128 (None, None, None, "<<plain-newline-and-indent>>", "<Control-j>"),
Guido van Rossum3b4ca0d1998-10-10 18:48:31 +0000129
Guido van Rossumd8d676c1998-10-12 20:57:09 +0000130 (None, None, None, "<<interrupt-execution>>", "<Control-c>"),
131 (None, None, None, "<<end-of-file>>", "<Control-d>"),
132
133 (None, None, None, "<<history-previous>>", "<Meta-p>", "<Alt-p>"),
134 (None, None, None, "<<history-next>>", "<Meta-n>", "<Alt-n>"),
135
136 (None, None, None, "<<toggle-auto-coloring>>", "<Control-slash>"),
137
138 (None, None, None, "<<dump-undo-state>>", "<Control-backslash>"),
Guido van Rossum3b4ca0d1998-10-10 18:48:31 +0000139]
140
141default_bindings = emacs_bindings
142
143def apply_bindings(text, bindings=default_bindings):
144 event_add = text.event_add
145 for args in bindings:
Guido van Rossumd8d676c1998-10-12 20:57:09 +0000146 args = args[3:]
147 if args[1:]:
148 apply(event_add, args)
149
150def fill_menus(text, dict, bindings=default_bindings):
151 # Fill the menus for the given text widget. The dict argument is
152 # a dictionary containing the menus, keyed by their lowercased name.
Guido van Rossum219ffde1998-10-12 23:55:10 +0000153 # Menus that are absent or None are ignored.
Guido van Rossumd8d676c1998-10-12 20:57:09 +0000154 for args in bindings:
155 menu, label, accelerator = args[:3]
156 if not menu:
157 continue
Guido van Rossum219ffde1998-10-12 23:55:10 +0000158 menu = dict.get(menu)
Guido van Rossumd8d676c1998-10-12 20:57:09 +0000159 if not menu:
160 continue
161 if accelerator is None:
162 accelerator = ""
163 args = args[3:]
164 if args:
165 def command(text=text, event=args[0]):
166 text.event_generate(event)
167 menu.add_command(label=label, accelerator=accelerator,
168 command=command)
169 elif label or accelerator:
170 menu.add_command(label=label, accelerator=accelerator)
171 else:
172 menu.add_separator()