Skip to content

Capability proxy: kitty flag state + remaining static-query coverage #18

Description

@chaodu-agent

Deferred from the #16 / capability-proxy follow-up review (fable). Non-blocking refinements:

  • Kitty keyboard is stateful, answered as static. The proxy always answers CSI ? u with ?0u, but CSI > flags u (push) / CSI < u (pop) / CSI = flags ; mode u (set) pass through and change the client emulators key encoding. An app that pushes then queries is told the push failed. The proxy sees the push/pop/set go by and could track the flag stack, or the behaviour should be documented.
  • Static-query coverage gaps (pass through today, so the client answers and — when the filter is on — TermFilter strips the reply, i.e. a dead-end): OSC 12 (cursor colour), OSC 4 (palette), tertiary DA (CSI = c), DSR ?-family (?25n/?26n/…), multi-param OSC 10;?;? (SwiftTerm answers fg+bg), and zero-padded params (CSI 00c/05n — SwiftTerm parses numerically, the proxy compares bytes).
  • OSC terminator: proxy mirrors the query terminator (BEL→BEL); SwiftTerm always sends ST. Harmless, arguably better (xterm-like), but not byte-exact as the module doc claims — normalise or adjust the doc.
  • CPR still enters the ring buffer (not consumed at source), so a ?since= replay can re-deliver a CPR query; the client must answer only live CPR. Endgame is answering CPR at the source via an embedded VT state machine (libghostty-vt), which also removes it from replay. See Terminal capability proxy: the runtime should answer static queries itself #15.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions