• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

umputun / agterm / 32068946471
97%

Build:
DEFAULT BRANCH: master
Ran 17 Aug 2026 09:05PM UTC
Jobs 1
Files 93
Run time 1min
Badge
Embed ▾
README BADGES
x

If you need to use a raster PNG badge, change the '.svg' to '.png' in the link

Markdown

Textile

RDoc

HTML

Rst

17 Aug 2026 09:01PM UTC coverage: 97.978% (+0.006%) from 97.972%
32068946471

push

github

umputun
feat: report a surface's cursor column over the control API

libghostty exposes no cursor accessor, so the column is solved for.
`ghostty_surface_ime_point` gives the cursor cell's midpoint as
`(column * cellWidth + paddingLeft + cellWidth / 2) / contentScale`, and the
padding is the unknown: `ghostty_surface_size` does not carry it, and a user
`ghostty.conf` can override agterm's default untracked. Reading the viewport's
top-left cell measures it instead, `ghostty_text_s.tl_px_x` being
`(column * cellWidth + paddingLeft) / contentScale` for the cell asked for, so at
column zero it is the padding term itself and subtracting leaves `column + 0.5`
cells. Neither side is derived, which is why it holds under asymmetric
`window-padding-*` and `window-padding-balance`.

Verified against parked carets on a live instance: exact at columns 0, 1, 14 and
40, at the right edge where the terminal clamps, under `window-padding-x = 37,3`
with `window-padding-y = 11,2` and balance on, across font sizes, on both split
panes and on a session that was never on screen.

There is no row and this is not a gap to fill later. `tl_px_y` is the text
baseline while the IME point is the cell bottom, leaving a term no probe
separates from the row. It cancels for ordinary fonts, but with
`adjust-font-baseline = 30` a caret parked on row 4 reported row 5 while its
column stayed right. A silently wrong row is worse than an absent one, so a row
waits for a real accessor and joins the same nested `cursor` object if it ever
arrives.

The command shares `surface.zoom`'s target vocabulary and its gates, which is
what makes `active` name one surface across both: it reads the window's zoom
target before the store's focused pane, or zooming a pane that does not hold
focus reads the hidden one. Both paths pass `TerminalZoomController.isTargetValid`,
so a guessed `surface:<id>:overlay` cannot read a HUD that `tree` omits and zoom
rejects, and `quick` gates on visibility rather than on the sur... (continued)

26 of 26 new or added lines in 5 files covered. (100.0%)

8042 of 8208 relevant lines covered (97.98%)

4971381.64 hits per line

Jobs
ID Job ID Ran Files Coverage
1 32068946471.1 17 Aug 2026 09:05PM UTC 93
97.98
GitHub Action Run
Source Files on build 32068946471
  • Tree
  • List 93
  • Changed 5
  • Source Changed 5
  • Coverage Changed 5
Coverage ∆ File Lines Relevant Covered Missed Hits/Line
  • Back to Repo
  • Github Actions Build #32068946471
  • 2279c722 on github
  • Prev Build on master (#32060495421)
  • Next Build on master (#32099701941)
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE TRIAL · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2026 Coveralls, Inc