Commit graph

18419 commits

Author SHA1 Message Date
Ayo
1920295902 feat: make launch executable
Some checks are pending
CI / Linux (python=3.13 cc=clang sanitize=1) (push) Waiting to run
CI / Linux (python=3.11 cc=gcc sanitize=0) (push) Waiting to run
CI / Linux (python=3.12 cc=gcc sanitize=1) (push) Waiting to run
CI / Linux package (push) Waiting to run
CI / Bundle test (macos-latest) (push) Waiting to run
CI / Bundle test (ubuntu-latest) (push) Waiting to run
CI / macOS Brew (push) Waiting to run
CI / Test ./dev.sh and benchmark (push) Waiting to run
2026-06-20 13:13:32 +02:00
Ayo
c63a52b794 chore: update CONTRIBUTING for commands & key files
Some checks are pending
CI / Linux (python=3.13 cc=clang sanitize=1) (push) Waiting to run
CI / Linux (python=3.11 cc=gcc sanitize=0) (push) Waiting to run
CI / Linux (python=3.12 cc=gcc sanitize=1) (push) Waiting to run
CI / Linux package (push) Waiting to run
CI / Bundle test (macos-latest) (push) Waiting to run
CI / Bundle test (ubuntu-latest) (push) Waiting to run
CI / macOS Brew (push) Waiting to run
CI / Test ./dev.sh and benchmark (push) Waiting to run
2026-06-20 12:00:28 +02:00
Ayo
aed4f629f0 feat: add launch script
Some checks are pending
CI / Linux (python=3.13 cc=clang sanitize=1) (push) Waiting to run
CI / Linux (python=3.11 cc=gcc sanitize=0) (push) Waiting to run
CI / Linux (python=3.12 cc=gcc sanitize=1) (push) Waiting to run
CI / Linux package (push) Waiting to run
CI / Bundle test (macos-latest) (push) Waiting to run
CI / Bundle test (ubuntu-latest) (push) Waiting to run
CI / macOS Brew (push) Waiting to run
CI / Test ./dev.sh and benchmark (push) Waiting to run
2026-06-20 10:31:23 +02:00
Ayo
944ab76b49 feat(installer): update debian deps installation script
Some checks are pending
CI / Linux (python=3.13 cc=clang sanitize=1) (push) Waiting to run
CI / Linux (python=3.11 cc=gcc sanitize=0) (push) Waiting to run
CI / Linux (python=3.12 cc=gcc sanitize=1) (push) Waiting to run
CI / Linux package (push) Waiting to run
CI / Bundle test (macos-latest) (push) Waiting to run
CI / Bundle test (ubuntu-latest) (push) Waiting to run
CI / macOS Brew (push) Waiting to run
CI / Test ./dev.sh and benchmark (push) Waiting to run
2026-06-20 10:28:27 +02:00
Ayo
d934a1ebf3 chore: add husky prepare script
Some checks are pending
CI / Linux (python=3.13 cc=clang sanitize=1) (push) Waiting to run
CI / Linux (python=3.11 cc=gcc sanitize=0) (push) Waiting to run
CI / Linux (python=3.12 cc=gcc sanitize=1) (push) Waiting to run
CI / Linux package (push) Waiting to run
CI / Bundle test (macos-latest) (push) Waiting to run
CI / Bundle test (ubuntu-latest) (push) Waiting to run
CI / macOS Brew (push) Waiting to run
CI / Test ./dev.sh and benchmark (push) Waiting to run
2026-06-20 10:22:29 +02:00
Ayo
7e8e5fcb12 chore: make readme markdown
Some checks failed
CI / Linux (python=3.13 cc=clang sanitize=1) (push) Has been cancelled
CI / Linux (python=3.11 cc=gcc sanitize=0) (push) Has been cancelled
CI / Linux (python=3.12 cc=gcc sanitize=1) (push) Has been cancelled
CI / Linux package (push) Has been cancelled
CI / Bundle test (macos-latest) (push) Has been cancelled
CI / Bundle test (ubuntu-latest) (push) Has been cancelled
CI / macOS Brew (push) Has been cancelled
CI / Test ./dev.sh and benchmark (push) Has been cancelled
CodeQL / CodeQL-Build (actions, ubuntu-latest) (push) Has been cancelled
CodeQL / CodeQL-Build (c, macos-latest) (push) Has been cancelled
CodeQL / CodeQL-Build (c, ubuntu-latest) (push) Has been cancelled
CodeQL / CodeQL-Build (go, ubuntu-latest) (push) Has been cancelled
CodeQL / CodeQL-Build (python, ubuntu-latest) (push) Has been cancelled
Depscan / Scan dependencies for vulnerabilities (push) Has been cancelled
2026-06-20 10:11:32 +02:00
Ayo
f9071359f0 chore: add husky postcommit
Some checks are pending
CI / Linux (python=3.13 cc=clang sanitize=1) (push) Waiting to run
CI / Linux (python=3.11 cc=gcc sanitize=0) (push) Waiting to run
CI / Linux (python=3.12 cc=gcc sanitize=1) (push) Waiting to run
CI / Linux package (push) Waiting to run
CI / Bundle test (macos-latest) (push) Waiting to run
CI / Bundle test (ubuntu-latest) (push) Waiting to run
CI / macOS Brew (push) Waiting to run
CI / Test ./dev.sh and benchmark (push) Waiting to run
CodeQL / CodeQL-Build (actions, ubuntu-latest) (push) Waiting to run
CodeQL / CodeQL-Build (c, macos-latest) (push) Waiting to run
CodeQL / CodeQL-Build (c, ubuntu-latest) (push) Waiting to run
CodeQL / CodeQL-Build (go, ubuntu-latest) (push) Waiting to run
CodeQL / CodeQL-Build (python, ubuntu-latest) (push) Waiting to run
Depscan / Scan dependencies for vulnerabilities (push) Waiting to run
2026-06-20 09:44:58 +02:00
Ayo
be6cdf1f8e feat: add linux-install-deps script 2026-06-20 09:40:09 +02:00
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
Some checks failed
CI / Linux (python=3.13 cc=clang sanitize=1) (push) Has been cancelled
CI / Linux (python=3.11 cc=gcc sanitize=0) (push) Has been cancelled
CI / Linux (python=3.12 cc=gcc sanitize=1) (push) Has been cancelled
CI / Linux package (push) Has been cancelled
CI / Bundle test (macos-latest) (push) Has been cancelled
CI / Bundle test (ubuntu-latest) (push) Has been cancelled
CI / macOS Brew (push) Has been cancelled
CI / Test ./dev.sh and benchmark (push) Has been cancelled
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 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 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
Kovid Goyal
4c3b96ca40
Update changelog 2026-06-10 19:02:54 +05:30