-
Notifications
You must be signed in to change notification settings - Fork 4
Gestures
Past tapping and long-pressing single keys, WM Keyboard has a few drag gestures that move across or along a key. The spacebar, backspace and the volume rocker each do something different when you swipe instead of tap. This page covers what those drags do once they're moving. Where a gesture belongs to another page, it links there rather than repeating it.
Typing / Gestures
The spacebar has two independent swipe slots: Quick swipe on the spacebar (default Language) and Press and hold, then swipe (default Cursor). Which one a drag resolves to depends on when it starts relative to the long-press delay, not on how far it travels. The full timing engine, the language-switch behavior and the hold-drag picker list all live on Switching languages. This page covers the other two things a slot can be set to: Cursor and Numpad.
Each slot's options are Nothing, Language, Cursor or Numpad. A tap with no movement always types a space, whatever either slot is set to.
Setting Press and hold, then swipe to Cursor or Numpad costs one thing: holding the spacebar no longer opens the hold-drag language picker. A hold can only mean one thing, and that slot is where you said what it means. The picker is still on the 🌐 key's long press and on a quick swipe set to Language.
Set a slot to Cursor and the drag moves the text cursor instead of typing. The caret steps one character for every 16 dp of horizontal travel, in whichever direction you drag. That distance is a slider of its own, Cursor speed, which sits under the two swipe pickers and runs 8–32 dp. Shorter moves the caret faster. Any composing text in progress (a word mid-transliteration, say) commits first, without autocorrect, so the cursor lands where you can see it rather than jumping past a word that was still being corrected.
Typing / Gestures / 2-D cursor touchpad
2-D cursor touchpad (off by default) turns the same drag into a touchpad. A vertical component now steps the cursor up and down through the text too, on the same Cursor speed distance. Both axes send real arrow-key events rather than computing a raw text offset, so vertical movement follows whatever line-wrapping the app is doing instead of guessing at it. The toggle only appears once one of the two swipe slots above is set to Cursor, and Cursor speed appears beside it.
The same drag selects text instead of moving through it while selection mode is on, on either axis. Turn the mode on from the toolbar's Selection mode tool, or hold that tool down and scrub the spacebar with your other thumb. A Shift you pressed yourself does it too, lock included, exactly as Shift+Arrow would: lock Shift, then scrub. A Shift the keyboard armed by itself at a sentence start doesn't count, so an ordinary drag never selects behind your back.
Typing / Gestures / Swipe down to hide the keyboard
A straight downward drag on the spacebar dismisses the keyboard, once it clears a short threshold and is steeper than it is wide. It's off by default, so a stray vertical wobble mid-drag never closes the keyboard on you.
The 2-D cursor touchpad, when it's on, claims the vertical axis ahead of this only once a drag has actually resolved to the Cursor action. Hold time decides that resolution, same as any other spacebar swipe. With the defaults (quick swipe = Language, press and hold then swipe = Cursor), a downward flick fast enough to clear the hide threshold before the long-press delay elapses still belongs to the quick-swipe slot, so it dismisses the keyboard. Only a drag held past that delay hands the vertical axis to the touchpad.
Note
There's a second, separate Swipe down to hide toggle for the toolbar strip, under Appearance → Toolbar. Two words shorter in the settings list, and a different element it acts on: a downward swipe on the toolbar, not on the spacebar. The two are independent switches, and both ship off.
Typing / Gestures / Swipe down to type the hint
Every key with press-and-hold characters shows the first of them in its corner: the 1 on q, the accents on a vowel, the currency signs on $. With this on, a short, quick swipe straight down on the key types that corner character outright, with no hold to wait out. It's the same character the popup would put first, on any key that has one, on every layer. Off by default.
The swipe has to be all four things at once: down (within about 30° of straight down), short (between half a key's height and two of them), straight, and quick (under a quarter of a second from touch to lift). A drag that misses any of those is whatever it always was, so a slow pull down is still a glide and a tap that drifts is still a tap. The keys with a drag of their own keep it: the spacebar's swipes, backspace's delete swipe, the modifier and ?123 drags, and a kana key's four flick arms.
The one real cost is with glide typing. A very fast glide of a short word whose stroke runs straight down between neighbouring rows, "ed" for instance, can read as a flick and type the hint instead. The timing rule is what keeps that rare, since even a short glide usually takes longer than a flick, but it's why the setting ships off.
Typing / Gestures / Swipe to add 's
The apostrophe is rarely a key of its own, so a possessive usually costs a long press and a tap. Pick a key here, comma, full stop or a real apostrophe key if the layout has one, and a short straight swipe from that key to s adds 's to the word before the cursor: "developer" becomes "developer's". Off by default.
It's a gesture in its own right, not a glide-typing feature. It works after a tapped word, after a glided one, and on the word you're still typing, with glide typing on or off. A space after the word moves behind the 's, so you get "developer's " and never "developer 's". The chosen key still types its own character when you press it, and a stroke that isn't the swipe still lands as the tap it began as.
The shape is what separates it from a glide: short and straight, its path no more than 1.6× the straight line between the two keys. A real word glided from the same key to s wanders further than that, so it decodes as a word. The spacebar can't start this swipe, since a stroke off the spacebar is always a spacebar swipe, and it's English only.
Set a slot to Numpad and the numeric keypad panel opens the moment your drag crosses the initial touch slop. There's no further distance to cover. The swipe triggers the panel and then goes inert until you release, and the release types nothing. It's the same panel that ?123's long-press and the toolbar's Numpad tool open. See Text editing for what's on it.
Typing / Gestures / Spacebar long press keys
Type the characters you want into this field, with a space between each one, and holding the spacebar opens them in the same popup a letter key's accents use. Emoji, punctuation, a signature character, anything you can type into the box. Leave the field blank (the default) and nothing changes.
The field is deliberately blunt about what it costs: keys you put here take the spacebar's long press over completely. The hold-drag language picker no longer opens, and neither does the space repeat. Both of those are still reachable elsewhere. The 🌐 key opens the picker on a hold and cycles on a tap, a spacebar swipe still switches language, and a second tap still types a second space. Clear the field to get the hold back.
Swipes are untouched. The popup only opens on a hold that stays still, so a quick swipe, a hold-then-swipe and the swipe down to hide all behave exactly as they did.
Once the spacebar carries keys, it draws the first one small in its top right corner, the same corner hint every other key uses. That hint is the one thing on the keyboard that says the long press changed, so leave Press and hold hints on if you want it. It lives on the Key press screen and ships on.
A layout can carry its own set instead. Open a layout in the layout editor, tap the spacebar, and the alternates fields are there like on any other key. The setting comes first in the popup, and the layout's own keys follow it.
Typing / Backspace
Swipe to delete (on by default) lets a leftward drag on ⌫ take out more than the one character a press does. Backspace treats tap, hold-to-repeat and this swipe as one gesture. A press that stays still starts the normal hold-to-repeat once Time before a key repeats has elapsed, exactly as described on Keys & typing basics. Moving left past a small slop cancels that repeat and switches to the swipe.
Swipe deletes picks what one step of that swipe takes off:
- Words (the default) clears a sentence in one pull.
- Characters walks back a letter at a time, which is the finer tool when the fix is inside a word rather than at the end of it. A whole multi-part emoji, or a whole conjunct in a script that asks for it, still counts as one character, the same as a backspace press does.
Each step costs a certain amount of leftward travel. In Words mode the cost shrinks as you go, so clearing a whole sentence is one long pull rather than a series of flicks. The first word costs the most: Word delete distance, 72 dp by default and adjustable 32–120 dp in the same Backspace group. Every word after it costs less, on a fixed curve derived from that one number, down to a floor past which extra words get no cheaper. In Characters mode there is no curve at all: every character costs the same Character delete distance, 20 dp by default and adjustable 8–48 dp, so the count stays easy to follow.
Show what you will delete (on by default) makes the swipe select the text instead of deleting it as the finger passes over it. The highlight grows a word or a character at a time, so you can see exactly how far the gesture has got, and the delete happens when you lift your finger.
While the highlight is up the swipe is still undoable: dragging back to the right shrinks it a step at a time, and dragging all the way back to where the swipe started leaves the text alone entirely. The gesture retraces its own steps, so a word that cost a short pull on the shrinking curve gives itself back for the same short pull.
Turn the setting off to get the older behaviour, where each word or character goes the moment the swipe passes it. Deleted text cannot be given back, so dragging right only re-anchors the gesture, and the next word costs the full first-word distance again instead of picking up where the shrinking curve left off. A few editors cannot hold a selection while the keyboard drives it, and a search box drawn by the keyboard itself (emoji search, for one) has no cursor to select with. The swipe falls back to deleting as it goes in both cases, with no setting to change.
One step deletes any trailing whitespace plus the run of same-kind characters behind the cursor, where letters and digits count as one kind and punctuation as another. That's what stops a step from stalling on a run like ... or a string of dashes. It also means a word glued to punctuation (a contraction, a trailing comma) can take more than one step to clear, since the letters and the punctuation are different kinds and each gets its own step.
A few things a word-delete step does specially, rather than falling back to plain character deletion:
- If there's an active text selection, one step clears the whole selection instead of doing word math.
- If a word is still mid-composition (a transliteration buffer, for a phonetic layout), one step clears the entire composing word in one go.
- Inside a panel's own search box (emoji, clipboard or dictionary search, a plugin's text field, the typing-test box) or mid-stroke on a handwriting panel, word deletion steps down to one character at a time. Word-deleting the field hidden behind the overlay would be invisible and wrong, so it doesn't try.
See Sound & vibration for the Vibrate on delete swipe haptic that ticks on each word this gesture removes.
Drag from Shift onto a letter and lift, and you get the capital: one movement instead of a shift tap and then the letter. A band stretches from the key you started on to your fingertip while you drag, drawn in the glide typing trail's colour and width. It stays a straight line rather than tracing the path your finger took, because the chord is the two keys at its ends and the route between them means nothing.
Ctrl, Alt and Meta keys work the same way, and send the combination to the app: Ctrl to C copies, Ctrl to Z undoes, Ctrl to Enter sends the message in the apps that bind it. Shift does that too on any key that isn't a letter, so Shift to Enter is a real Shift+Enter and Shift to Tab tabs backwards.
A capital dragged out of Shift is typed, not sent as a key press, so the word still gets its suggestions, its autocorrect and its spot in the learned words. Shift's own tap, double-tap for caps lock, and press-and-hold all still work exactly as they did.
Every layout has a Shift key. None of the shipped ones have a Ctrl, Alt or Meta key, so add one from the layout editor, or import a layout that already carries a modifier row.
A few rules keep the drag from firing when you didn't mean it:
- Lift outside the key grid and nothing happens. That's the slide-away cancel every key has.
- Wander off the modifier and back onto it, and it acts like a plain tap: Shift arms, Ctrl arms, and a second tap locks either.
- Keys that only change what the keyboard shows have no combination to send, so landing on ?123, the emoji key or the globe does nothing. Nor does Shift onto Ctrl, or either onto itself. (Dragging from ?123 is a gesture of its own, below.)
- A letter your device's keyboard map can't name (Bengali letters, currency signs, combining marks) sends nothing under Ctrl rather than typing itself. Shift is unaffected by this, since it types the character rather than sending a key press.
Drag off ?123 and the symbols come up under your finger. Lift on one and it types, and the letters are back before you've moved your hand. It's the quick way to drop in a single symbol or a piece of punctuation without two trips through the layer key, and it's the gesture the stock Android keyboards have had for years.
ABC works the same way in the other direction. Drag off it and the letters show for as long as you hold, so a layer of your own can type one letter without leaving. Starting from the ?123 key of the first symbols page reaches the second one, where the arrows and the maths signs live, exactly as a tap on it would.
The drag works from a panel too. Put ?123 or ABC on the text editing pad, the Numpad or any other panel layout, drag off it, and that layer shows over the panel for as long as you hold. Lift and the panel is back, with the emoji or clipboard list still where you left it. A panel isn't one of the keyboard's layers, so ABC on a panel always shows the letters.
While you drag, the key under your finger lights up the way a pressed key does, and a straight band stretches from the key you started on to your fingertip, the same one the modifier drag draws.
Hold still over a key and its press-and-hold popup opens. Slide onto the character you want, lift, and that's what you get. This popup always follows your finger, whatever Choose without lifting is set to, because lifting is what ends the gesture: a popup waiting for a separate tap could never be answered here.
Letters arrive lowercase, since the Shift key is back on the layer you came from. Shifted letter on press and hold (Key press → Press and hold shortcuts, off by default) puts each letter's capital at the end of its popup, which is how you get one out of this gesture.
Nothing about the keyboard's own layer changes while you hold. A tap on ?123 still switches layer and stays there, and a press that never travels is a tap.
A few rules keep the drag from firing when you didn't mean it:
- Lift outside the key grid and nothing happens, the same slide-away cancel every key has.
- Lift on a key that only moves the keyboard around, such as the ABC key now sitting where you started, Shift, the emoji key or the globe, and nothing is typed. Sliding back to where you began is how you cancel.
- An ABC key on the letters layer has no other layer to show, so a drag off it does nothing at all.
- If you held the key long enough to open its own popup first (a ?123 key with alternates of its own), that popup keeps your finger and the layer stays where it is.
Typing / Volume keys
Volume keys move the cursor (off by default) repurposes the hardware volume rocker while the keyboard is on screen: volume down moves the cursor one character left, volume up moves it one character right. Holding a volume key repeats for free, riding Android's own hardware key-repeat rather than a separate timer. Both the press and the release are swallowed, so the app underneath never sees a stray volume keypress. It applies only while the keyboard is actually shown. Once it closes, the volume keys go back to controlling volume. With Selection mode on, or with a Shift you pressed yourself still up, each press selects a character instead of stepping past it, so the rocker drags a selection out.
Release the keys while audio plays (on by default) hands the volume keys back to ordinary volume control the instant something is playing: music, a video, a podcast. Typing a reply never costs you the ability to turn the sound down. The keys return to the cursor the moment playback stops. This is re-checked on every key press rather than latched once, so starting or stopping playback mid-typing takes effect immediately. Turn it off if you'd rather the volume keys always moved the cursor while the keyboard is open, playback or not.
A few more drags belong to features big enough to have their own page, so they're only linked here:
- Language switching (the spacebar's Language swipe, the hold-drag picker list, and the globe key's tap-vs-long-press) is fully covered on Switching languages.
- Swiping across the letters to write a whole word, or to draw handwriting instead, is one setting with two outcomes. See Glide typing for the default word-swipe mode and Handwriting for drawing ink over the keys.
A printable table of every gesture on one page lives at Gesture cheat sheet.
Typing / Gestures
| Setting | Default |
|---|---|
| Quick swipe on the spacebar | Language |
| Press and hold, then swipe | Cursor |
| 2-D cursor touchpad | Off |
| Cursor speed | 16 dp (8–32 dp) |
| Swipe down to hide the keyboard | Off |
| Swipe down to type the hint | Off |
| Swipe to add 's | Off |
| Arrows on the spacebar | On |
| The spacebar shows | Language |
| Spacebar text | Blank (live language name) |
| Swipe to delete (backspace) | On |
| Swipe deletes | Words |
| Show what you will delete | On |
| Word delete distance | 72 dp (32–120 dp) |
| Character delete distance | 20 dp (8–48 dp) |
| Volume keys move the cursor | Off |
| Release the keys while audio plays | On |
Open the Typing tile in settings, or search "Gestures", "Backspace" or "Volume keys". Cursor speed only appears while a swipe slot is set to Cursor. Swipe deletes, Show what you will delete and the two step distances only appear while Swipe to delete is on, and the two distances are one setting each: Words mode shows Word delete distance, Characters mode shows Character delete distance. The Gestures group's language-switching settings (Arrows on the spacebar, The spacebar shows, Spacebar text) are covered on Switching languages instead of here. For the field-by-field breakdown see Typing settings.
- Numpad is a discrete action, not a distance-based one. Cursor keeps stepping for as long as you keep dragging. A swipe assigned to Numpad only needs to clear the initial slop once: the panel opens immediately and the rest of the drag does nothing.
- A hint flick is judged when the finger lifts, never while it's moving. Nothing is claimed early, so a downward stroke that turns out to be longer, slower or bendier than a flick is decoded as the glide or read as the tap it always was. The one stroke it does take from glide typing is a fast, straight, short one, and the duration cap is what stops most short glided words from qualifying.
- The 's swipe is judged at the lift too, and never claims a stroke a glide could want. Glide typing doesn't start strokes on punctuation keys, so a stroke off the comma or full stop is never a word in the first place, whether glide typing is on or off. Only a swipe that actually changed the field keeps the lift; one with nothing behind the cursor to extend lands as the key's own tap.
- Two settings hide the keyboard on a downward swipe, two words apart. "Swipe down to hide the keyboard" lives here under Typing → Gestures and applies to the spacebar. "Swipe down to hide" under Appearance → Toolbar applies to the toolbar strip. They don't affect each other, and both are off out of the box.
- The 2-D cursor touchpad only takes precedence over swipe-down-to-hide once a drag has resolved to Cursor. Hold time decides which slot governs a drag. With the defaults (quick swipe = Language, press and hold then swipe = Cursor), a fast downward flick inside the long-press delay belongs to the quick-swipe slot and dismisses the keyboard instead of moving the cursor down through lines.
- Backspace's word-delete acceleration resets on a reversal, not on release. Dragging right mid-swipe doesn't bring back a deleted word. It only means the next leftward word costs full travel again instead of the shrunk amount.
- Volume-key cursor control re-checks "is audio playing" on every key press, not once at the start of the drag, so control passes back and forth live as playback starts and stops.
- A drag off ?123 or ABC is never read as a word either, for the same reason as a modifier drag: ?123 sits against the bottom row beside the spacebar, and a touch that starts there belongs to the layer drag.
- A drag off a modifier or Shift key is never read as a word. Glide typing and handwriting both measure where your finger landed, and a touch that started on one of those keys belongs to the chord drag. Shift is the one you may notice: it sits against the bottom letter row, so a glide that used to be startable from its inner edge now capitalizes instead. Start the word one key further in.
- Caps lock is not a drag source. It's a state you leave switched on, so holding it for one key means nothing, and Shift is one key away for anyone who wants that.
- Ctrl to A, C, V or X goes through the same route as the toolbar's copy and paste. Those four reach text fields that a raw key event doesn't, such as web views and Compose fields. Ctrl shortcuts as raw key events, under Typing / Key press, opts back out of that for terminal apps.
- Word deletion falls back to character-by-character inside overlay search boxes (emoji, clipboard or dictionary search, a plugin text field, the typing-test box, or an in-progress handwriting stroke), since word-deleting the real field hidden behind the overlay would be invisible and wrong.
See Keys & typing basics for tap and long-press behavior on single keys, Switching languages for the spacebar's Language swipe and the hold-drag picker, Glide typing for swiping across the letters, and Text editing for the numpad panel and the other cursor tools.
- Home
- Getting started
- Typing
- Languages
- Suggestions & correction
- Emoji & expression
-
Tools
- Clipboard manager
- Voice typing
- Offline voice (Whisper)
- Handwriting
- Scanner (OCR, QR, documents)
- Camera tool
- Translate
- Search, Wikipedia & dictionary
- Media controls
- AI chat
- AI tools
- Utility tools
- Snippets & text expansion
- Text editing & cursor tools
- Instruments
- Trackpad
- Calendar
- App launcher
- Learn from text
- Vocabulary
- Resize the keyboard
- The toolbar
- Themes & appearance
- Addons
- Plugins
- Privacy & security
- Accessibility
-
Reference
- Gesture cheat sheet
- Typing
- Hardware shortcuts
- Deep links & launcher shortcuts
- Key press
- File formats
- Dictionaries & words
- Importing from other keyboards
- Languages
- Importing from Espanso
- Appearance
- Keyboard themes
- Troubleshooting
- Glossary
- Keyboard font
- Easter eggs
- Icons
- Layout & size
- Key layouts
- Rows & bars
- Keyboard modes
- Emoji
- Phone number formats
- Tools
- Addons & plugins
- Reference - Accessibility
- Fingerprint lock
- Reference - Data saver
- Reference - Permissions
- Privacy
- Reference - Selection actions
- Servers
- Reference - Backup & restore
- About & diagnostics
- Statistics
- Settings A–Z
- Development