From 0c2e9ca13ca76dcc5f69cffbcbc19a7347cb7307 Mon Sep 17 00:00:00 2001 From: Meng-Heng Date: Tue, 1 Jul 2025 16:24:28 +0700 Subject: [PATCH] docs: add ansi and iso context and image, change img tags, and polish for readibility --- .../docs/help/context/keyboard-editor.md | 75 ++++++++---------- .../help/images/ui/OnScreenKeyboard_ISO.png | Bin 0 -> 13169 bytes 2 files changed, 32 insertions(+), 43 deletions(-) create mode 100644 developer/docs/help/images/ui/OnScreenKeyboard_ISO.png diff --git a/developer/docs/help/context/keyboard-editor.md b/developer/docs/help/context/keyboard-editor.md index c445bb7280..fc072b552c 100644 --- a/developer/docs/help/context/keyboard-editor.md +++ b/developer/docs/help/context/keyboard-editor.md @@ -13,13 +13,10 @@ multiple source files, which are all managed within this one editor. The following image shows the first tab of the editor, the Details tab, for a brand new keyboard, with those three initial tabs. -![Keyboard Editor - New file, Details tab](../images/ui/frmKeymanWizard_New.png) +Keyboard Editor - New file, Details tab -> ### Note -Users of earlier versions of Keyman Developer may initially have trouble -finding tabs such as the Icon tab or the On-Screen tab, as they are not -initially visible. The Features grid on the Details tab allows you to -add these extra features into the keyboard. +> [!Note] +> Users of earlier versions of Keyman Developer may initially have trouble finding tabs such as the Icon tab or the On-Screen tab, as they are not initially visible. The Features grid on the Details tab allows you to add these extra features into the keyboard. ## Keyboard component files @@ -47,7 +44,7 @@ because that reflects both the Details and the Layout tab. ## Details tab -![Keyboard Editor - Details tab](../images/ui/frmKeymanWizard_Details.png) +Keyboard Editor - Details tab The Details tab grows as you add more options to a keyboard. The fields here are: @@ -102,7 +99,7 @@ Features ## Layout tab -![Keyboard Editor - Layout tab, Design view](../images/ui/frmKeymanWizard_Layout_Design.png) +Keyboard Editor - Layout tab, Design view The Layout tab gives you a simple interface to quickly create a keyboard using a visual representation of a desktop/laptop computer keyboard. You @@ -124,13 +121,11 @@ There are two ways to assign characters to the keys: onto the appropriate key. This will set the key to output that character. -> ### Hint - To add the character to a key with existing characters, hold -Ctrl while dropping it onto the key. +> [!TIP] +> To add the character to a key with existing characters, hold Ctrl while dropping it onto the key. - -> ### Note - Any key that does not have a character assigned to it will output what the selected Windows layout specifies. +> [!Note] +> Any key that does not have a character assigned to it will output what the selected Windows layout specifies. Distinguish between left and right Ctrl/Alt : A Keyman keyboard can treat left and right Ctrl and Alt identically, @@ -151,9 +146,7 @@ Display 102nd Key (as on European keyboards) You can press and release Ctrl to select another key on the keyboard using your keyboard. -
- -![Keyboard Editor - Layout tab, Code view](../images/ui/frmKeymanWizard_Layout_Code.png) +Keyboard Editor - Layout tab, Code view The Code view shows the source code of the keyboard file. This is where all the information in the Details and Layout tab is stored, and @@ -165,7 +158,7 @@ editor shown within this view. ## On-Screen tab -![Keyboard Editor - On-Screen tab](../images/ui/OnScreenKeyboard.png) +Keyboard Editor - On-Screen tab This tab allows you to edit the visual representation of your keyboard layout. The content on this tab is stored in the .kvks file associated @@ -213,17 +206,27 @@ Distinguish between left and right Ctrl/Alt : If checked, treats the left and right Ctrl/Alt as separate layers Display 102nd Key (as on European keyboards) -: European keyboards have one extra key that is not on US keyboards. +: European keyboards (ISO layout) have one extra key that is not on US keyboards (ANSI layout). This key is positioned to the right of the left shift key. Some other keyboards have additional keys; these are not shown on the - layout designer. If you have a European layout selected as your + layout designer. + + If you have a European layout selected as your Windows layout, the 102nd key will always be visible in the designer; ensure you select this checkbox if you want the 102nd key to always be visible to end users of the layout, irrespective of - their selected base layout. When a European layout is selected as + their selected base layout. + + When a European layout is selected as your Windows layout, the shape of the Enter key will also change to take two rows, and the backslash key will move down one row, but not - otherwise change in behaviour. + otherwise change in behaviour. + + Keyboard Editor - On-Screen tab with ISO layout + *See the difference between the two layouts in Keyman Developer.* + + > [!NOTE] + > To ensure compatibility with both ANSI and ISO physical keyboards, you should tick the "Display 102nd Key (as on European keyboards)" checkbox in Keyman Developer. Auto-fill underlying layout : When the Fill from layout button is clicked, if this option is @@ -232,7 +235,7 @@ Auto-fill underlying layout ## Touch Layout tab -![Keyboard Editor - Touch Layout tab, Design view](../images/ui/TouchLayout_Design.png) +Keyboard Editor - Touch Layout tab, Design view The Touch Layout tab is used to create the visible representation of the keyboard layout for touch devices. It works similarly to the On Screen @@ -251,7 +254,7 @@ including iPhone and iPad, in different orientations, to allow you to visualize the keyboard layout before you load it onto a device. The following image shows all aspects of the touch design view. -![Keyboard Editor - Touch Layout tab, Design view closeup](../images/ui/TouchLayout_Design_2.png) +Keyboard Editor - Touch Layout tab, Design view closeup ### Left sidebar controls @@ -265,20 +268,6 @@ Template... current layout are not in the new template, their definitions will be lost. Therefore, selecting an appropriate template early in the development process is suggested. - - - template-basic: has only a phone layout (4 rows of keys), with three layers: default (K_A through K_Z - plus some punctuation), shift (Shift K_A through Shift K_Z, plus some punctuation), numeric (K_0 through - K_9 unshifted and shifted, plus other non-alphanumerice keys). - - - template-latin: has both phone and tablet layouts (which are identical except for some key spacing, - each with 4 rows of keys), with four layers: default, shift, numeric, symbol. The first three layers - are similar to those of template-basic, with the addition of longpress keys for accented characters. - The symbol layer has many symbols not usually seen on a physical keyboard. - - - template-traditional: has both phone (4 rows of keys) and tablet (5 rows of keys) layouts. The phone - layout is similar to the template-basic layout. The tablet layout has eight layers: default, shift, ctrl, - shift-ctrl, alt, shift-alt, ctrl-alt, shift-ctrl-alt. The default layer has the keys from the default layer - of the desktop layout, the shift layer has the keys from the shift layer of the desktop layout, and so on. Import from On Screen : If you have an existing On-Screen Keyboard for your keyboard layout, @@ -468,7 +457,7 @@ dragged between the main keyboard area and the long press area. The bar below the long press area contains the corresponding controls for the long press keys. -![Keyboard Editor - Touch Layout tab, Code view](../images/ui/frmKeymanWizard_TouchLayout_Code.png) +Keyboard Editor - Touch Layout tab, Code view The Code view allows you to edit the JSON source of the touch layout file. This makes certain operations simpler, such as batched rearranging @@ -481,7 +470,7 @@ The format of the layout file is described in [Creating a touch keyboard layout Underneath the keyboard area is the Long-press, Flicks, and Multitaps controls. -![Long-press, Flicks, and Multitaps layout](../images/ui/LongPress_Flicks_Multitaps.png) +Long-press, Flicks, and Multitaps layout Red circle with an X : This button to the top right of the key will delete the key from the @@ -508,7 +497,7 @@ the selected key for different Gesture Type. The only difference between this co ## Icon tab -![Keyboard Editor - Icon tab](../images/ui/frmKeymanWizard_Icon.png) +Keyboard Editor - Icon tab The icon tab allows you to edit the icon associated with the keyboard. An external icon editor will allow you to create more sophisticated icons with alpha transparency and multiple resolutions, but this will cover the standard 16x16 256 colour icon, which is all that many keyboards require. The controls at the top left are: @@ -574,7 +563,7 @@ This tab allows you to edit the [named constants](/developer/language/guide/cons ## Build tab -![Keyboard Editor - Build tab](../images/ui/BuildTab.png) +Keyboard Editor - Build tab A set of common controls is across the top of this tab: @@ -645,4 +634,4 @@ web page. The Send to email function makes it easier to open the addresses on your mobile device without having to enter them manually. -Learn more about [testing on the web and mobile devices](../guides/test/). +Learn more about [testing on the web and mobile devices](../guides/test/). \ No newline at end of file diff --git a/developer/docs/help/images/ui/OnScreenKeyboard_ISO.png b/developer/docs/help/images/ui/OnScreenKeyboard_ISO.png new file mode 100644 index 0000000000000000000000000000000000000000..64e3f6ef7e20fa61275a8fe27f7ca56aab155b49 GIT binary patch literal 13169 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 C-cS+% literal 0 HcmV?d00001