Index: g_editor.c =================================================================== --- g_editor.c (revision 9725) +++ g_editor.c (working copy) @@ -1469,8 +1469,18 @@ else if (av[1].a_type == A_FLOAT) { char buf[3]; - sprintf(buf, "%c", (int)(av[1].a_w.w_float)); - gotkeysym = gensym(buf); + switch((int)(av[1].a_w.w_float)) + { + case 8: gotkeysym = gensym("BackSpace"); break; + case 9: gotkeysym = gensym("Tab"); break; + case 10: gotkeysym = gensym("Return"); break; + case 27: gotkeysym = gensym("Escape"); break; + case 32: gotkeysym = gensym("Space"); break; + case 127:gotkeysym = gensym("Delete"); break; + default: + sprintf(buf, "%c", (int)(av[1].a_w.w_float)); + gotkeysym = gensym(buf); + } } else gotkeysym = gensym("?"); fflag = (av[0].a_type == A_FLOAT ? av[0].a_w.w_float : 0); Index: u_main.tk =================================================================== --- u_main.tk (revision 9725) +++ u_main.tk (working copy) @@ -1254,9 +1254,9 @@ bind $name.c {pdtk_canvas_ctrlkey %W %K 0} bind $name.c {pdtk_canvas_ctrlkey %W %K 1} } - bind $name.c {pdtk_canvas_key %W %K %A 0} - bind $name.c {pdtk_canvas_key %W %K %A 1} - bind $name.c {pdtk_canvas_keyup %W %K %A} + bind $name.c {pdtk_canvas_sendkey %W 1 %K %A 0} + bind $name.c {pdtk_canvas_sendkey %W 1 %K %A 1} + bind $name.c {pdtk_canvas_sendkey %W 0 %K %A 0} bind $name.c {pdtk_canvas_motion %W %x %y 0} bind $name.c {pdtk_canvas_motion %W %x %y 2} if {$pd_nt == 2} { @@ -1603,44 +1603,33 @@ pdtk_canvas_checkgeometry [canvastosym $name] } -proc pdtk_canvas_key {name key iso shift} { -# puts stderr [concat down key= $key iso= $iso] -# .controls.switches.meterbutton configure -text $key -# HACK for MAC OSX -- backspace seems different; I don't understand why. -# invesigate this LATER... +proc pdtk_canvas_sendkey {name state key iso shift} { global pd_nt - if {$pd_nt == 2} { - if {$key == "BackSpace"} { - set key 8 - set keynum 8 - } - if {$key == "Delete"} { - set key 8 - set keynum 8 - } + if {$key == "BackSpace"} { + set iso "" + set key 8 + } elseif {$key == "Tab"} { + set iso "" + set key 9 + } elseif {$key == "Return"} { + set iso "" + set key 10 + } elseif {$key == "Escape"} { + set iso "" + set key 27 + } elseif {$key == "Space"} { + set iso "" + set key 32 + } elseif {$key == "Delete" || $key == "KP_Delete"} { + set iso "" + set key 127 } - if {$key == "KP_Delete"} { - set key 127 - set keynum 127 - } if {$iso != ""} { - scan $iso %c keynum - pd [canvastosym $name] key 1 $keynum $shift\; - } else { - pd [canvastosym $name] key 1 $key $shift\; + scan $iso %c key } + pd [canvastosym $name] key $state $key $shift \; } -proc pdtk_canvas_keyup {name key iso} { -# puts stderr [concat up key= $key iso= $iso] - if {$iso != ""} { - scan $iso %c keynum - pd [canvastosym $name] key 0 $keynum 0 \; - } else { - pd [canvastosym $name] key 0 $key 0 \; - } -} - proc pdtk_canvas_ctrlkey {name key shift} { # first get rid of ".c" suffix; we'll refer to the toplevel instead set topname [string trimright $name .c]