Skip to content
WM KeyboardWM Keyboard
Accessibility

Modes & the symbol row

Letters, symbols, numbers: how modes work and how the symbol row is arranged.

“Mode” means two different things on this page: the letters/symbols layer under your thumb, and the keyboard-wide profile (theme, tools, symbol row) that switches itself on for a given app or field. Both are covered here, along with the symbol row that sits between them.

The symbol page open over a message field, with the second symbol page one tap away.

The symbol page open over a message field, with the second symbol page one tap away.

Tapping ?123 steps through the symbol pages; ABC always jumps straight back to letters, from any page. The cycle is short and doesn’t grow a third stop:

  • Letters → Symbols. ?123 on the letters layout opens the first symbol page (digits, @, #, currency, brackets, punctuation).
  • Symbols → Symbols 2. The key relabels to =\< at 1.5× width; tapping it opens the second page (math and typographic symbols, a dead-key accent key, more punctuation).
  • Symbols 2 → Symbols. The same corner now reads ?123 again and goes back one page: there’s no page 3, it just bounces between the two.
  • Letters key wins from anywhere, including from the Fn layer: pressing ABC while Fn is active leaves Fn entirely and drops any Fn lock, rather than returning to whatever Fn was layered over.

Pressing ?123 to leave letters also drops any in-progress handwriting ink on the writing surface, since letters is the only layer that hosts it. The keyboard’s height doesn’t jump when you cycle: its row count is fixed to the tallest of the letters, symbols, symbols-2 and Fn layouts, so shorter pages pad rather than resize.

WM KeyboardKey pressHold ?123 for numpad

Hold ?123 for numpad turns a long-press on ?123 into a shortcut straight to the number pad, skipping the symbol pages entirely. It’s off by default: a quick tap always cycles the layers as described above regardless of this setting; only the long-press behavior changes.

WM KeyboardLayout & sizeSymbols layerGo back to the letters

Most trips to ?123 are one character long: a full stop, a question mark, a comma. Go back to the letters notices that and returns you to the letter keys as soon as you type one of them, so you don’t press ABC yourself every time. It’s off by default, and the characters that trigger it are yours to edit (they start as ! ? . , ; :) in Characters that go back just below the toggle.

Digits stay off the list on purpose, because typing “12” is exactly when you want the symbols to stay. Only single-character keys count either way, so a .com key won’t send you back, and both symbol pages behave the same. Full detail is in the Layout & size reference.

The emoji panel has had the same setting for a while, under Emoji → Return to keyboard after inserting.

WM KeyboardRows & barsSymbol row

The symbol row is a strip of one-tap characters and snippets that sits above the key grid, independent of the ?123 pages below it (useful for a character you reach for constantly without leaving the letters layout). It’s off by default.

Screenshot pending
The symbol row above the key grid, with its set picker open.

Five built-in sets ship with it, and every one is enabled by default: Email (@, common domain endings), Web (https://, www., path characters), Coding (brackets, operators, ->, =>, a tab key), Math (±, ×, ÷, fractions, Greek letters) and Punctuation (the set the row opens on by default). A chip at the row’s left edge opens a dropdown of whichever sets you’ve enabled, but only when more than one is enabled: with just one, there’s nothing to switch between.

WM KeyboardRows & barsSymbol sets

Enable or disable sets with the checkboxes in Symbol sets: at least one has to stay checked. Tap a set’s edit icon to rename it or rewrite its characters (entries are space-separated, so a snippet like -> counts as one entry same as a single character); editing a built-in set doesn’t touch the shipped version, it stores your edit as an override under the same ID, so anything that references that set (including a keyboard mode’s symbolSetIds) keeps working unchanged. Deleting your override (the icon reads Reset rather than Delete for a built-in) restores the original chars. New symbol set creates one from scratch.

The row hides itself automatically whenever the special-characters panel or another full-bleed panel is open: a second row of symbols on top of a symbols panel would just be noise.

WM KeyboardRows & barsRow order

Three rows can stack above the key grid: the emoji row, the toolbar and the symbol row. By default they run top to bottom as emoji, toolbar, symbol row: emoji sits on top because it’s reached for more often. Reorder the emoji and symbol rows with the up/down arrows in Row order; the toolbar has no arrows of its own, but moving the row next to it still swaps it out of place, since each arrow trades places with whatever is in the neighboring slot. A hidden row (symbol row off, emoji row set to off or button-only) just keeps its slot empty rather than collapsing the stack; turning it back on doesn’t change where it lands.

This is a global setting. A keyboard mode (below) can turn the symbol row on or off and change which sets it offers, but it can’t reorder the rows: row order is the same everywhere.

Beyond the global settings above, WM Keyboard can carry a different profile into different apps and fields (its own theme, its own pinned toolbar tools, its own symbol row setup) and switch automatically as you move between them.

Screenshot pending
The Modes tool: Automatic at the top, then one row per mode with its auto-activation summary.
WM KeyboardKeyboard modes

A mode can override the emoji row’s presentation, whether the symbol row shows and which sets it offers, the theme, and the toolbar’s pinned tools and toolbox order; anything left unset just inherits the global value. Six modes ship by default:

ModeChangesActivates on
PasswordsEmoji off, symbol row off, toolbar replaced with password generator, clipboard, settingsPassword fields
EmailSymbol row on (Email, Punctuation sets)Email fields
BrowserSymbol row on (Web set)URL fields
ChatEmoji row always on, emoji/GIF/sticker/voice appended to the toolbarA text field in any of 15 messaging and social apps (WhatsApp, Messenger, Instagram, Telegram, Signal, Discord, Facebook, Facebook Lite, TikTok, Snapchat, Viber, LINE, KakaoTalk, WeChat, Beeper), plus any notification reply box
WritingToolbar replaced with AI, text editing, voice, clipboard, emoji; symbol row on (Punctuation)Keep, Docs, Samsung Notes, Word, OneNote, Obsidian, Notion, Evernote, Joplin (plus mail app bodies), and any text field
CodingSymbol row on (Coding, Math sets)Termux, Acode, RK Editor, Spck

Passwords and Writing replace the toolbar outright instead of adding to it: nothing that opens a network-facing panel belongs next to a password box, and Writing’s own pins want the bar to themselves so the global Settings shortcut doesn’t ride along into a writing session. Chat appends its tools to your existing pins instead.

If an existing install already had its own mode list saved before Chat and Writing shipped, both are appended automatically on upgrade, but a mode you’ve since deleted stays deleted, it isn’t re-added. A later round topped up the Chat mode itself the same way, adding the nine apps it didn’t have yet (Facebook, Facebook Lite, TikTok, Snapchat, Viber, LINE, KakaoTalk, WeChat, Beeper) and the notification-reply field type to a stored copy. An app you’d already bound to another mode is left where it is.

Tap a mode in Keyboard modes to open its editor: a name, an icon, then What this mode changes: Emoji row (Inherit/Off/Button/Row), Symbol row (Inherit/On/Off), a theme picker with a Clear button, and toggles to give the mode its own pinned toolbar tools, toolbox order and symbol sets, each with its own reorderable chip list. Below that, Activate automatically for holds the field-type chips and app picker that decide when the mode kicks in. Edits save immediately as you make them. There’s no separate save button, though a brand-new mode isn’t written to disk until its first edit. Only the six built-in modes have anything to reset to; a mode you create from scratch has no default to fall back on.

WM Keyboard re-checks which mode should be active every time you focus a field. A field can match more than one kind at once (a password box always adds Password, on top of whatever else it reports), and the built-in field-type categories used here (Password, Email, URL, Number, Phone, Text, Notification replies) are deliberately narrower than the field-kind detection covered in The keyboard adapts to the field. Text in particular means plain free-text only: a password field also reports as text-capable at the OS level, but is explicitly excluded from the Text category, so a mode bound to Text (a chat composer, a document body) can never take over a login form.

A mode’s apps list and field-type chips combine as an AND when both are set: a mode bound to an app and a field type needs both to match. Set only one and that alone is enough. Set neither and the mode never activates on its own: it shows as “Manual only, from the Modes tool” in its settings-list subtitle and is only reachable by picking it yourself.

Notification replies is the exception to that AND. The inline reply box in the notification shade belongs to the system UI, so the package the keyboard sees there is the shell’s rather than the app you’re answering, and an app binding could never match it. A mode carrying that chip matches the reply box on its own, apps ignored. That’s why the shipped Chat mode carries it alongside Text.

When more than one mode’s bindings match, the one that names a field type wins over one that only names apps, so a password box inside a coding app still gets the Passwords mode, not Coding. Beyond that, the first match in your mode list wins.

You can also override the automatic pick from the keyboard itself: open the Modes tool (from the toolbar or toolbox) for a list starting with Automatic — Follow each mode’s app and field bindings, then one row per mode. Tapping a mode pins it manually; that pin lasts only until you switch to a different app, then automatic resolution takes back over.

Screenshot pending
The Modes tool open, showing the manual override list.
WM KeyboardKeyboard modesRearranging tools

When a mode prescribes its own pinned toolbar tools or toolbox order, dragging a tool on the keyboard while that mode is active needs somewhere to go. Drags edit the active mode, on by default, sends that drag into the mode itself, so the rearrangement sticks specifically for apps that resolve to that mode while every other app keeps its own arrangement. The first time this happens you’ll see a one-off toast naming the mode: for the Chat mode, for example, it reads “Saved for Chat mode — other apps keep their own tool order.”

Turn the toggle off and drags always edit the global tool order instead, but if the active mode still prescribes its own list, that list keeps winning on screen regardless of what you just dragged, since the mode’s fixed list is applied on every recomposition. In other words, turning this off doesn’t make a mode’s tool order editable from the keyboard; it just stops on-keyboard drags from targeting modes at all.

A mode with no pinned tools or toolbox order of its own is unaffected either way: there’s nothing for it to own, so drags always go to the global order.

These settings live on four separate screens.

WM KeyboardKey press
SettingDefault
Hold ?123 for numpadOff
WM KeyboardLayout & size
SettingDefault
Go back to the lettersOff
Characters that go back!?.,;:
WM KeyboardRows & bars
SettingDefault
Symbol rowOff
Enabled symbol setsAll 5 built-ins
Row order (emoji / toolbar / symbol)Emoji, Toolbar, Symbol
WM KeyboardKeyboard modes
SettingDefault
Keyboard modes list6 seeded modes
Drags edit the active modeOn
  • A custom or hand-edited layout can’t get stuck on a symbol page. If a symbols/symbols-2/Fn layer in a layout file has no key that leads back to letters or symbols, WM Keyboard silently appends an ABC key to it so the layer always has a way out.
  • Picking a set from the row’s chip usually becomes the new default: it’s written back to the same setting the row opens on next time, so there’s no separate settings entry for it beyond the enabled-sets list. The one exception: if the active keyboard mode prescribes its own symbol sets, a pick from the chip is session-only and reverts the moment you leave that app or mode, so it never overwrites the mode’s own list.
  • A mode’s symbol-row override only sets on/off and which sets: it can’t reorder the emoji/toolbar/symbol stack, which stays global no matter which mode is active.
  • The manual mode pick is never saved. It lives only in the running keyboard service and resets the instant the focused app’s package changes: closing and reopening the keyboard in the same app keeps it, switching apps doesn’t.
  • No edition split. Symbol pages, the symbol row and keyboard modes all work the same on both the full and lite builds.

For how a field’s type is detected in the first place, see The keyboard adapts to the field. For the full settings screens referenced above, see Rows & bars, Keyboard modes and Key press.