From 1264896741aff188f2cc92c388e31f7e539c3374 Mon Sep 17 00:00:00 2001 From: Meng-Heng Date: Mon, 25 Mar 2024 13:10:26 +0700 Subject: [PATCH 1/6] chore: update images and instructions to 17.0 --- developer/17.0/context/debug.md | 16 +- developer/17.0/context/keyboard-editor.md | 221 ++++++++++++---------- developer/17.0/context/model-editor.md | 44 +++-- developer/17.0/context/new-project.md | 19 +- developer/17.0/context/options.md | 59 +++--- developer/17.0/context/startup.md | 18 -- 6 files changed, 203 insertions(+), 174 deletions(-) delete mode 100644 developer/17.0/context/startup.md diff --git a/developer/17.0/context/debug.md b/developer/17.0/context/debug.md index 40996406e..1a4039dc3 100644 --- a/developer/17.0/context/debug.md +++ b/developer/17.0/context/debug.md @@ -4,7 +4,7 @@ title: Debug Window ![Debug window - Debug State](/cdn/dev/img/developer/100/ui/frmKeymanWizard_Debug_State.png) -The debug window is shown at the bottom of an keyboard editor when +The debug window is shown at the bottom of the keyboard editor when debugging the keyboard. There are several user interface areas: The debugger input window, the debugger status window, a debugger toolbar (usually docked under the menu), and the status bar will show the @@ -31,9 +31,9 @@ the screen, then only those that fit will be shown in the grid. The debug menu and debug toolbar control the debugger. -![Debug toolbar](/cdn/dev/img/developer/100/ui/Debug_Toolbar.png) +![Debug toolbar](/cdn/dev/img/developer/170/ui/Debug_Toolbar17.0.png) -![Debug menu](/cdn/dev/img/developer/100/ui/Debug_Menu.png) +![Debug menu](/cdn/dev/img/developer/170/ui/Debug_Menu17.0.png) Set/Clear breakpoint : A breakpoint can be put on a line of code to ask Keyman Developer to @@ -62,15 +62,13 @@ Run into single step mode again. Pause -: Use the Pause button or press Shift+Esc to pause the debugger. When - the debugger is paused, it will not accept any input, and ordinary - shortcut keys (Shift+F5, Alt+Tab, etc.) will function as usual. - Press Pause again to resume debugging. +: Use the Pause button or press Shift + Esc to pause the debugger. When + the debugger is paused, it will not accept any input, and ordinary shortcut keys (Shift + F5, Alt + Tab, etc.) will function as usual. Press Pause again to resume debugging. -System keyboard + ## Debug State box diff --git a/developer/17.0/context/keyboard-editor.md b/developer/17.0/context/keyboard-editor.md index 42901d7ee..98074a145 100644 --- a/developer/17.0/context/keyboard-editor.md +++ b/developer/17.0/context/keyboard-editor.md @@ -15,7 +15,7 @@ for a brand new keyboard, with those three initial tabs. ![Keyboard Editor - New file, Details tab](/cdn/dev/img/developer/100/ui/frmKeymanWizard_New.png) -> ## Note +> ### 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 @@ -32,7 +32,7 @@ names should be used. | File type | Tabs | Feature | Store name | Description | |-------------------|-----------------|--------------------|----------------------|------------------------| | `file.kmn` | Details, Layout | | The primary keyboard source file. Required. | | -| `file.kvks` | On-Screen | Desktop On Screen Keyboard | [`&visualkeyboard`](/developer/language/reference/visualkeyboard) | The visual presentation of the keyboard for desktop computers. | +| `file.kvks` | On-Screen | Desktop On-Screen Keyboard | [`&visualkeyboard`](/developer/language/reference/visualkeyboard) | The visual presentation of the keyboard for desktop computers. | | `file.ico`, `file.bmp` | Icon | Icon | [`&bitmap`](/developer/language/reference/bitmap) | An icon that represents the keyboard in the user interface on desktop computers. | | `file.keyman-touch-layout` | Touch Layout | Touch-Optimised Keyboard | [`&layoutfile`](/developer/language/reference/layoutfile) | The touch layout visual description file | | `file-code.js` | Embedded JS | Embedded Javascript | [`&kmw_embedjs`](/developer/language/reference/kmw_embedjs) | Additional Javascript code for [IMX](../guides/develop/imx) functionality | @@ -124,13 +124,13 @@ 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 +> ### Hint + To add the character to a key with existing characters, hold Ctrl while dropping it onto the key. -Note that 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,6 +151,8 @@ 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](/cdn/dev/img/developer/100/ui/frmKeymanWizard_Layout_Code.png) The Code view shows the source code of the keyboard file. This is where @@ -163,7 +165,7 @@ editor shown within this view. ## On-Screen tab -![Keyboard Editor - On-Screen tab](/cdn/dev/img/developer/100/ui/frmKeymanWizard_OnScreenKeyboard.png) +![Keyboard Editor - On-Screen tab](/cdn/dev/img/developer/170/ui/OnScreenKeyboard17.0.png) 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 @@ -189,10 +191,10 @@ Fill from layout designing it from scratch. Import -: Imports an On Screen Keyboard from an XML file. +: Imports an On-Screen Keyboard from an XML file. Export -: Exports the On Screen Keyboard to an XML file. +: Exports the On-Screen Keyboard to an XML file. Text : The key cap for the selected key @@ -230,7 +232,7 @@ Auto-fill underlying layout ## Touch Layout tab -![Keyboard Editor - Touch Layout tab, Design view](/cdn/dev/img/developer/100/ui/frmKeymanWizard_TouchLayout_Design.png) +![Keyboard Editor - Touch Layout tab, Design view](/cdn/dev/img/developer/170/ui/TouchLayout_Design17.0.png) 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 @@ -249,9 +251,9 @@ 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](/cdn/dev/img/developer/100/ui/frmKeymanWizard_TouchLayout_Design_2.png) +![Keyboard Editor - Touch Layout tab, Design view closeup](/cdn/dev/img/developer/170/ui/TouchLayout_Design_2-17.0.png) -### Top bar controls +### Left sidebar controls Template... : The Template button allows you to choose a standard layout of keys @@ -265,13 +267,20 @@ Template... development process is suggested. Import from On Screen -: If you have an existing On Screen Keyboard for your keyboard layout, - importing the design from the On Screen Keyboard can reduce the +: If you have an existing On-Screen Keyboard for your keyboard layout, + importing the design from the On-Screen Keyboard can reduce the development time considerably. Once you have imported, you will probably want to select a new template to transform the desktop-oriented design to a tablet or phone design automatically. -Platform area +View Controls +: This selector allows you to choose the simulated view of the + keyboard, either landscape or portrait, for a number of devices. The + presented keyboard may not be 100% identical to the final layout as + seen on the device, but this allows you to get a feel for the design + before testing. + +Platform : The platform controls allow you to select and add or remove platform support for a given layout. If a platform is not defined, then Keyman Engine will transform the layout from another platform @@ -282,21 +291,14 @@ Platform area guide as to the position of each key on the keyboard, especially for non-Latin scripts. -Layer area +Layer : Each layout for each platform is made up of one or more layers of keys. Each layer can have a default shift state associated with it, which allows keys to trigger specific rules in the Layout code. -Presentation -: This selector allows you to choose the simulated view of the - keyboard, either landscape or portrait, for a number of devices. The - presented keyboard may not be 100% identical to the final layout as - seen on the device, but this allows you to get a feel for the design - before testing. - ### Keyboard area -Under the top bar is the keyboard design area. This shows a device with +On the right of the sidebar is the keyboard design area. This shows a device with a presentation of the key layout. Within the key layout, you can click on any key to edit it. There are a number of controls: @@ -315,28 +317,6 @@ Dragging the right hand side of the key resizing the key will rescale the entire keyboard so it still fits within the device screen. -Key Cap -: You can drop characters from Character Map directly into the key cap - edit box, or type directly. - -Key Code -: Clicking on a key code on a key cap will focus the key code edit box - instead of the key cap edit box. - -Drag and drop -: Keys can be moved around the keyboard by dragging them with the - mouse; a ghost landing box will appear beneath the key when it can - be dropped. If the key is dropped in an invalid area, no action will - occur. - -Double-click -: Double clicking on a key with a "Next Layer" defined will switch to - that layer. - -Top right slash -: A slash in the top right of a key indicates the presence of a long - press menu for that key. - Metrics : The metrics displayed on the right hand side of the keyboard show the virtual width of each row of the keyboard, and the number of @@ -347,40 +327,50 @@ Metrics visual gap on the right hand side of the keyboard. You should aim to make each row the same total width for consistent results. -### Middle bar controls +### Right sidebar controls -Below the keyboard area is another control bar for editing details of +Next to the keyboard area is another control bar for editing details of the selected key. -Key Type +Keycap Value +: Assign a type to a key. This is to specifies which keys are Text, AltGr, Shift, Menu, TabLeft, ZWSp and more. + +Text +: You can drop characters from Character Map directly into the key cap + edit box, or type directly. +Text Unicode +: Clicking on a text unicode will focus the unicode edit box + instead of the text edit box. + +Hint and Hint Unicode +: Add any Unicode to indicate the presence of long-press keys for that key, and the hint will be visible in the top right corner of the key. + +Key Type : The general appearance of each key is determined by the key type, which is selected (in Keyman Developer 10) from a drop-down list: | Key Type | Description | |----------------------|----------------------------| - | Default (normal) key | A standard letter or character key on the keyboard | - | Special (shift) key | The grey control type keys, layer shifts, Enter, Backspace, etc. | - | Active special key | A variation on the Special keys, which shows a highlight, typically used to indicate that a shift key for example is down. | - | Dead-key | While this key type has no difference in function to default keys, it will have a different style to indicate that it is different; the logic in the keyboard source may well be a deadkey, for example. | - | Blank key | This type of key cannot be selected in use and shows as a blank key. | - | Spacer | Leaves a space in the keyboard at the point it is inserted, in the background colour of the keyboard area. | - -Shift -: Determines the shift state that Keyman Engine will receive from the - key stroke, such as Shift or Ctrl. This makes it simpler to design a - single keyboard that works across both desktop and mobile - interfaces. - -Code - -: Each key must be given an identifying key code which is unique to - the key layer. Key codes by and large correspond to the virtual key + | Default (normal) key | A standard letter or character key on the keyboard | + | Special (shift) key | The grey control type keys, layer shifts, Enter, Backspace, etc. | + | Special (Active) | A variation on the Special keys, which shows a highlight, typically used to indicate that a shift key for example is down. | + | Dead-key | While this key type has no difference in function to default keys, it will have a different style to indicate that it is different; the logic in the keyboard source may well be a deadkey, for example. | + | Blank | This type of key cannot be selected in use and shows as a blank key. | + | Spacer | Leaves a space in the keyboard at the point it is inserted, in the background colour of the keyboard area. | + +Modifier +: Determines the state that Keyman Engine will receive from the + key stroke, such as Default, Right-Alt, Shift, Right-Alt Shift, or Caps. This makes it simpler to design a single keyboard that works across both desktop and mobile interfaces. + +ID +: Each key must be given an identifying ID which is unique to + the key layer. ID by and large correspond to the virtual key codes used when creating a keyboard program for a desktop keyboard, and should start with `K_`, for keys mapped to standard Keyman virtual key names, e.g. `K_HYPHEN`, and `T_` or `U_` for - user-defined names, e.g. `T_ZZZ`. If keyboard rules exist matching - the key code in context, then the output from the key will be + user-defined names, e.g. `T_ZZZ`. + If keyboard rules exist matching the key code in context, then the output from the key will be determined by the processing of those rules. It is usually best to include explicit rules to manage the output from each key, but if no rules matching the key code are included in the keyboard program, @@ -388,17 +378,17 @@ Code (where `xxxx` and `yyyy` are 4 to 6-digit hex strings), then the Unicode characters `U+xxxx` and `U+yyyy` will be output. As of Keyman 15, you can use more than one Unicode character value in the - id (earlier versions permitted only one). The key code is always + id (earlier versions permitted only one). The ID is always required, and a default code will usually be generated automatically by Keyman Developer. - - `K_xxxx` is used for a standard Keyman Desktop key name, e.g. + - `K_xxxx` is used for a standard Keyman for Windows's key name, e.g. `K_W`, `K_ENTER`. You cannot make up your own `K_xxxx` names. Many of the `K_` ids have overloaded output behaviour, for instance, if no rule is matched for `K_W`, Keyman will output 'w' when it is touched. The standard key names are listed in [Virtual Keys and Virtual Character Keys](/developer/language/guide/virtual-keys). Typically, - you would use only the "common" virtual key codes. + you would use only the "common" virtual ID. - `T_xxxx` is used for any user defined names, e.g. `T_SCHWA`. If you wanted to use it, `T_ENTER` would also be valid. If no rule matches it, the key will have no output behaviour. @@ -412,7 +402,7 @@ Code Padding Left : Padding to the left of each key can be adjusted, and specified as a percentage of the default key width (100). If not specified, a - standard padding of 5% of the key width is used between adjacent + standard padding of 15% of the key width is used between adjacent keys. Width @@ -428,10 +418,9 @@ Width spacer key appears on the designer screen as a narrow key, but will not be visible in actual use. -Next Layer +Next layer : The virtual keys `K_SHIFT`, `K_CONTROL`, `K_MENU`, etc. are normally - used to switch to another key layer, which is implied by the key - code. The left and right variants of those key codes, and also + used to switch to another key layer, which is implied by the ID. The left and right variants of those ID, and also additional layer-switching keys mentioned above (`K_NUMERALS`, `K_SYMBOLS`, `K_CURRENCIES`, `K_ALTGR`) can also be used to automatically switch to the appropriate key layer instead of @@ -443,10 +432,19 @@ Next Layer following the output of the key. Of course, that can be manually overridden by switching to a different layer if preferred. -Add/Remove long press popup -: Adds or removes the long press menu from the selected key. +Drag and drop +: Keys can be moved around the keyboard by dragging them with the + mouse; a ghost landing box will appear beneath the key when it can + be dropped. If the key is dropped in an invalid area, no action will + occur. -### Long press area +Double-click +: Double clicking on a key with a "Next Layer" defined will switch to + that layer. + +### Middle bar controls + +#### Long-press keys area The keys in the long press area cannot be resized but the controls otherwise work the same as in the main keyboard area. The keys cannot be @@ -463,15 +461,40 @@ view uses the standard [editor](editor). The format of the layout file is described in [Creating a touch keyboard layout guide](../guides/develop/creating-a-touch-keyboard-layout-for-amharic-the-nitty-gritty). +#### Long-press, Flicks, and Multitaps controls + +Underneath the keyboard area is the Long-press, Flicks, and Multitaps controls. + +![Long-press, Flicks, and Multitaps layout](/cdn/dev/img/developer/170/ui/LongPress_Flicks_Multitaps.png) + +Red circle with an X +: This button to the top right of the key will delete the key from the + row; if it is the last key on the row, the entire row will be + deleted. + +Green arrow with a + *(Applies to Long-press and Multitaps)* +: These buttons will insert a key to the left or right, or a single + key on a new row above or below the selected key. Adding extra keys + scales the entire keyboard. + +Drag and drop *(Applies to Long-press and Multitaps)* +: Keys can be moved around the keyboard by dragging them with the + mouse; a ghost landing box will appear beneath the key when it can + be dropped. If the key is dropped in an invalid area, no action will + occur. + +#### Right sidebar controls + +Next to the three controls is another control bar for editing details of +the selected key for different Gesture Type. The only difference between this control and the [keyboard right sidebar](#toc-right-sidebar-controls) controls is: +* Include Gesture Type box and Default selection check box. +* **No** Hint, Hint Unicode, Padding Left, and Width. + ## Icon tab ![Keyboard Editor - Icon tab](/cdn/dev/img/developer/100/ui/frmKeymanWizard_Icon.png) -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: +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: Pencil : Freehand drawing with the selected colour; use right mouse button @@ -535,7 +558,7 @@ This tab allows you to edit the [named constants](/developer/language/guide/cons ## Build tab -![Keyboard Editor - Build tab](/cdn/dev/img/developer/100/ui/frmKeymanWizard_Build.png) +![Keyboard Editor - Build tab](/cdn/dev/img/developer/170/ui/BuildTab.png) A set of common controls is across the top of this tab: @@ -550,14 +573,14 @@ Start Debugging [debugger](debug), or press the Start Debugging button. This is suitable for testing desktop layouts. -Open Containing Folder -: Opens the folder which contains the keyboard source files. +Open source, build, and project folder +: Opens the folder which contains the keyboard source, build, and project files. -Add to Project + -### Windows and macOS Targets +### Windows, macOS, and Linux Targets If your keyboard is designed to target Windows and macOS, then the following buttons will also be visible: @@ -568,9 +591,9 @@ Install Uninstall : Uninstalls the keyboard from Keyman Desktop if previously installed -Package for Distribution + ### Web and Mobile Targets @@ -578,21 +601,23 @@ If your keyboard is designed to target KeymanWeb, mobile or tablet devices, the following controls will also be visible: Test Keyboard on Web -: Starts the Keyman Developer Web Server for the current keyboard. +: Starts the Keyman Developer Web Server for the current keyboard. This will list the various IP addresses and hostnames that Keyman Developer is listening on -Addresses -: Lists the various IP addresses and hostnames that Keyman Developer - is listening on +Configure... +: Pressing this allows the [Options](./options) dialog to pop-up. -Open debugger in local browser +Open in browser : Starts your default browser with the selected address to allow testing of the keyboard directly -Send addresses to email +Send to email : Sends the list of web addresses as an email so that you can more easily open the test site on your mobile device, or share with someone else on your network. +Copy link +: Once the IP addresses are shown, feel free to copy any one of the links. + To test on other platforms, open one of the debug host addresses listed on your device. Your device will need to be on the same network as the Keyman Developer computer. diff --git a/developer/17.0/context/model-editor.md b/developer/17.0/context/model-editor.md index 1f7a4fc49..2ea8e7ec1 100644 --- a/developer/17.0/context/model-editor.md +++ b/developer/17.0/context/model-editor.md @@ -21,7 +21,7 @@ editor are: The following image shows the first tab of the editor, the Details tab. Changes made to this tab are reflected immediately in the Source tab. -![Model Editor - Details tab](/cdn/dev/img/developer/130/ui/frmModelEditor_Details.png) +![Model Editor - Details tab](/cdn/dev/img/developer/170/ui/frmModelEditor_Details1.png) The fields here have corresponding definitions in the [.model.ts source file](../reference/file-types/model-ts), which can be seen in the **Source** tab: @@ -36,6 +36,18 @@ Word breaker `default`, `ascii`, or `custom`. Corresponds to the `wordBreaker` property in the [.model.ts source file](../reference/file-types/model-ts). +Insert after word +: *update is coming* + +Quotation marks +: *update is coming* + +Right-to-left script +: *update is coming* + +Language uses casing +: *update is coming* + Comments : This field corresponds to the first lines of comments in the model source, and is visible only to the model designer. @@ -49,7 +61,7 @@ Wordlists model source. Corresponds to the `sources` property in the [.model.ts source file](../reference/file-types/model-ts). -> Note: +> ### Note If the [.model.ts](../reference/file-types/model-ts) file cannot be parsed by the model editor, the field shown here will be read only and you will need to make changes only in the **Source** tab. This can @@ -83,7 +95,8 @@ earlier in the list. ![Model Editor - Wordlist tab - Code view](/cdn/dev/img/developer/130/ui/frmModelEditor_Wordlist_Code.png) -Note: The wordlist Code editor will accept the Tab key to insert a Tab +> ### Note +The wordlist Code editor will accept the Tab key to insert a Tab character. In other code editors in Keyman Developer, the Tab key inserts spaces. @@ -97,7 +110,7 @@ programming language. The format of this file is documented in the ## Build tab -![Model Editor - Build tab](/cdn/dev/img/developer/130/ui/frmModelEditor_Build.png) +![Model Editor - Build tab](/cdn/dev/img/developer/170/ui/frmModelEditor_Build.png) A set of common controls is across the top of this tab: @@ -108,13 +121,13 @@ Compile Model single Javascript file, named as shown in the **Target filename** field. -Open Containing Folder -: Opens the folder which contains the model source files. +Open source, build, and project folder +: Opens the folder which contains the model source, build, and project files. -Add to Project + ### Test Lexical Model in Web Browser @@ -131,21 +144,24 @@ Keyboard for testing Test Lexical Model : Starts the Keyman Developer Web Server for the current lexical - model. - -Addresses -: Lists the various IP addresses and hostnames that Keyman Developer + model. This will list the various IP addresses and hostnames that Keyman Developer is listening on -Open debugger in local browser +Configure... +: Pressing this allows the [Options](./options) dialog to pop-up. + +Open in browser : Starts your default browser with the selected address to allow testing of the model directly -Send addresses to email +Send to email... : Sends the list of web addresses as an email so that you can more easily open the test site on your mobile device, or share with someone else on your network. +Copy link +: Once the IP addresses are shown, feel free to copy any one of the links. + To test on other platforms, open one of the debug host addresses listed on your device. Your device will need to be on the same network as the Keyman Developer computer. diff --git a/developer/17.0/context/new-project.md b/developer/17.0/context/new-project.md index bd8fd059a..aa727738d 100644 --- a/developer/17.0/context/new-project.md +++ b/developer/17.0/context/new-project.md @@ -2,28 +2,23 @@ title: New Project Dialog --- -![New Project dialog](/cdn/dev/img/developer/120/ui/frmNewProject.png) +![New Project dialog](/cdn/dev/img/developer/170/ui/frmNewProject1.png) Creates a new keyboard or lexical model project, optionally from a template or by importing from another source. -## Basic +## Keyman keyboard Creates a keyboard project that matches the folder structure used in the Keyman [keyboards repository](https://github.com/keymanapp/keyboards) and includes all [basic files](/developer/keyboards/) needed for a keyboard project. Clicking OK will open the [New Project Parameters dialog](new-project-parameters). -## Blank +## LDML Keyboard +*update soon* -Creates a new empty keyboard project. +## Import Windows Keyboard + +Creates a keyboard project that matches the folder structure used in the Keyman [keyboards repository](https://github.com/keymanapp/keyboards) and includes all [basic files](/developer/keyboards/) needed for a keyboard project, then converts and imports the Windows keyboard that you select into the project. Clicking OK will open the [New Project Parameters dialog](new-project-parameters). ## Wordlist Lexical Model Creates a lexical model project that matches the folder structure used in the Keyman [lexical models repository](https://github.com/keymanapp/lexical-models) and includes all basic files needed for a lexical model project. Clicking OK will open the [New Lexical Model Project Parameters dialog](new-lm-project-parameters). -## Blank Lexical Model - -Creates a new empty lexical model project. - -## Import Windows Keyboard - -Creates a keyboard project that matches the folder structure used in the Keyman [keyboards repository](https://github.com/keymanapp/keyboards) and includes all [basic files](/developer/keyboards/) needed for a keyboard project, then converts and imports the Windows keyboard that you select into the project. Clicking OK will open the [New Project Parameters dialog](new-project-parameters). - The **Basic** and **Import Windows Keyboard** modes can also be driven by command line with [KMConvert](kmconvert). \ No newline at end of file diff --git a/developer/17.0/context/options.md b/developer/17.0/context/options.md index f78ab2fcd..9d1642f89 100644 --- a/developer/17.0/context/options.md +++ b/developer/17.0/context/options.md @@ -4,23 +4,32 @@ title: Options Dialog ## General tab -![Options dialog - General tab](/cdn/dev/img/developer/120/ui/frmOptions_General.png) +![Options dialog - General tab](/cdn/dev/img/developer/170/ui/frmOptions_General1.png) The following options are configurable in TIKE in the **General** tab: -Show splash screen +Open keyboard files in source view. +: Instead of opening a keyboard file in the Details tab, open directly + into the Layout tab, Source pane. + +External Editor Path +: You can open any Keyman source file shown in the project in an + external text editor by right-clicking on the file and selecting + "Open in External Editor". The files available for editing + externally are .kmn, .kps, and .kvks. This field configures which + editor you wish to use to edit the files. Note: if you need to pass + command line parameters to the editor, you will need to wrap the + command in a batch file and reference the batch file here. + + -Proxy settings +Proxy Settings... : Configure the HTTP proxy settings for online functionality within Keyman Developer, such as uploading files to Tavultesoft. -SMTP settings +SMTP Settings... : Configure your SMTP server settings for email functionality within Keyman Developer, such as emailing debug URLs for the touch layout debugger. ## Editor tab -![Options dialog - Editor tab](/cdn/dev/img/developer/120/ui/frmOptions_Editor.png) +![Options dialog - Editor tab](/cdn/dev/img/developer/170/ui/frmOptions_Editor1.png) Use tab character : Sets whether to use the Tab character or spaces for indents. @@ -76,7 +76,7 @@ Editor theme ## Debugger tab -![Options dialog - Debugger tab](/cdn/dev/img/developer/120/ui/frmOptions_Debugger.png) +![Options dialog - Debugger tab](/cdn/dev/img/developer/170/ui/frmOptions_Debugger1.png) Enable test window (from version 5.0) : Enables the Keyman 5-style Test window instead of the debugger. @@ -94,9 +94,12 @@ Automatically recompile if no debug information available : When the debugger starts, rebuild a keyboard without prompting if the keyboard has no debug symbols included. +Automatically reset debugger before recompiling +: *update is coming* + ## Character Map tab -![Options dialog - Character Map tab](/cdn/dev/img/developer/120/ui/frmOptions_CharacterMap.png) +![Options dialog - Character Map tab](/cdn/dev/img/developer/170/ui/frmOptions_CharacterMap1.png) Find character under cursor automatically : The character beneath the cursor in the edit window will be @@ -111,4 +114,14 @@ Update database : Rebuilds the Unicode character database from source unicodedata.txt and blocks.txt. These files can be downloaded from the Unicode website at - [http://www.unicode.org/ucd/](http://www.unicode.org/ucd/). This lets you update the character map with a newer version of Unicode. Keyman Developer 10.0 was released with Unicode version 10.0 data. \ No newline at end of file + [http://www.unicode.org/ucd/](http://www.unicode.org/ucd/). This lets you update the character map with a newer version of Unicode. Keyman Developer 10.0 was released with Unicode version 10.0 data. + +## Server tab + +![Options dialog - Server tab](/cdn/dev/img/developer/170/ui/frmOptions_Server.png) + +Keyman Developer Server +: *update soon* + +List local URLs for Server +: *update soon* \ No newline at end of file diff --git a/developer/17.0/context/startup.md b/developer/17.0/context/startup.md deleted file mode 100644 index 4661f7d14..000000000 --- a/developer/17.0/context/startup.md +++ /dev/null @@ -1,18 +0,0 @@ ---- -title: Startup Window ---- - -![Startup window](/cdn/dev/img/developer/100/ui/frmStartup.png) - -When you start **Keyman Developer**, the -splash screen above is displayed for a short period of time while the -software loads. - -## Turning off the Splash Screen - -1. Start **Keyman Developer**. -2. From the Tools menu select Options. -3. Clear the Show Splash Screen checkbox in the General tab. -4. Click OK. - -The next time you start Keyman Developer, the splash screen will not appear. \ No newline at end of file From 525c95cda94715640c573a6d0ecb32549d94345e Mon Sep 17 00:00:00 2001 From: Meng-Heng Date: Mon, 25 Mar 2024 13:51:17 +0700 Subject: [PATCH 2/6] editing debug.md --- cdn/dev/img/developer/170/ui/Debug_Menu.png | Bin 0 -> 33717 bytes cdn/dev/img/developer/170/ui/Debug_Toolbar.png | Bin 0 -> 7373 bytes developer/17.0/context/debug.md | 4 ++-- 3 files changed, 2 insertions(+), 2 deletions(-) create mode 100644 cdn/dev/img/developer/170/ui/Debug_Menu.png create mode 100644 cdn/dev/img/developer/170/ui/Debug_Toolbar.png diff --git a/cdn/dev/img/developer/170/ui/Debug_Menu.png b/cdn/dev/img/developer/170/ui/Debug_Menu.png new file mode 100644 index 0000000000000000000000000000000000000000..61e749cfa6d2d79bae64b39b97d9e72c7883f4fe GIT binary patch literal 33717 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 Date: Mon, 25 Mar 2024 14:04:46 +0700 Subject: [PATCH 3/6] image links --- developer/17.0/context/keyboard-editor.md | 6 +++--- developer/17.0/context/model-editor.md | 2 +- developer/17.0/context/new-project.md | 2 +- developer/17.0/context/options.md | 8 ++++---- 4 files changed, 9 insertions(+), 9 deletions(-) diff --git a/developer/17.0/context/keyboard-editor.md b/developer/17.0/context/keyboard-editor.md index 98074a145..6bbed0552 100644 --- a/developer/17.0/context/keyboard-editor.md +++ b/developer/17.0/context/keyboard-editor.md @@ -165,7 +165,7 @@ editor shown within this view. ## On-Screen tab -![Keyboard Editor - On-Screen tab](/cdn/dev/img/developer/170/ui/OnScreenKeyboard17.0.png) +![Keyboard Editor - On-Screen tab](/cdn/dev/img/developer/170/ui/OnScreenKeyboard.png) 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 @@ -232,7 +232,7 @@ Auto-fill underlying layout ## Touch Layout tab -![Keyboard Editor - Touch Layout tab, Design view](/cdn/dev/img/developer/170/ui/TouchLayout_Design17.0.png) +![Keyboard Editor - Touch Layout tab, Design view](/cdn/dev/img/developer/170/ui/TouchLayout_Design.png) 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 +251,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](/cdn/dev/img/developer/170/ui/TouchLayout_Design_2-17.0.png) +![Keyboard Editor - Touch Layout tab, Design view closeup](/cdn/dev/img/developer/170/ui/TouchLayout_Design_2.png) ### Left sidebar controls diff --git a/developer/17.0/context/model-editor.md b/developer/17.0/context/model-editor.md index 2ea8e7ec1..2d6121fdc 100644 --- a/developer/17.0/context/model-editor.md +++ b/developer/17.0/context/model-editor.md @@ -21,7 +21,7 @@ editor are: The following image shows the first tab of the editor, the Details tab. Changes made to this tab are reflected immediately in the Source tab. -![Model Editor - Details tab](/cdn/dev/img/developer/170/ui/frmModelEditor_Details1.png) +![Model Editor - Details tab](/cdn/dev/img/developer/170/ui/frmModelEditor_Details.png) The fields here have corresponding definitions in the [.model.ts source file](../reference/file-types/model-ts), which can be seen in the **Source** tab: diff --git a/developer/17.0/context/new-project.md b/developer/17.0/context/new-project.md index aa727738d..ffbbc8864 100644 --- a/developer/17.0/context/new-project.md +++ b/developer/17.0/context/new-project.md @@ -2,7 +2,7 @@ title: New Project Dialog --- -![New Project dialog](/cdn/dev/img/developer/170/ui/frmNewProject1.png) +![New Project dialog](/cdn/dev/img/developer/170/ui/frmNewProject.png) Creates a new keyboard or lexical model project, optionally from a template or by importing from another source. diff --git a/developer/17.0/context/options.md b/developer/17.0/context/options.md index 9d1642f89..1a33a0350 100644 --- a/developer/17.0/context/options.md +++ b/developer/17.0/context/options.md @@ -4,7 +4,7 @@ title: Options Dialog ## General tab -![Options dialog - General tab](/cdn/dev/img/developer/170/ui/frmOptions_General1.png) +![Options dialog - General tab](/cdn/dev/img/developer/170/ui/frmOptions_General.png) The following options are configurable in TIKE in the **General** tab: @@ -50,7 +50,7 @@ SMTP Settings... ## Editor tab -![Options dialog - Editor tab](/cdn/dev/img/developer/170/ui/frmOptions_Editor1.png) +![Options dialog - Editor tab](/cdn/dev/img/developer/170/ui/frmOptions_Editor.png) Use tab character : Sets whether to use the Tab character or spaces for indents. @@ -76,7 +76,7 @@ Editor theme ## Debugger tab -![Options dialog - Debugger tab](/cdn/dev/img/developer/170/ui/frmOptions_Debugger1.png) +![Options dialog - Debugger tab](/cdn/dev/img/developer/170/ui/frmOptions_Debugger.png) Enable test window (from version 5.0) : Enables the Keyman 5-style Test window instead of the debugger. @@ -99,7 +99,7 @@ Automatically reset debugger before recompiling ## Character Map tab -![Options dialog - Character Map tab](/cdn/dev/img/developer/170/ui/frmOptions_CharacterMap1.png) +![Options dialog - Character Map tab](/cdn/dev/img/developer/170/ui/frmOptions_CharacterMap.png) Find character under cursor automatically : The character beneath the cursor in the edit window will be From 2825b21732934623745e91d659974e7cab712b12 Mon Sep 17 00:00:00 2001 From: Meng-Heng Date: Tue, 2 Apr 2024 15:32:49 +0700 Subject: [PATCH 4/6] section supdating --- developer/17.0/context/model-editor.md | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/developer/17.0/context/model-editor.md b/developer/17.0/context/model-editor.md index 2d6121fdc..ff595c2a1 100644 --- a/developer/17.0/context/model-editor.md +++ b/developer/17.0/context/model-editor.md @@ -37,16 +37,24 @@ Word breaker property in the [.model.ts source file](../reference/file-types/model-ts). Insert after word -: *update is coming* +: Many languages insert a space after a word. Some languages, like Thai or Khmer, do not use spaces. To suppress the space, you may set insertAfterWord to the empty string: + + ```keyman + punctuation: { + insertAfterWord: "", + }, + ``` + + [Read more](https://help.keyman.com/developer/17.0/guides/lexical-models/advanced/punctuation#toc-customizing-insertafterword) Quotation marks -: *update is coming* +: These are the quotation marks that surround the "keep" suggestion when it's displayed in the suggestion banner. [Read about Quotation marks here](https://help.keyman.com/developer/17.0/guides/lexical-models/advanced/punctuation#toc-customizing-quotesforkeepsuggestion). Right-to-left script -: *update is coming* +: Check this box to indicate that the lexical-model is for a right-to-left script. Language uses casing -: *update is coming* +: Tick this box for uppercase, capitalize, or any casing in the predicted word. Comments : This field corresponds to the first lines of comments in the model From d6f385427a65334491a9195dd9751729bf41f6de Mon Sep 17 00:00:00 2001 From: MengHeng <90595388+Meng-Heng@users.noreply.github.com> Date: Tue, 2 Apr 2024 15:34:04 +0700 Subject: [PATCH 5/6] Apply suggestions from code review Co-authored-by: Darcy Wong --- developer/17.0/context/new-project.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/developer/17.0/context/new-project.md b/developer/17.0/context/new-project.md index ffbbc8864..a0720f9c4 100644 --- a/developer/17.0/context/new-project.md +++ b/developer/17.0/context/new-project.md @@ -11,7 +11,7 @@ Creates a new keyboard or lexical model project, optionally from a template or b Creates a keyboard project that matches the folder structure used in the Keyman [keyboards repository](https://github.com/keymanapp/keyboards) and includes all [basic files](/developer/keyboards/) needed for a keyboard project. Clicking OK will open the [New Project Parameters dialog](new-project-parameters). ## LDML Keyboard -*update soon* +Creates a keyboard project that matches the folder structure used in the Keyman [keyboards repository](https://github.com/keymanapp/keyboards) and includes all [basic files](/developer/keyboards/) needed for a LDML keyboard project. Clicking OK will open the [New LDML Keyboard Project Parameters dialog](new-ldml-project-parameters). ## Import Windows Keyboard From d8ef956ee3d26208b71ea770b0ad6f9ab5ac4152 Mon Sep 17 00:00:00 2001 From: MengHeng <90595388+Meng-Heng@users.noreply.github.com> Date: Wed, 3 Apr 2024 13:52:35 +0700 Subject: [PATCH 6/6] Apply suggestions from code review Co-authored-by: Darcy Wong --- developer/17.0/context/model-editor.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/developer/17.0/context/model-editor.md b/developer/17.0/context/model-editor.md index ff595c2a1..8ed1cfcaf 100644 --- a/developer/17.0/context/model-editor.md +++ b/developer/17.0/context/model-editor.md @@ -45,10 +45,10 @@ Insert after word }, ``` - [Read more](https://help.keyman.com/developer/17.0/guides/lexical-models/advanced/punctuation#toc-customizing-insertafterword) +[Read more](../guides/lexical-models/advanced/punctuation#toc-customizing-insertafterword) Quotation marks -: These are the quotation marks that surround the "keep" suggestion when it's displayed in the suggestion banner. [Read about Quotation marks here](https://help.keyman.com/developer/17.0/guides/lexical-models/advanced/punctuation#toc-customizing-quotesforkeepsuggestion). +: These are the quotation marks that surround the "keep" suggestion when it's displayed in the suggestion banner. [Read about Quotation marks here](../guides/lexical-models/advanced/punctuation#toc-customizing-quotesforkeepsuggestion). Right-to-left script : Check this box to indicate that the lexical-model is for a right-to-left script.