Commit Graph

18422 Commits

Author SHA1 Message Date
copilot-swe-agent[bot]
d5037b5bed Tighten STAT format 4 value parsing 2026-06-23 16:35:35 +00:00
copilot-swe-agent[bot]
ce931d8b11 Fix STAT format 4 parsing pointer advance 2026-06-23 16:32:14 +00:00
copilot-swe-agent[bot]
8d3ba6df60 Initial plan 2026-06-23 16:26:01 +00:00
Kovid Goyal
5fae28d804 macOS: Fix incorrect horizontal alignment when using text sizing protocol
Fixes #10179
2026-06-23 21:46:01 +05:30
Kovid Goyal
f5a4c9b907 Update Linux build VM to Ubuntu 22
Allows using up to date simde and newer compilers for small performance
improvements. Ubuntu 18 and 20 are EOL and Ubuntu 22 was released over four
years ago.

This will also hopefully allow us to build slang for the upcoming
transition to slang based shaders.
2026-06-23 08:57:24 +05:30
Kovid Goyal
a6ccfa99f3 Merge branch 'dependabot/go_modules/all-go-deps-9ac4468181' of https://github.com/kovidgoyal/kitty 2026-06-22 09:20:31 +05:30
dependabot[bot]
53bb448353 Bump github.com/nwaples/rardecode/v2 in the all-go-deps group
Bumps the all-go-deps group with 1 update: [github.com/nwaples/rardecode/v2](https://github.com/nwaples/rardecode).


Updates `github.com/nwaples/rardecode/v2` from 2.2.3 to 2.2.5
- [Commits](https://github.com/nwaples/rardecode/compare/v2.2.3...v2.2.5)

---
updated-dependencies:
- dependency-name: github.com/nwaples/rardecode/v2
  dependency-version: 2.2.5
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: all-go-deps
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-06-22 03:43:04 +00:00
Kovid Goyal
d114388553 Cleanup previous PR 2026-06-21 13:23:58 +05:30
Kovid Goyal
54a7841d18 Merge branch 'bvolpato/vertical-tab-bar-side' of https://github.com/bvolpato/kitty 2026-06-21 13:18:10 +05:30
Kovid Goyal
42d3cb2148 Merge branch 'copilot/review-image-usage-hints-functionality' of https://github.com/kovidgoyal/kitty 2026-06-19 12:36:08 +05:30
copilot-swe-agent[bot]
051a5b72e0 Preferentially evict transient images before non-transient ones under storage pressure 2026-06-19 06:48:39 +00:00
Kovid Goyal
d994a47fc8 Cleanup previous PR 2026-06-19 11:36:43 +05:30
Kovid Goyal
a2104d3755 Merge branch 'feat/10090-graphics-cache-dir' of https://github.com/Mekann2904/kitty 2026-06-19 10:16:10 +05:30
Kovid Goyal
9dfe10b682 Update changelog 2026-06-19 10:13:58 +05:30
Kovid Goyal
6202fb7847 Merge branch 'copilot/fix-issue-10146' of https://github.com/kovidgoyal/kitty
Fixes #10146
2026-06-19 10:13:08 +05:30
Matsumoto Kotaro
89946ebc07 graphics: make N a transient usage-hints bitmask
Change the graphics protocol N key from a boolean into a usage-hints
bitmask. Define the first bit as a transient hint, allowing the terminal
to treat the image data as short-lived and apply optimizations such as
skipping disk cache writes.

Propagate the transient hint through frame coalescing and composition, so
a composed frame is transient if any contributing frame is transient.
2026-06-19 13:22:01 +09:00
copilot-swe-agent[bot]
946867bf57 Fix first Wayland window wrong cell count with fractional scale (issue 10146) 2026-06-19 02:43:17 +00:00
Kovid Goyal
ec2cc29de7 Dont expose method used only for testing to wider code 2026-06-19 07:28:52 +05:30
Kovid Goyal
38dae45e07 Bump python for CVE 2026-06-18 19:28:24 +05:30
Kovid Goyal
9112d779d0 Update changelog 2026-06-18 19:17:50 +05:30
Kovid Goyal
424d6f1ca4 Merge branch 'copilot/add-support-for-alternate-extents' of https://github.com/kovidgoyal/kitty
Fixes #10165
2026-06-18 19:16:43 +05:30
copilot-swe-agent[bot]
0901fcbc21 Fix description of alternate/alternate_scrollback extents 2026-06-18 11:12:56 +00:00
copilot-swe-agent[bot]
6b2bb97cb5 Add alternate and alternate_scrollback extents to get-text remote control command 2026-06-18 08:25:39 +00:00
Kovid Goyal
285c576ddd Merge branch 'fix-wayland-start-drag-silently-ignored' of https://github.com/ttys3/kitty 2026-06-18 10:37:36 +05:30
Kovid Goyal
e4e1ef0641 ... 2026-06-17 06:23:22 +05:30
Kovid Goyal
bdfcfc4fc2 Another stab at #10152 2026-06-16 05:43:25 +05:30
Kovid Goyal
1dc3730782 macOS: handle the OS calling insertText: with a nil string
Fixes #10152
2026-06-15 13:36:18 +05:30
Kovid Goyal
65e6a127ff Merge branch 'dependabot/github_actions/actions-882fedbe01' of https://github.com/kovidgoyal/kitty 2026-06-15 09:20:28 +05:30
Kovid Goyal
3c648e42f6 Merge branch 'dependabot/go_modules/all-go-deps-d54a6f1562' of https://github.com/kovidgoyal/kitty 2026-06-15 09:20:08 +05:30
dependabot[bot]
9b218001a1 Bump the actions group with 2 updates
Bumps the actions group with 2 updates: [actions/checkout](https://github.com/actions/checkout) and [github/codeql-action](https://github.com/github/codeql-action).


Updates `actions/checkout` from 6.0.2 to 6.0.3
- [Release notes](https://github.com/actions/checkout/releases)
- [Changelog](https://github.com/actions/checkout/blob/main/CHANGELOG.md)
- [Commits](https://github.com/actions/checkout/compare/v6.0.2...v6.0.3)

Updates `github/codeql-action` from 4.36.0 to 4.36.2
- [Release notes](https://github.com/github/codeql-action/releases)
- [Changelog](https://github.com/github/codeql-action/blob/main/CHANGELOG.md)
- [Commits](https://github.com/github/codeql-action/compare/v4.36.0...v4.36.2)

---
updated-dependencies:
- dependency-name: actions/checkout
  dependency-version: 6.0.3
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: actions
- dependency-name: github/codeql-action
  dependency-version: 4.36.2
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: actions
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-06-15 03:45:12 +00:00
dependabot[bot]
b43ca8fe31 Bump golang.org/x/sys from 0.45.0 to 0.46.0 in the all-go-deps group
Bumps the all-go-deps group with 1 update: [golang.org/x/sys](https://github.com/golang/sys).


Updates `golang.org/x/sys` from 0.45.0 to 0.46.0
- [Commits](https://github.com/golang/sys/compare/v0.45.0...v0.46.0)

---
updated-dependencies:
- dependency-name: golang.org/x/sys
  dependency-version: 0.46.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: all-go-deps
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-06-15 03:42:57 +00:00
Kovid Goyal
a685af8c35 version 0.47.4 v0.47.4 2026-06-15 08:11:46 +05:30
Kovid Goyal
ba6b652850 Merge branch 'color-emoji-test-robust' of https://github.com/Strykar/kitty 2026-06-14 21:06:44 +05:30
Strykar
fc23ef57ec fonts: make the color emoji regression test environment-independent
The coverage threshold (0.5 in fbd4e5ad1, lowered to 0.3 in d4106ef2d to
get CI green) is environment-dependent: a correctly sized emoji covers
~0.84 of its cell on one box but ~0.39 in CI, while the buggy render is
~0.28, so the margin is thin and font/cell dependent.

Render the same font two ways at one size instead: via its fontconfig
descriptor (which carries the size-fixup matrix) and via its file path
(which does not). They must come out the same size; the bug shrinks the
descriptor one. Only the matrix differs, so the check no longer depends
on the environment or the emoji artwork.
2026-06-14 21:00:12 +05:30
Kovid Goyal
d4106ef2db Lower threshold for color emoji shrinkage test as at least in CI the font results in a smaller emoji 2026-06-14 20:48:59 +05:30
Kovid Goyal
9393e29793 Update changelog 2026-06-14 20:08:53 +05:30
Kovid Goyal
e4bce6485b Merge branch 'fix-10144' of https://github.com/Strykar/kitty 2026-06-14 20:07:56 +05:30
Strykar
fbd4e5ad1f freetype: do not apply the fontconfig size-fixup matrix to color glyphs
ee937bdd1b routed FC_MATRIX through the cairo font matrix so synthetic
slant reaches color glyphs. But FC_MATRIX is also how fontconfig encodes
the pixel-size fixup of fixed-size faces. Noto Color Emoji is a ~109px
bitmap strike and fontconfig hands consumers a matrix scaling it to the
requested size (factor = requested_px / strike_px). cairo_set_font_size()
already brings the strike to the requested size, so feeding that matrix
into cairo_set_font_matrix() in apply_cairo_font_size() scales it down
again by the fixup factor. At terminal cell sizes that is a large shrink,
up to ~9x for small cells (easing to 1x as the cell nears the strike), so
color emoji render as a dot; fit_cairo_glyph() only shrinks, so it never
grows them back.

Only the shear carries synthetic slant; the diagonal is the size, which
cairo_set_font_size() and fit_cairo_glyph() already handle. Apply only
the shear and fall through to cairo_set_font_size() when there is no
shear. Pure-slant matrices are unchanged. This carries only the shear to
color glyphs, so a non-uniform diagonal scale from a hand-built FC_MATRIX
is dropped on that path; the stock fixup is uniform, so dropping it is
the intended behaviour.

Add a regression test that renders a color emoji and checks it fills its
cells, skipped unless a fixed-size color font with a fontconfig fixup
matrix is present.

Fixes #10144
2026-06-14 15:14:04 +05:30
Kovid Goyal
48ee061454 Update changelog 2026-06-13 12:50:05 +05:30
Kovid Goyal
aa4e94cef5 Merge branch 'render-time-matrix' of https://github.com/Strykar/kitty 2026-06-13 12:49:05 +05:30
Kovid Goyal
8a39929c15 Bump sqlite for CVE 2026-06-12 19:54:22 +05:30
ttyS3
98366076e1 fix(wayland): detect start_drag silently ignored by the compositor
The pointer_button_count check added in dc36e2165 uses the client side
view of the implicit grab, which is stale when the button release is
still in flight: glfwStartDrag passes the check, but by the time the
compositor processes wl_data_device.start_drag the implicit grab is
gone and the request is silently dropped. The data source then never
receives any event, so the tab drag state leaks forever, hijacking
mouse handling again, and the already created xdg_toplevel_drag
toplevel gets mapped as a stray undecorated window showing the drag
thumbnail that nothing ever destroys.

Detect this deterministically using protocol ordering: issue a
wl_display.sync right after start_drag. An accepted start_drag
synchronously produces events (wl_pointer.leave from the DND grab
taking over, wl_data_device.enter, wl_data_source events) that are
ordered before the sync callback. If the callback fires with none of
them seen, the request was dropped: cancel the drag, which notifies
the application (clearing the tab drag state) and destroys the drag
toplevel and data source.

Also defer mapping the drag toplevel until the session is confirmed,
so the stray window can never appear, not even for one frame.

Verified against headless GNOME Shell 50.2 (mutter) with injected
pointer timing scans: the unpatched build deadlocks with an orphaned
drag toplevel within ~13 fast flicks, the patched build catches every
race hit and cancels cleanly, with no deadlock, no stray window, and
normal slow drag/reorder/detach behaviour preserved.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-06-12 14:16:22 +08:00
Kovid Goyal
b15e047a47 version 0.47.3 v0.47.3 2026-06-12 09:57:55 +05:30
Kovid Goyal
8be4ea67ac Mark dnd protocol as stable
No significant feedback received post release of protocol in 0.47.0
almost a month ago.

Protocol can now only change in backward compatible ways, barring
security issues.

Fixes #9984
2026-06-12 09:50:41 +05:30
Kovid Goyal
a0457f6141 Update changelog 2026-06-12 09:47:35 +05:30
Kovid Goyal
cb1e64ffc5 Merge branch 'fix-tabs-mouse-handling-stuck' of https://github.com/ttys3/kitty 2026-06-12 09:46:23 +05:30
Kovid Goyal
d5f69fe853 Update openssl for CVEs 2026-06-12 07:29:08 +05:30
Kovid Goyal
8651e1fac5 Update changelog 2026-06-12 07:08:29 +05:30
Kovid Goyal
cf630f1699 ... 2026-06-11 06:00:16 +05:30
Strykar
8be2a10b29 fonts: attach synthetic-italic FC_MATRIX to found roman faces
fontconfig's FcFontList omits FC_MATRIX from its object set
(kitty/fontconfig.c), so a roman font that find_best_match finds there
(e.g. Fira Code, which ships no italic, in both its static and variable
builds) carries no synthetic-italic shear and its "italic" renders upright.
A family that is not found is substituted, and when the substitute
resolves through the listed faces those descriptors are equally
matrix-less, so this attach covers them too. Only raw fc_match
descriptors (runtime glyph-fallback faces via create_fallback_face, and
find_best_match's last-resort return) already carry the matrix from
substitution.

The italic intent for the configured faces exists only during selection,
not at face construction, so attach the matrix at the end of
get_font_files: for an italic slot whose chosen face is upright and has no
matrix, ask fc_match what fontconfig would do. fc_match returns a synthetic
matrix only when there is no real italic to use (no italic face and no
slanted named instance or variable slant axis), so a font that is already
italic, static or variable, is never double-slanted. Face construction
applies the matrix via FT_Set_Transform; the previous commit makes it
survive the size specialization step the render path builds faces from.
Only the matrix is taken, so selection is unchanged.

FontConfigPattern declared matrix as a required key, but pattern_as_dict
sets it only when the pattern has one, so declare it NotRequired. With
that and narrowing on descriptor_type the attach needs no cast.

Add a regression test (test_synthetic_italic_matrix): a roman no-italic
font gets a non-identity matrix on its italic slot while a real-italic
control does not, and the matrix survives specialize_font_descriptor. It
asserts the invariant rather than the exact shear (the value is
fontconfig's, version-dependent) and skips when the synthetic rule is
inactive.

Covers the four configured faces. Limitation: fc_match re-matches by family
name, so under an uncommon config (a multi-face family key plus a user
per-font FC_MATRIX rule keyed on width/style) it can attach a matrix
computed for a different face; the 90-synthetic shear this targets is
weight-independent and unaffected. A production version should re-match the
selected face by path+index+slant.
2026-06-11 00:57:59 +05:30