Text injection

Last updated 4 min read

Once transcription (and optional cleanup) finishes, evoglyph places the resulting text into whichever app was focused when you pressed the hotkey. This article explains the three injection strategies evoglyph uses, how it picks between them, and what to do if text lands in the wrong place.

The three injection strategies

AXUIElement splice — native Cocoa apps

For native macOS apps, evoglyph reads the current value of the focused text field via the macOS Accessibility API (AXValue), inserts the new text at the cursor position, and writes the updated value back.

This is the default strategy. Apps not matched by the bundle-ID routing table use this path; if it fails, evoglyph falls back to copying to the clipboard with a notification.

Keystroke injection — terminals

Terminal-class apps typically do not expose editable text via the Accessibility API in a way that supports direct splicing. For this category, evoglyph uses keystroke injection — text is delivered as synthesised key events rather than a direct AXValue write.

The routing table in the next section is the authoritative source of which apps are currently mapped to which strategy.

Pasteboard — browsers and Electron apps

Browsers and Electron-based apps do not expose editable text via the Accessibility API in a way that supports direct splicing. For these apps, evoglyph writes the transcribed text to the system pasteboard and synthesises Cmd + V to paste it. The effect is a single paste operation arriving at the cursor.

This is the same path a human uses when pasting from the clipboard, so it works in any app that accepts paste input.

How evoglyph picks a strategy

evoglyph identifies the frontmost app by its bundle ID and selects the injection strategy from a routing table. The table below lists the current mappings:

App Bundle ID Method
Native Cocoa apps (default) AXValue read-splice-write
iTerm2 com.googlecode.iterm2 Pasteboard + Cmd+V
Obsidian md.obsidian Pasteboard + Cmd+V
Chrome com.google.Chrome Pasteboard + Cmd+V
Claude com.anthropic.claudefordesktop Pasteboard + Cmd+V
Electron apps com.electron.* Pasteboard + Cmd+V
Fallback any (when others fail) Copy to clipboard + notification

The strategy is applied automatically — there is nothing to configure. Note that iTerm2 and Obsidian are currently mapped to the pasteboard path, not keystroke injection. For per-app details, see Target apps.

Why Accessibility permission is required

Both the AXUIElement splice path and the keystroke path require the macOS Accessibility permission (System Settings › Privacy & Security › Accessibility). Without it, evoglyph cannot read focused text fields or synthesise keystrokes — injection falls back to pasteboard for all apps.

The pasteboard path does not require Accessibility permission, but it overwrites whatever was previously on your clipboard. For most workflows, granting Accessibility access and getting the native splice path is the better experience.

See the Grant permissions guide for how to enable Accessibility access.

Troubleshooting injection failures

Text appears at the wrong cursor position

The AXUIElement path reads the cursor position at the moment evoglyph injects, which is after transcription completes. If you click somewhere else during dictation, the cursor moves and the text lands at the new position. Keep focus on the target field while dictating.

Notification says "copied to clipboard — paste manually"

This means all three injection paths failed. The most common cause is missing Accessibility permission. Check System Settings › Privacy & Security › Accessibility and confirm evoglyph is listed and enabled. If it is, the target app may have an unusual text architecture; try a manual paste to confirm the text is on the clipboard.

Was this helpful?