When using bind to handle keyboard events, Modifier keys can change the effect of a keystroke. This is described on the manual page bind(n) .
The present page describes the effects of Modifier keys on different platforms. This information has been obtained by experimentation with Tcl/Tk 8.5.8. Some results might depend on the specific hardware used: if you get different results, please document this. If you use a different platform or keyboard (e.g. Sun, Space Cadet [L1 ]), please add a section to this page.
A standard PC keyboard on Linux never applies the Modifiers
Extended Meta, M Mod3, M3
The PC keyboard's Modifier keys on Linux are:
Key | KeyPress %K | KeyRelease %K | Binding Modifier | PE [1] | AR [2] | %A [3] | Notes |
---|---|---|---|---|---|---|---|
Extended | Not used in Linux. | ||||||
Num Lock | Num_Lock | Num_Lock | Option, Mod2, M2 | Y | M | ||
Scroll Lock | Scroll_Lock | Scroll_Lock | Y | NOT a Modifier key in Linux. | |||
Caps Lock | Caps_Lock | Caps_Lock | Lock | Y | M | ||
Shift (Left) | Shift_L | Shift_L | Shift | M | |||
Shift (Right) | Shift_R | Shift_R | Shift | M | |||
Control (Left) | Control_L | Control_L | Control | - | Exceptions to [3] include: for the numerals 0, 1, or 9 with the Control Modifier, %A is the unmodified numeral. | ||
Control (Right) | Control_R | Control_R | Control | Y | - | Exceptions to [3]: as for Control (Left). | |
"Windows" (Left) | Super_L | Super_L | Mod4, M4 | Y | U | ||
"Windows" (Right) | Super_R | Super_R | Mod4, M4 | Y | U | ||
Alt (Left) | Alt_L | Alt_L | Alt | U | A binding with Modifier Alt is overridden by a binding with Modifier Command, Mod1, or M1. | ||
Alt Gr [4] | ISO_Level3_Shift | ?? | Mod5, M5 | Y | M | The event KeyRelease-ISO_Level3_Shift is not recognised: it is reported as KeyRelease-??. |
[1] Column PE means "Persistent". If marked "Y", the key is pressed and released to activate the Modifier; the Modifier is applied to subsequent keystrokes until the Modifier key is pressed and released again. If not marked "Y", the key must be held down to activate its Modifier; the Modifier is applied to subsequent keystrokes until the Modifier key is released.
[2] Column AR means "Autorepeat". If marked "Y", the key has autorepeat enabled.
[3] Column %A indicates the value supplied as the binding value %A.
[4] The "Right Alt" or "Alt Gr" key is used in combination with certain other keys for composing characters that are not otherwise available on the keyboard. This functionality is provided by the operating system, without use of the Mod5/M5 Modifier (Linux) or the Control-Alt Modifier (Windows), to generate the value supplied as %A; that value is not necessarily the same for Windows and Linux, or the same as the value produced by the Option key on the Mac.
A standard PC keyboard on Windows never applies the Modifiers
Meta, M Mod4, M4 Mod5, M5
The PC keyboard's Modifier keys on Windows are:
Key | KeyPress %K | KeyRelease %K | Binding Modifier | PE [1] | AR [2] | %A [3] | Notes |
---|---|---|---|---|---|---|---|
Extended | U | In Windows, this Modifier is automatically applied to certain keys of the "Extended" keyboard. See bind(n) for details. | |||||
Num Lock | Num_Lock | Num_Lock | Command, Mod1, or M1 | Y | Y | M | |
Scroll Lock | Scroll_Lock | Scroll_Lock | Mod3, or M3 | Y | Y | U | |
Caps Lock | Caps_Lock | Caps_Lock | Lock | Y | Y | M | |
Shift (Left) | Shift_L | Shift_L | Shift | Y | M | ||
Shift (Right) | Shift_R | Shift_L | Shift | Y | M | ||
Control (Left) | Control_L | Control_L | Control | Y | - | Exceptions to [3] include: <Control-Return> emits a newline as %A. | |
Control (Right) | Control_R | Control_L | Control | Y | - | Exceptions to [3]: as for Control (Left). | |
"Windows" (Left) | Win_L | Win_L | Y | NOT a Modifier key in Windows. | |||
"Windows" (Right) | Win_R | Win_R | Y | NOT a Modifier key in Windows. | |||
Alt (Left) | Alt_L | Alt_L | Alt | Y | U | A binding with Modifier Alt is overridden by a binding with Modifier Option, Mod2, or M2. | |
Alt Gr [4] | Control_L, Alt_R | Control_L, Alt_L | Control-Alt | Y | M | A binding with Modifier Alt is overridden by a binding with Modifier Option, Mod2, or M2. When the Modifier key is pressed, two KeyPress events occur: the first with keysym Control_L, the second with keysym Alt_R. If the operating system supplies a replacement character, the Tk KeyPress event does not have the Control or Alt Modifiers: it is an unmodified KeyPress event, e.g. <KeyPress-€>. A binding to <Control-Alt-KeyPress> will not capture such events - instead it captures events on keys where the operating system does not supply a replacement character. This mechanism is unique to Windows - keyboard events with "Alt Gr" (in Linux) and "Option" (in MacOS X) Modifier keys always carry the expected binding Modifiers. |
[1], [2], [3], [4] Same as footnotes on Linux table (above).
A Mac keyboard does not use the Modifiers
Alt Extended Meta, M Mod3, M3 Mod4, M4 Mod5, M5
The Mac keyboard's Modifier keys on Mac OS X are:
Key | KeyPress %K | KeyRelease %K | Binding Modifier | PE [1] | AR [2] | %A [3] | Notes |
---|---|---|---|---|---|---|---|
Caps Lock | Caps_Lock | Caps_Lock | Lock | Y | M | ||
Shift (Left or Right) | Shift_L | Shift_L | Shift | M | The left and right keys emit the same %K. | ||
Control (Left or Right) | Control_L | Control_L | Control | - | Control (ctrl) keys. The left and right keys emit the same %K. Exceptions to [3] include: for any numeral with the Control Modifier, %A is the unmodified numeral. | ||
Command (Left or Right) | Meta_L | Meta_L | Command, Mod1, M1 | M | Command (Apple or ⌘) keys. The left and right keys emit the same %K. | ||
Alt (Left or Right) [4] | Alt_L | Alt_L | Option, Mod2, M2 | M | Option (Alt or alt) keys. The left and right keys emit the same %K. |
[1], [2], [3] Same as footnotes on Linux table (above).
[4] The "Alt" or "Option" key is used in combination with other keys for composing characters that are not otherwise available on the keyboard. This functionality is provided by the operating system, without use of the Option/Mod2/M2 Modifier, to generate the value supplied as %A; that value is not necessarily the same as the value produced by the "Right Alt" or "Alt Gr" key of a PC keyboard on Windows or Linux.
The Binding Modifier "Alt" is not recognized on the Mac, even though some Mac keyboards label the "Option" key "alt".
Using a PC Keyboard on the Mac
The PC keyboard behaves very much like the Mac keyboard described above. The "Windows" Modifier key takes the role of the Command/Apple/⌘ key. The Left-Alt and Right-Alt keys are interchangeable, as on a Mac keyboard. The "Num Lock" and "Scroll Lock" keys are not recognized as Modifiers: "Num Lock" behaves as "Clear", the Mac key in the same position; pressing or releasing the "Scroll Lock" key does not trigger an event.
The following suggestions attempt to follow the style expected for an application on each platform, while keeping code simple, and avoiding conflicts between different platforms.
There are clearly many differences between different platforms. In some cases, there is a reason: e.g.
Other differences might have a good reason (if so, please add it to the list immediately above). However, some features may exist for historical reasons that are no longer valid. While these features must be retained in the Tcl/Tk 8.x series in order to preserve compatibility, it might be desirable to rationalise the keyboard Modifiers in Tcl/Tk 9.0, in order to simplify cross-platform development. See Tk 9.0 WishList.