Table of Contents
- Auto-correction and dictionaries
- Enable auto-correction
- How correction works
- Add your own words
- Other options
- Dictionary files (advanced)
- Ukrainian dictionary addition (v0.6.23)
- Personal words across PCs (v0.6.26)
- Custom replacements and spelling typos — v0.6.28
- Trailing spaces omitted by an editor — v0.6.31
- Unsaved settings — v0.6.33
- Compact dictionaries — v0.6.35
- Mouse Without Borders and verified snippets — v0.6.43
- Split joined words — v0.6.47
- Apostrophes in replacements — v0.6.60
Auto-correction and dictionaries
English | Українська
Auto-correction is experimental and disabled by default. It uses local English, Ukrainian and Russian dictionaries; only enabled languages with layouts in your cycle participate.
Enable auto-correction
- In Settings → General, enable Automatic correction (experimental).
- Open Settings → General → Correction options... and select languages.
- Enable their layouts in Languages → Default language cycle.
- Click OK, then Save in Settings.
Resize the dialog to enlarge all three personal dictionary editors. Extra height goes to the editors; the controls below move down. On smaller screens, scrolling keeps the controls accessible.
How correction works
Type a word and press Space. Correction starts immediately, without the old 250 ms inactivity wait. Keys typed during the operation are queued and replayed after it finishes.
| Typed | Result |
|---|---|
ghbdsn |
привіт |
lsv |
дім |
hj,bnm |
робить |
рщгіу |
house |
The target word must be in an enabled dictionary and meet the configured rules. Known words in the original language are protected: for example, ye is an English dictionary word, so reducing the minimum length to 1 does not force ye → ну. Use manual conversion for such cases.
If multiple target languages produce the same valid spelling, it is accepted and the selected-language order chooses the target layout. Different valid spellings are ambiguous and are skipped. This is layout correction, not spellchecking or translation.
Undo restores the original text and layout; a rejected correction is not repeated until KSwitcher restarts.
Add your own words
Enter the correct spelling, such as робить, in My dictionary → Ukrainian. Separate words with commas or new lines. Do not enter the wrong-layout form hj,bnm, numerical ranks or a wrong=correct mapping. Click OK, then Save in Settings.
The English, Ukrainian and Russian fields add valid words to their respective dictionaries. Never correct these words is a separate comma-separated exclusion list. These fields have different purposes.
Other options
| Field | Meaning |
|---|---|
| Frequency rank limit | 0 uses the entire dictionary; a positive value restricts candidates to that rank or better |
| Minimum word length | 1–32 letters; default 3 |
| Excluded applications | Comma-separated process names where correction is disabled |
| Characters before / after a word | Allowed surrounding punctuation, entered without spaces or separators; preserved in the result |
Punctuation inside the wrong-layout text can represent a letter: the comma key in hj,bnm becomes б. The resulting word is checked after conversion. Surrounding punctuation follows the separate before/after settings. URLs, email addresses, digits and unsafe case patterns are not ordinary correction candidates. Code editors, terminals and password managers are excluded by default.
Dictionary files (advanced)
Prefer My dictionary for adding personal words. Open dictionary folder opens the underlying UTF-8 files. Each line contains a lowercase word, a tab and a positive frequency rank, for example абонент<TAB>33717 (replace <TAB> with a real tab).
The rank is static, not learned from your usage; a smaller number means a more common word. The loader sorts entries and removes duplicates in memory, so manual alphabetical sorting is no longer required. Invalid row formats or ranks still cause errors. After editing, click OK → Save to reload. Back up custom file edits before replacing dictionary files manually.
Dictionary data comes from FrequencyWords under CC BY-SA 4.0; the archive includes sources and license notices.
Personal words must contain 1–32 letters of the selected language. Ukrainian і is accepted; visually similar Latin i belongs in the English dictionary and is rejected in Ukrainian. This is a language check, not a minimum-length error.
Ukrainian dictionary addition (v0.6.23)
The bundled dictionary now includes поточні at supplemental rank 50001. With Ukrainian enabled in dictionaries and the layout cycle, Gjnjxys and Поточны can become Поточні . Already correct input stays unchanged. Press Space to trigger correction. The default frequency limit 0 includes this entry; a positive limit below 50001 excludes it.
The updater preserves existing dictionaries. If the word is missing after upgrading, add поточні under My dictionary → Ukrainian, then OK → Save. Personal words work at any frequency rank limit. Excluded applications, minimum length and ambiguity checks still apply.
Personal words across PCs (v0.6.26)
Optional OpenBao synchronization includes My dictionary, separately for each language, Never correct these words, excluded applications and correction preferences. Click OK, then Save in Settings before syncing. Independent word additions/removals merge by membership. Dictionary files themselves remain local.
Custom replacements and spelling typos — v0.6.28
Two optional modes in Settings → General → Correction options... extend layout correction. Both are off by default and require the main Automatic correction (experimental) checkbox to be enabled.
- Use custom replacements: enter one
typo=correctionpair per line, for exampleпрвиіт=привітorhelo=hello. Entries are normalized to lowercase; duplicate source words are rejected. The source must contain 1–32 letters. From v0.6.47, the correction may contain several words separated by single ordinary spaces, up to 32 characters including spaces. Both sides must use the same supported language. From v0.6.60, corrections also allow apostrophes between letters; other punctuation is rejected. Repeated spaces, tabs and line breaks are rejected. Explicit pairs take priority over dictionary recognition, including already valid words, and do not require dictionary membership or satisfy the frequency limit. - Correct spelling typos using dictionaries: checks unknown words in the current language after no layout correction is found. It accepts exactly one dictionary candidate reachable by inserting, deleting or replacing one letter, or swapping two adjacent letters. Both input and target must have at least four letters. Multiple candidates leave the input unchanged, even if a frequency limit would exclude one of them. Personal dictionary words participate. This is word-level spelling correction, not grammar or sentence-context correction.
Both modes run after Space, preserve surrounding punctuation and an initial capital, and keep the current layout. The selected dictionary languages, enabled layout cycle, minimum input length, excluded applications, never-correct list, protected fields and Undo behavior apply. ALL CAPS, mixed-case identifiers, numbers, URLs and email addresses are skipped. A replacement is applied once, without chaining. Click OK, then Save in Settings; pairs and switches are included in settings export/import and synchronization. Undo restores the original word and suppresses its correction until restart.
Trailing spaces omitted by an editor — v0.6.31
Viber can expose Ghbdsn as the selected text but put only Ghbdsn on the clipboard. From v0.6.31, KSwitcher can recover one or more trailing ordinary spaces when Windows accessibility confirms that the actual selection is exactly the clipboard text followed by those spaces. Recent-text and previous-result verification still require the complete expected text. This also applies to automatic correction, repeat conversion and Undo.
The same focused control and selection are checked again before replacement. Recovered replacements are read back even with Write log disabled. Unknown or mismatching readback does not record a previous result or switch the input layout. Missing letters, tabs, line breaks, empty clipboard text and inaccessible/ambiguous selections are not reconstructed. If verification cannot establish the intended range, recent-text conversion remains cancelled. No new setting or shortcut is required.
The reproduced Viber issue is clipboard trimming, not proof that the space failed to reach the editor. Enabling logs includes a Copy: trailing spaces verified via accessibility event when recovery succeeds. General browser-editor and clipboard limitations still apply.
Unsaved settings — v0.6.33
Closing Settings with the close button, Alt+F4 or Cancel checks for unsaved changes, including changes accepted with OK in Auto-correction or OCR options.
The Unsaved settings prompt offers Yes (save, apply and close), No (discard and close), and Cancel (keep editing; the default). Unchanged or reverted settings close without a prompt. Invalid edits can be discarded. If saving fails, the window stays open with the draft intact.
OK in an options dialog still updates the Settings draft. Click Save in Settings, or Yes in the close prompt, to apply it. Automatic saving, shortcuts and defaults are unchanged. Snippets and Sync retain their separate save flows.
Example: add стабілізатор to My dictionary → Ukrainian, click OK, then Save in Settings (or Yes when closing). Type cnf,skspfnjh with English input active and press Space. The comma key corresponds to Ukrainian б. Ukrainian and its layout in the cycle must be enabled, and the input field must support correction. A word visible in the options field alone has not yet been applied.
Compact dictionaries — v0.6.35
When auto-correction is enabled, selected dictionaries load before typing and the input predictor and worker share one immutable copy. All three bundled EN/UK/RU lookup tables together use about 0.90 MiB of payload memory, excluding allocator/process overhead. All 140,939 words and their frequency ranks are retained; custom dictionaries may use more memory.
The editable UTF-8 word/TAB/rank files and My dictionary stay compatible. Unsorted additions, duplicate entries (lowest rank wins), frequency limits and OK → Save reload still work. No dictionary migration is required. Searches remain local, without disk access from the keyboard lookup.
Mouse Without Borders and verified snippets — v0.6.43
Update KSwitcher on both PCs, especially the computer sharing its physical keyboard. KSwitcher now lets downstream keyboard hooks route events before processing them and ignores consumed events on the source computer. Delivered remote input still supports shortcuts, recent typing, automatic correction and snippets. An older source-side instance can still start duplicate operations and publish temporary clipboard markers. Closing that instance is a temporary workaround until it is updated.
Outside Far Manager (see the v0.6.45 exception in Snippets), snippets require accessibility verification of the selected trigger and pasted replacement even with Write log disabled. Unavailable initial verification stops expansion before paste. Incorrect or unavailable readback stops subsequent cursor and {enter} actions. Incorrect inserted text can remain for inspection; it is not automatically submitted or blindly replaced again. Buffered typing resumes. Syntax, default settings and shortcuts are unchanged.
Identical clipboard relays are accepted only after target-owned selection contents have been observed, with matching text and editor selection metadata. Unicode allocation padding and format order do not affect comparison. Different contents, missing metadata and unobserved foreign copies remain rejected. Own plain-text replacement payloads also tolerate identical relays. Clipboard changes during paste stop subsequent actions. Before selection, snapshot capture may retry up to three times if the clipboard changes and input context remains unchanged. Restoration does not overwrite unrelated newer clipboard contents.
Click a warning notification to open Logs. Enable Write log for incident details, reproduce once and copy the complete operation. Rejected copies now include the local sentinel, target/current text, owner and sequence numbers. Review captured text before sharing.
Regression tests exercise a real downstream forwarding hook, normal snippet expansion and suppression of Enter after an incorrect paste. Live validation on two computers with both installations updated remains outstanding. Existing screenshots still apply; no control layout changed.
Split joined words — v0.6.47
In Settings → General → Correction options..., enable Use custom replacements and add:
мамамила=мама мила
Click OK → Save, then type мамамила and press Space: the result is мама мила . (Мамамила)! becomes (Мама мила)! . Undo restores the original joined word and suppresses that source until restart. Typing the next word immediately is supported. The source must be one word; this does not match multiple already-separated input words or automatically detect every missing space.
The main Automatic correction (experimental) option must also be enabled. Language selection, enabled layouts, minimum input length and exclusions still apply. Options normalize case and trim whitespace around each side of =; spaces inside the correction must be single ordinary spaces. These pairs belong in the replacement field, not My dictionary.
If the older “different lowercase words of 1–32 letters” warning appears for a phrase, update KSwitcher to v0.6.47 or newer. Update every PC before synchronizing phrase replacements: older clients reject spaces in replacement pairs. Existing single-word pairs need no migration.
Apostrophes in replacements — v0.6.60
In Settings → General → Correction options..., enable Use custom replacements and enter ревю=рев'ю. Click OK → Save, then type ревю with Ukrainian input and press Space to get рев'ю. The main automatic-correction option, Ukrainian dictionary/layout and normal correction eligibility rules must be enabled.
The correction accepts ', ’ and ʼ only between letters. Their exact form is preserved, including after saving or exporting/importing settings. Multiple words remain supported, for example моєревю=моє рев’ю. The 32-character limit includes spaces and apostrophes. Leading/trailing or adjacent apostrophes, apostrophes next to spaces, other punctuation and mixed-language pairs are rejected. The source still contains only 1–32 letters; this change does not add apostrophes to personal dictionary entries or source words.
Initial capitalization, surrounding punctuation, the current layout and Undo follow the existing replacement rules. No settings, shortcuts or defaults changed, and existing screenshots remain applicable. The former “Single spaces between correction words are allowed” warning on ревю=рев'ю indicates an older version: v0.6.47 added spaces but did not allow apostrophes. Upgrade to v0.6.60 or newer. Update every synchronizing PC before sharing apostrophe pairs; older clients reject those settings. Existing pairs need no migration.
