Title: macOS: Dictation (voice input) cannot insert text into Neovide
Describe the bug macOS dictation (voice input) cannot input text into Neovide. When triggering dictation via the system shortcut (Fn Fn or Globe key) or menu (Edit → Start Dictation), the dictation UI appears and listens, but no text is inserted into the Neovide buffer.
This appears to be because Neovide does not fully implement the macOS NSTextInputClient protocol — it handles keyboard input at a lower level via winit, so macOS has no standard text input target to deliver dictated text to.
To Reproduce
- Open Neovide on macOS
- Enter insert mode
- Trigger macOS dictation (press Fn twice, or Globe key, or Edit → Start Dictation)
- Speak some text
- Dictation UI shows and transcribes, but no text appears in the buffer
Expected behavior
Dictated text should be inserted at the cursor position, the same way it works in native Cocoa apps (e.g., Terminal.app, TextEdit) and other terminals that implement NSTextInputClient (e.g., iTerm2).
Screenshots N/A
Desktop (please complete the following information):
- OS: macOS (please fill in your version, e.g. macOS 15.x)
- Neovide Version: 0.16.2
- Neovim Version: (please fill in your version)
Please run neovide --log and paste the contents of the .log file created in the current directory here:
log is empty when start/stop the voice input
Additional context
- This is likely related to #3531 (missing
audio-inputentitlement), but may be a separate issue: even if microphone access is granted, Neovide's input handling via winit may not support the Cocoa text input protocol that macOS dictation relies on to deliver transcribed text. - Other GPU-accelerated apps (WezTerm, Alacritty, kitty) have the same limitation, suggesting this is a winit-level issue with
NSTextInputClientsupport. - Native macOS terminals (Terminal.app, iTerm2) handle dictation correctly because they use AppKit text views.
- The macOS Accessibility Keyboard's dictation button works as a workaround since it injects keystrokes at the OS level, bypassing
NSTextInputClient.
Source: neovide/neovide