OnKeyDown: getting the charcater value from key
-
Nah, both of them are encoded in US-ASCII.
addingchar.force_encoding('UTF-8')
should do the tick, aint it? -
@anton_s said:
Nah, both of them are encoded in US-ASCII.
You're talking about
ToAscii
?
I was looking atToUnicode
.@anton_s said:
adding
char.force_encoding('UTF-8')
should do the tick, aint it?I'd be careful with
force_encoding
- it should only be used if you have raw binary data representing a string or if you know the string is incorrectly encoded. Otherwise one should transpose the en encoding.
foo = bar.encode("UTF-8")
-
@tt_su said:
You're talking about ToAscii?
I was looking at ToUnicode.Yes, the ToUnicode and ToAscii both return same formatted Ruby strings, but on the actual approach they don't. When I initially created a buffer
char = 0.chr*2
it was already formatted in US-ASCII. TheToUnicode
andToAscii
simply fills the the specified buffer with ascii/unicode characters without changing the format of the Ruby string.Changing
char = 0.chr*2
tochar= ' '
will initially create a UTF-8 formatted string, rather than the US-ASCII. The format remains unchanged when the ToUnicode/ToAscii functions fills thechar
string.@tt_su said:
I'd be careful with force_encoding...
For some reason
force_encoding
even managed to crash SketchUp at some points when testing key_test. -
Ya'all need to be careful where testing string encoding, until MR1 comes out.
The correct default encoding is not properly set in MR0. -
@dan rathbun said:
The correct default encoding is not properly set in MR0.
if anyones prepared to admit it...
the other issue is why these things are so difficult on a mac...
apple doesn't support key logging and goes out of it's way to prevent it occurring...
apple does allow it IF it's for assistive devices to aid those with disabilities...
if you want to use 'assistive devices api' to do ordinary tasks, you need to connivence the 'admin' user to turn it on.
mac folk are reluctant to do this as it's system wide, and would enable malicious 'key loggers' to, key-log...
john
-
Err.. found a Ruby Core bug.
Even after settingEncoding::default_internal="UTF-8"
theInteger#chr()
method does not return a string in the default internal encoding... however there is a workaround. Ruby 2.0's
Integer#chr()
method now takes an encoding argument, so, this:
char = 0.chr(Encoding::default_internal)*2
or this:
char = 0.chr("UTF-8")*2
WILL work. -
-
-
Okay, I figured a way to get key via the Windows API. The code below will give you the key code of the exact character that your pressing. For instance,
- Pressing 1 yields 1; Pressing Shift-1 returns !.
- Pressing w yields w; Pressing Shift-w returns W.
I guess it should work properly on the Français keyboard as well. Test it out.
require 'Win32API' class KeyTest GetKeyboardState = Win32API.new('User32', 'GetKeyboardState', 'P', 'L') ToAscii = Win32API.new('User32', 'ToAscii', 'LLPPL', 'L') ToUnicode = Win32API.new('User32', 'ToUnicode', 'LLPPLL', 'L') def onKeyDown(key, repeat, flags, view) buffer = 0.chr*256 char = 0.chr('UTF-8')*2 # maintain UTF-8 encoding GetKeyboardState.call(buffer) res = ToUnicode.call(key, repeat, buffer, char, char.size, 0) #res = ToAscii.call(key, repeat, buffer, char, 0) return if res == 0 char.strip! p char # process end end unless file_loaded?(__FILE__) UI.menu('Plugins').add_item('Key Test'){ Sketchup.active_model.select_tool(KeyTest.new) } end
You need Win32API.so for SU2013 and below though.
-
-
@dan rathbun said:
Err.. found a Ruby Core bug.
Even after settingEncoding::default_internal="UTF-8"
theInteger#chr()
method does not return a string in the default internal encoding.sigh "Unicode support" grumble kicks Ruby on the shin
-
Yea did you look at the C code by clicking the method in the CHM ?
It has a kind of convoluted switch statement.
Advertisement