New submission from Ned Deily:
On OS X, most of the IDLE command keyboard accelerators that use the OS X
<Option> modifier key do not work correctly with Cocoa Tk, the current native
version of Tk 8.5 and 8.6 used on OS X 10.6 and later releases (and with the
64-/32-bit OS X binary installers from python.org). These include the event
bindings found in config-extensions.def:
format-paragraph=<Option-Key-q>
expand-word=<Option-Key-slash>
zoom-height=<Option-Key-0>
check-module=<Option-Key-x>
and in config-keys.def (IDLE Classic OSX set):
save-copy-of-window-as-file = <Option-Command-Key-s>
These all work (mostly) correctly with the older Carbon Tk, the original
32-bit-only native Tk for OS X, still shipped as Tk 8.4 in current systems (and
still used with the 32-bit-only python.org binary installers), which was the Tk
in use when native support for IDLE on OS X was originally implemented.
Modifier key support in Tk has long been problematic, with significant
differences among platforms and even among the three implementations of Tk in
use on OS X (besides the Cocoa and Carbon versions, there is an older OS X X11
version that differs in some respects from other Unix X11 versions). Some of
these differences have their origins lost in the mists of time or were due to
no-longer relevant operating systems or hardware differences. On the Tcl/Tk
wiki, there is a page that attempts to document the differences based on
empirical evidence (http://wiki.tcl.tk/28331). Of particular relevance to IDLE
is that the OS X Tk implementations do not use Alt binding modifiers since
there was historically no Alt key on Mac keyboards. In its place the Option
key and binding modifier is used. Likewise, the Command/Apple/⌘ key is used in
place of the Windows key and is a binding modifier. To that end, on OS X IDLE
converts <Alt-> bindings and accelerators to <Opt-> ones, either during the
build of IDLE or at run-time. As noted above, that works pretty well for the
older, now obsolete Carbon Tk. However, it doesn't with the newer, current
Cocoa Tk. I believe this is primarily because Cocoa Tk supports the more
sophisticated Cocoa text input system which maps most <Opt-> key combinations
either directly to extended characters (like opt-s -> ß on US keyboard input
methods) or as the first key of a two key composing sequence (e.g. opt-u a ->
ä). Cocoa Tk applications do not see these keys as separate events, only the
final composed character. Thus, the config-extension bindings above cause
various characters to be input as text rather than triggering menu options.
The "save-copy-of-window-as-file" binding behaves somewhat differently: when
typing Opt-Cmd-s, two instances of the Save File popup window appear with Cocoa
Tk. That erroneous behavior can be fixed by the straightforward change of the
binding to <Control-Command-Key-s>. Similar remapping to unused key bindings
should be made for the extension bindings and documented accordingly so that
all keyboard accelerators shown in IDLE menus are actually usable.
(For completeness sake, I'll note that the situation with OS X X11-based Tk in
conjunction with the OS X XQuartz X server is much more bizarre. Behavior
differs depending on server preferences: either the roles of the Option and
Command key modifiers are reversed or the Option modifier is not usable in Tk
at all other than as an extended character set composing key. The Tk wiki page
documents much of this. It isn't clear how a Tk application could accommodate
all these different behaviors automatically so the current strategy of not
trying to seems prudent.)
----------
components: IDLE
messages: 210815
nosy: ned.deily
priority: normal
severity: normal
status: open
title: OS X IDLE <option-> keyboard accelerators fail or misbehave with Cocoa Tk
versions: Python 2.7, Python 3.3, Python 3.4
_______________________________________
Python tracker <[email protected]>
<http://bugs.python.org/issue20579>
_______________________________________
_______________________________________________
Python-bugs-list mailing list
Unsubscribe:
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com