Problem
When running TUI applications like Claude Code (built on React Ink), the app hides the real terminal cursor via \033[?25l and renders its own pseudo-cursor as plain text characters. As a result, Ghostty's custom cursor shader stops working entirely — because the shader is applied to the real terminal cursor, not to text rendered by the app.
This makes custom cursor shaders (e.g. cursor_smear.glsl) effectively useless inside any TUI app that manages its own cursor rendering.
Current workarounds
shell-integration-features = no-cursor— doesn't help, this only affects Ghostty's own shell integrationcursor-style = block— doesn't help, the app hides the cursor entirely
Feature request
An option to prevent applications from hiding or changing the cursor style, keeping Ghostty's configured cursor and shader visible at all times. Something like:
cursor-style-lock = trueThis would ignore \033[?25l (hide cursor) and \033[X q (DECSCUSR cursor shape changes) from applications, always rendering Ghostty's own cursor with the configured shader on top.
Environment
- Ghostty with
custom-shader = shaders/cursor_smear.glsl - macOS
- Reproduces with any React Ink-based TUI (Claude Code, etc.)
Activity
0No activity yet.