#12385

Option to prevent applications from hiding/overriding cursor (for custom shader users)

Openooookaaayopened 6mo ago

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 integration
  • cursor-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 = true

This 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

0

No activity yet.