by Michael S. Kaplan, published on 2008/01/24 10:16 -05:00, original URI: http://blogs.msdn.com/b/michkap/archive/2008/01/24/7180212.aspx
Prior posts in the series:
Now I did not start this at the beginning, I kind of picked it up in the middle. Here is some info that is nice to know very near to the beginning, though....
Here are the pre-defined keystrokes and how they behave in the Candidate Window.
Note that they are Virtual Key (VK) based. I will get to the consequences of that in a moment.
While composing:
Virtual Key |
Function |
VK_LEFT |
Move caret to left in composition char If we have the Incremental Candidate List, then cancel composition. |
VK_RIGHT |
Move caret to right in composition char If we have the Incremental Candidate List, then cancel composition |
VK_RETURN |
Finalize composition char |
VK_ESCAPE |
Cancel composition char |
VK_BACK |
Delete one composition char |
VK_SPACE |
Convert composition char |
VK_UP |
If we have the Incremental Candidate List, then move candidate selection to up |
VK_DOWN |
If we have the Incremental Candidate List, then move candidate selection to down |
VK_PRIOR |
If we have the Incremental Candidate List, then move candidate selection to prior |
VK_NEXT |
If we have the Incremental Candidate List, then move candidate selection to next |
VK_HOME |
If we have the Incremental Candidate List, then move candidate selection to home |
VK_END |
If we have the Incremental Candidate List, then move candidate selection to end |
And then in the Candidate/Phrase Window:
Virtual Key |
Function |
VK_UP |
Move candidate selection to up |
VK_DOWN |
Move candidate selection to down |
VK_PRIOR |
Move candidate selection to prior |
VK_NEXT |
Move candidate selection to next |
VK_HOME |
Move candidate selection to home |
VK_END |
Move candidate selection to end |
VK_RETURN |
Finalize candidate list |
VK_ESCAPE |
Cancel candidate list |
VK_BACK |
Cancel candidate list |
VK_1 - VK_9 |
Select list item for corresponding number, one through nine |
Now each text file has a section it in that is key to how every other character is handled. Here is what it looks like in our MSDN_TableTextService_Explicit.txt file:
[Keystroke.Composition]
VK_1, 0 = INPUT // 1
VK_2, 0 = INPUT // 2
VK_3, 0 = INPUT // 3
VK_4, 0 = INPUT // 4
VK_5, 0 = INPUT // 5
VK_6, 0 = INPUT // 6
VK_7, 0 = INPUT // 7
VK_8, 0 = INPUT // 8
VK_9, 0 = INPUT // 9
Now as that list might or might not seem to indicate, all other keys just pass right through to the underlying keyboard that sits underneath the Tabld Driven TIP.
But adding a VK_* value to this list will cause keystrokes from that VK to be processed by the Table Driven Text Service -- and if those letters never appear in the [Text] section then those keystrokes will be eaten.
Now there are a few more advanced features, which I'll discuss soon.
And there is the interaction between the predefined keys and the ones you define in the file -- basically the rule is easy and simple for the DLL -- it always wins. Which means if you define something then it will alwys pay attention to you unless it has its own override (hih is why VK_1 - VK_9 have that weird behavior where as soon as you have a candidate list then if it is numbered then the candidate item selection takes prioirty over the actual input -- which leads to VERY confusing behavior.
I'll discuss this more soon, as well. :-)
At this point, you may be wondering about two more things -- the meaning of the INPUT keyword here, and the meaning of the number 0. The fact that every single text file on Vista includes these very same entries is just a special bonus to people trying to figure out the meaning without assistance or documentation....
If you are one of those people then you can take comfort in the fact that I was too, so I'll be getting to this very soon, in an upcoming blog in this series. :-)
Coming up soon, maybe next -- some really explicit information about the [TEXT] section, and more information on some of the configuration sections....
This post brought to you by ③ (U+2462, aka CIRCLED DIGIT THREE)
referenced by
2008/10/21 Behond the Table Driven Text Service, Part 14 (Don't expect too much from numbers)
2008/07/25 Behold the Table Driven Text Service, Part 13 (Sinhalification proclamation!)
2008/06/30 Behold the Table Driven Text Service, Part 12 (The knights who say நீ, redux, #2)
2008/06/21 Back to Sri Lanka (conceptually)
2008/02/25 Behold the Table Driven Text Service, Part 11 (The knights who say நீ, redux, #1)
2008/02/11 Behold the Table Driven Text Service, Part 8 (Configuration 'junk in the trunk', part 2)
2008/01/30 Behold the Table Driven Text Service, Part 7 (Configuration 'junk in the trunk', part 1)
2008/01/29 Behold the Table Driven Text Service, Part 6 (it is sufficient to be iconic, aka DaYi, DaYi Aynu!)
2008/01/28 Behold the Table Driven Text Service, Part 5 (All about the language, baby!)
2008/01/25 Behold the Table Driven Text Service, Part 4 (Specifying when to modify, if not how)