Thanks for your question.
The error message indicates that the .keyman-touch-layout file (which is JSON format data) has a problem. A line that should begin with “id” is missing. I get a similar error (though with a different code) if I delete the line
from a .keyboard-touch-layout file and then try to compile the keyboard.
If you have an older version of the .keyboard-touch-layout file you can compare the files to try to find where the problem lies.
If it’s possible to use the Keyman Developer program, I think you’ll find it much easier, since it handles the details of the JSON format.
But if this doesn’t address your problem, please write again.
That error happened when using Keyman Developer. I’ve never coded anything, all was done in the “Design” tab, so I don’t know how did that happen.
Can you post a copy of your .keyboard-touch-layout file here?
hindi_qwerty.keyman-touch-layout (41.4 KB)
From your file, it seems the “numeric” layer has a lot of “id”'s missing on the number key long-presses
K_1 to K_0 lines 546-726.
Did you manually edit the text file or add the keys in Keyman Developer?
In an experiment using Keyman Developer (v15.0.274.0) I was able to remove the contents of the ID field and generate: Warning: 2099 A key on layer “default” has no identifier. (Not exactly the same error as originally reported, but similar.) So it is possible to have missing ids without manually editing the file outside of Keyman Developer.
I have taken a look at the file and identified the following problems:
- None of the longpress keys under the digit keys had
idfields specified. The
idfield is required for all keys. (You must have deleted the IDs in the editor?)
- I found 71 keys with identifiers starting with
- I found 12 keys with invalid identifiers, e.g.
shift K_HYPHEN. These should instead have been defined with id
K_HYPHENand the modifier
shiftselected in the modifier field.
We’ll continue to work on improving the editor validation so that these issues can be caught in the visual editor rather than in the source view or compiler.
I’ve attached a version where I’ve manually corrected the issues so the touch layout file should now load.
hindi_qwerty.keyman-touch-layout (42.1 KB)
For reference, I used the ‘clean’ JSON schema for .keyman-touch-layout to validate the file at https://www.jsonschemavalidator.net/. This tool made it a little easier to spot the issues than the Keyman Developer source editor in this case.
I added the keys in Keyman Developer
Each of those
T_x_y keys in the error report is a custom key on your touch keyboard which generates no output. The compiler is warning you that these keys will not work. To fix this, either rename the key identifiers to the appropriate
U_xxxx Unicode code point value, or add rules into your keyboard code to support the
T_x_y keys. Learn more about key identifiers
By default, Keyman Developer will treat warnings as errors. You can change this setting in Project Settings, and then you will be able to compile your keyboard (but those keys will still not do anything!)
I think you are referring to the rightmost key in the top row, which appears wider than the rest of the keys. This is due to the rows having different widths (the amounts of space for keys and the padding between them). If you look at the righthand side of the touch layout in Keyman Developer, you’ll see that, for each row, it lists the number of keys, the width of all the keys, the width of padding around keys and the total width. If you can adjust the widths to make the totals equal, hopefully you’ll avoid the distorted key.
For this specific case, you may want to add a key to the right hand side of the top row and give it the “Key Type” value of “Spacer”. That should take up the space of a key, but not show as a key.
How can I put multiple characters into a key. As an example: क्ष (क्ष)
In Keyman Developer, with the Touch Layout active, click on the key you want to use as the base key, then click the “Add longpress group” button. You should then be able to add additional keys that will be displayed in a small menu when you press and hold the base key.
Simple Touch Keyboard Development Example may be helpful.
If you’re wanting one key to output multiple characters:
Set the “id” to U_XXXX_YYYY_ZZZZ… and remove the “text” from the keycap.
Keyman will then output the characters U+XXXX U+YYYY U+ZZZZ…
क्ष has the characters:
0915 DEVANAGARI LETTER KA
094D DEVANAGARI SIGN VIRAMA
0937 DEVANAGARI LETTER SSA
the key “id” would be
I got this error after opening the file. The previous time I opened the file everything was fine
Your hindi_qwerty.keyman-touch-layout file needs to be fixed to be proper JSON. Can you attach your current file?
hindi_qwerty.keyman-touch-layout (46.0 KB)
I ran your file through an online JSON validator
and it pointed out your line 292 ends in a comma that needs to be removed