This document defines keyboard behavior currently implemented in EnterCalc for iOS and macOS.
Sources:
| Key | Base | Direct edit | Rounding overlay | History overlay |
|---|---|---|---|---|
| Insert | Enter direct edit; caret to trailing boundary | Already in direct edit; no extra action | Blocked while overlay is active | Blocked while overlay is active |
| Left Arrow | Move display caret left (activates direct edit if possible) | Move display caret left | Decrease rounding precision step | Suppressed |
| Right Arrow | Move display caret right (activates direct edit if possible) | Move display caret right | Increase rounding precision step | Suppressed |
| Down Arrow | Open rounding overlay | Open rounding overlay | No-op (consumed) | Suppressed |
| Up Arrow | No mapped action | No mapped action | Close rounding overlay | Suppressed |
| Shift + Up Arrow | Increase display size (20pt) | Increase display size | Increase display size | Increase display size |
| Shift + Down Arrow | Decrease display size (20pt) | Decrease display size | Decrease display size | Decrease display size |
| Escape | Clear all | Exit direct edit | Remove rounding and close overlay | Close overlay |
| End | Clear all | Exit direct edit | Close overlay | Close overlay |
| Backspace | Delete one char/digit via model backspace | Delete one char/digit before caret | Remove rounding and close overlay | Close overlay |
| Forward Delete | Delete one char/digit via model backspace | Delete one char/digit before caret | Remove rounding and close overlay | Clear history and close overlay |
| Return / Enter / Keypad Enter | Evaluate | Exit direct edit | Close overlay | Close overlay |
| Digits 0-9 | Input digit | Insert at display caret | Not handled here | Suppressed |
| Decimal . | Input decimal separator | Insert decimal at display caret | Not handled here | Suppressed |
| + - * / | Set operator | Set operator (exits direct edit in model flow) | Not handled here | Suppressed |
| % | Apply percent | Apply percent | Not handled here | Suppressed |
| ( and ) | Input parentheses | Input parentheses | Not handled here | Suppressed |
| = | Evaluate | Evaluate path applies; direct edit Enter key exits edit | Not handled here | Suppressed |
| Currency symbols ($, €, £, etc.) | Activate currency input mode with symbol | Same behavior at caret position | Not handled here | Suppressed |
The calculator is in currency mode exactly when a currency symbol is showing; there is no separate mode selection. Entering one — by typing a currency symbol as above, or with the on-screen currency key beside the mode label — switches the mode label from Basic to Currency.
The on-screen key toggles: pressing it once applies the symbol chosen in Settings, and pressing it again leaves currency mode and removes the symbol without changing the entered value. It clears whichever symbol is active, including one typed on a hardware keyboard that differs from the configured one, so it is always a reliable way back to Basic.
Which symbol the key applies is chosen in Settings. It defaults to the device region’s currency (en-GB gives £, en-US gives $, de-DE gives €) until the user picks one.
0x49 (Insert) and 0x75 (Help), plus function-character U+F727.114, plus function-character U+F727.The split between the display and the keypad can be dragged, which leaves it unreachable without a pointer. Shift + Up/Down Arrow moves it in 20-point steps, within the same limits the drag handle respects, and stops at either end rather than wrapping.
These are menu commands under View → Increase / Decrease Display Size, not just key bindings, so they are discoverable and reachable by VoiceOver. The menu owns the shortcut: the app’s key monitor deliberately ignores Shift + Up/Down so a single press applies a single step, and so Shift + Down does not open the rounding overlay the way a bare Down Arrow does.
The step is not animated — it lands immediately, matching how dragging behaves.